Coppeliasim仿真日记(四): 如何在Coppeliasim进行多计算机联合仿真
作者:互联网
上篇:Coppeliasim仿真日记(三): Coppeliasim与python的联动——The B0-based remote API
当我们进行群体机器人仿真时,往往需要进行几十台或者几百台机器人的仿真,由于单台计算机的计算机资源有限,往往需要进行多台计算机联合并行仿真,本节将说明具体的操作步骤。
具体步骤:
首先将进行并行仿真的计算机都连接到同一个局域网上面,这边我采用的是通过路由器来连接局域网,连接完后选择其中一台作为和仿真软件连接的主计算机,查看其内网ip,具体步骤详见https://jingyan.baidu.com/article/00a07f38f8e483c2d128dc3c.html
这台主计算机的内网ip如图所示:
然后我们在这台计算机添加一个环境变量B0_RESOLVER_PORT,设置一个端口号:
最后在其它计算机添加另一个环境变量B0_RESOLVER,以便其它计算机能通过局域网连接上软件:
主计算机端(打开软件的计算机)的相关代码(一般只控制仿真的运行和结束):
import b0RemoteApi
import time
with b0RemoteApi.RemoteApiClient('Scene', 'b0RemoteApi') as client:
client.doNextStep = True
def simulationStepStarted(msg):
simTime = msg[1][b'simulationTime']
def simulationStepDone(msg):
simTime = msg[1][b'simulationTime']
client.doNextStep = True
client.simxSynchronous(True)
client.simxGetSimulationStepStarted(client.simxDefaultSubscriber(simulationStepStarted))
client.simxGetSimulationStepDone(client.simxDefaultSubscriber(simulationStepDone))
client.simxStartSimulation(client.simxDefaultPublisher())
startTime = time.time()
while time.time() < startTime + 1000:
if client.doNextStep:
client.doNextStep = False
client.simxSynchronousTrigger()
client.simxSpinOnce()
client.simxStopSimulation(client.simxDefaultPublisher())
其它计算机相关代码(一般只包含机器人的控制代码):
import b0RemoteApi
import time
with b0RemoteApi.RemoteApiClient('uav', ' b0RemoteApi') as client:
client.doNextStep = True
def simulationStepStarted(msg):
simTime = msg[1][b'simulationTime']
def simulationStepDone(msg):
simTime = msg[1][b'simulationTime']
client.doNextStep = True
client.simxSynchronous(True)
client.simxGetSimulationStepStarted(client.simxDefaultSubscriber(simulationStepStarted))
client.simxGetSimulationStepDone(client.simxDefaultSubscriber(simulationStepDone))
startTime = time.time()
while time.time() < startTime + 150: # 仿真时间设定
if client.doNextStep:
client.doNextStep = False
'''控制代码'''
client.simxSynchronousTrigger()
client.simxSpinOnce()
最后,在主计算机端打开b0resolver和仿真软件,之后运行主计算机端的程序,然后其它计算机运行自身的程序就能连接到主计算机端的仿真软件,执行机器人的控制操作。
最后
这个方法也是困扰了我好长的时间解决,最后在论坛上有人回答才搞定的,希望大家有问题还是多多查阅用户手册还有论坛。
标签:仿真,计算机,Coppeliasim,doNextStep,client,time,msg,日记 来源: https://blog.csdn.net/qq_42286607/article/details/116998607