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获取物品的名称的函数

       Coppeliasim仿真日记(三): Coppeliasim与python的联动——The B0-based remote API_第1张图片

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

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

     Coppeliasim仿真日记(三): Coppeliasim与python的联动——The B0-based remote API_第2张图片

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

  • 使用新库能更好地使用多机器人并行仿真,之前有讲过,用旧库要想达到能同时控制多台机器人的效果,采用的是每个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端)的设置:

Coppeliasim仿真日记(三): Coppeliasim与python的联动——The B0-based remote API_第3张图片

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

Coppeliasim仿真日记(三): Coppeliasim与python的联动——The B0-based remote API_第4张图片

相关文件添加完后,就可以运行程序了,接下来说明在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模型拖动到场景上:

Coppeliasim仿真日记(三): Coppeliasim与python的联动——The B0-based remote API_第5张图片Coppeliasim仿真日记(三): Coppeliasim与python的联动——The B0-based remote API_第6张图片

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

Coppeliasim仿真日记(三): Coppeliasim与python的联动——The B0-based remote API_第7张图片

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

Coppeliasim仿真日记(三): Coppeliasim与python的联动——The B0-based remote API_第8张图片

代表连接成功!

最后

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

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

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

你可能感兴趣的:(Coppeliasim仿真日记,python,人工智能)