Coppeliasim仿真日记(四): 如何在Coppeliasim进行多计算机联合仿真

本文介绍如何使用Coppeliasim与Python联动实现多台计算机并行仿真,适用于大规模机器人仿真场景。通过设置环境变量及代码配置,实现跨计算机同步仿真控制。
部署运行你感兴趣的模型镜像

上篇: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仿真日记(五): 如何利用Soildworks添加模型到场景中

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向南而行灬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值