上篇: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 ++,Java,Python,Matlab和Lua。
旧版远程API(或简称为远程API):这表示远程API的第一个版本。 与基于B0的远程API相比,它相对较轻并且具有更少的依赖性。 但是,它不那么直观,也不灵活,并且很难扩展。 它支持以下语言:C / C ++,Java,Python,Matlab,Octave和Lua。
这里说明一下为什么要用新版的API:
- 之前我们查阅官方的API手册时,会发现有些函数在调用旧版的sim库上时没有,例如:根据物品handle获取物品的名称的函数
有时候我们想得到读取接近传感器函数返回检测到的handle是对应哪个物品名称,用旧库的函数就无法进行这种操作。
- 新库有些函数能比旧库返回更多的参数,例如:
读取接近传感器的函数,新库函数会返回接近传感器检测到的物品的距离,而旧库函数不会返回这些值。
- 使用新库能更好地使用多机器人并行仿真,之前有讲过,用旧库要想达到能同时控制多台机器人的效果,采用的是每个py脚本控制每台机器人的方法。但使用新库,就能直接实现同时控制多台机器人的操作。
接下来,将说明新库,即基于B0的远程API,是如何使用的。
具体操作:
仿真环境的配置
查阅官方手册,我们可以得知:
服务端(一般是CoppeliaSim软件)的设置:
- 启动附加脚本simAddOnScript-b0RemoteApiServer.lua:您可以在菜单栏[附加组件-> b0RemoteApiServer]中手动启动它,也可以在CoppeliaSim启动时自动启动它(在这种情况下,将附加组件重命名为 simAddOnScript_b0RemoteApiServer.lua)。 附加脚本为所有场景提供了基于B0的远程API功能,而不会中断。
- 将模型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的教程真的少之又少,最后是通过看用户手册慢慢试出来的,所以说多多看官网的用户手册能解决不少问题。
后面会讲如何多计算机进行联合仿真。