Coppeliasim仿真日记(三): Coppeliasim与python的联动——The B0-based remote API

上篇:Coppeliasim仿真日记(二): Coppeliasim与python的联动——The legacy remote API, 以及进行多机器人仿真

本文主要讲python与Coppeliasim,通过使用B0-based remote API来进行机器人的仿真。


The B0-based remote API

这是官方对旧版API和新版的说明:

基于B0的远程API:这表示远程API的第二个版本。 它基于BlueZero中间件及其CoppeliaSim的接口插件。 与传统的远程API相比,它更易于使用且更具灵活性,最重要的是,它易于扩展。 目前,它支持以下语言:C ++JavaPythonMatlabLua

旧版远程API(或简称为远程API):这表示远程API的第一个版本。 与基于B0的远程API相比,它相对较轻并且具有更少的依赖性。 但是,它不那么直观,也不灵活,并且很难扩展。 它支持以下语言:C / C ++JavaPythonMatlabOctaveLua

这里说明一下为什么要用新版的API

  • 之前我们查阅官方的API手册时,会发现有些函数在调用旧版的sim库上时没有,例如:根据物品handle获取物品的名称的函数

       

   有时候我们想得到读取接近传感器函数返回检测到的handle是对应哪个物品名称,用旧库的函数就无法进行这种操作。

  • 新库有些函数能比旧库返回更多的参数,例如:

     

   读取接近传感器的函数,新库函数会返回接近传感器检测到的物品的距离,而旧库函数不会返回这些值。

  • 使用新库能更好地使用多机器人并行仿真,之前有讲过,用旧库要想达到能同时控制多台机器人的效果,采用的是每个py脚本控制每台机器人的方法。但使用新库,就能直接实现同时控制多台机器人的操作。

接下来,将说明新库,即基于B0的远程API,是如何使用的。


具体操作:

仿真环境的配置

查阅官方手册,我们可以得知:

服务端(一般是CoppeliaSim软件)的设置:

  1. 启动附加脚本simAddOnScript-b0RemoteApiServer.lua:您可以在菜单栏[附加组件-> b0RemoteApiServer]中手动启动它,也可以在CoppeliaSim启动时自动启动它(在这种情况下,将附加组件重命名为 simAddOnScript_b0RemoteApiServer.lua)。 附加脚本为所有场景提供了基于B0的远程API功能,而不会中断。
  2. 将模型Models / tools / B0远程Api server.ttm拖放到特定场景中:这样,基于B0的远程API功能将仅适用于该特定场景。

客户端(python端)的设置:

这里要说明一下blueZero库,这个库在软件安装目录\CoppeliaRobotics\CoppeliaSimEdu下面,要能够使用新库API,需要python工程文件夹下包含下列文件:

相关文件添加完后,就可以运行程序了,接下来说明在python上怎样使用这个库。

在python上的使用

下面是python客户端上的代码:

import b0RemoteApi
import time


with b0RemoteApi.RemoteApiClient('节点名称', '通道名字') 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 + 40:   # 仿真时间设定
        if client.doNextStep:
            client.doNextStep = False
            '''控制代码'''
            client.simxSynchronousTrigger()
        client.simxSpinOnce()
    client.simxStopSimulation(client.simxDefaultPublisher())  # 结束仿真

Coppeliasim上将API模型拖动到场景上:

同时软件会检测到你是否打开了b0 resolver,若没有打开会自动给你打开,这是通过bluezero连接场景和电脑的接口,这个b0 resolver在软件安装目录\CoppeliaRobotics\CoppeliaSimEdu可以找到。

最后运行程序,其中通道名要和python代码上的通道名对应,若出现

代表连接成功!

最后

吐槽一下当时改用这个The B0-based remote API时真的走了很多坑,在网上如何使用这个API的教程真的少之又少,最后是通过看用户手册慢慢试出来的,所以说多多看官网的用户手册能解决不少问题。

后面会讲如何多计算机进行联合仿真。

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

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

向南而行灬

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

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

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

打赏作者

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

抵扣说明:

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

余额充值