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

本文介绍了如何使用Python连接Coppeliasim进行多机器人仿真。首先,讲解了ThelegacyremoteAPI的基本用法,包括在Python脚本中引入必要的库和设置端口连接。接着,针对多机器人仿真问题,提出了通过不同端口实现每台机器人独立控制的方法,并给出了启动控制脚本的示例。最后,建议在多机器人仿真时使用ROS接口以获得更好的协同效果。
Python3.9

Python3.9

Conda
Python

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

上篇:Coppeliasim仿真日记(一): 简介、下载和API的查询

本文主要讲python与Coppeliasim的连接,实现入门的第一步。

关于The legacy remote API

查阅官方的用户手册可知,它是remote API的第一个版本,相比于新版,有很多不足,但是对于刚用这款软件的人来说,还是比较容易上手的,所以先讲该API在python上的使用。


具体步骤:

查看官方的用户手册,我们可以得知:

也就是说,要在仿真软件的安装目录上找到这几个文件加到自己的python文件目录上。这里是Python端连接coppeliasim的相关代码:

import sim # sim文件在仿真软件安装目录上,要将其移到python脚本的主目录中
sim.simFiniish(-1) # 关掉上一个进程
clientId = sim.simxStart("127.0.0.1", 19991, True, True, 5000, 5)  # 建立和服务器的连接
if clientId != -1:  # 连接成功
    print('Scene connect successfully')
    break

然后在机器人的coppeliasim下的脚本文件添加相应端口连接代码,如下图所示

注意端口号(这里是19991)要一致,否则连不上。


如何进行多机器人仿真:

作者我是做群体机器人相关的工作,所以会用到多机器人的仿真,但在网上相关的教程很难找到,为此把我知道的分享给大家。

最初我们进行多机器人并行控制仿真时,采用多线程或多进程方法时,但是仿真效果不理想。

具体表现为:多机不能实现协同控制,传感器读取容易出错。

因此,我们采用类似实机的方法:主要通过建立每台机器人的端口连接,具体如下图所示。

首先在每台机器人加入以下Python控制代码:

clientId = sim.simxStart("127.0.0.1", 19991, True, True, 5000, 5)  # 每台机器人端口号要不一样

每台机器人的端口号不一样,范围是19901-19999。

然后在每台机器人的coppeliasim下的脚本文件添加相应端口连接代码,本文前面所示。

最后编写一个最上层的python文件,用来启动控制每台机器人的python文件:

import os
import threading
import sim
def uav_start(Index):
    os.system('python uav_' + str(Index) + '.py')
if __name__ == '__main__':
    while True:
        clientId = sim.simxStart("127.0.0.1", 19997, True, True, 5000, 5)  # 建立和服务器的连接
        if clientId != -1:  # 连接成功
            print('Scene connect successfully')
            break
    for i in range(1, 6):  # 5架无人机
        uav = threading.Thread(target=uav_start, args=(i,))
        uav.setDaemon(True)
        uav.start()

注意,该段代码中的无人机的py文件要自己编写,内容包含python与coppeliasim的连接以及机器人的控制程序,这里我只提供一种多机器人仿真的思路。

最后

这个系列是我很久之前用coppeliasim做群体仿真时做的一些笔记,当时还不会ROS,这边建议要用coppeliasim进行多机器人仿真的话还是用ROS接口。而且做单个机器人或者数量不是很多的机器人的话还是参考我后面的The B0-based remote API的使用。

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

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

Python3.9

Python3.9

Conda
Python

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

### 使用Python进行CoppeliaSim仿真的方法 对于希望利用PythonCoppeliaSim中开展仿真工作的用户来说,存在两种主要的方法来实现这一目标:通过Legacy Remote APIThe B0-based Remote API。 当涉及到较为简单的场景或是单个机器人的控制时,可以采用The Legacy Remote API。此API允许开发者直接调用函数以操作模拟环境中的对象并获取传感器数据[^1]。下面是一个简单例子展示如何连接到 CoppeliaSim 并移动一个名为 "Pioneer_p3dx_leftMotor" 的电机: ```python import vrep # 导入V-REP的Python绑定库 vrep.simxFinish(-1) # 关闭所有打开的连接 clientID = vrep.simxStart('127.0.0.1', 19997, True, True, 5000, 5) if clientID != -1: print("Connected to remote API server") errorCode, left_motor_handle = vrep.simxGetObjectHandle(clientID, 'Pioneer_p3dx_leftMotor', vrep.simx_opmode_oneshot_wait) if errorCode == vrep.simx_return_ok: error_code = vrep.simxSetJointTargetVelocity(clientID, left_motor_handle, 1, vrep.simx_opmode_streaming) else: print("Failed connecting to remote API server") ``` 然而,在处理更复杂的项目如多机器人协调任务时,则推荐使用基于B0通信协议的新版Remote API (The B0-based Remote API)。这种方式不仅提供了更好的性能表现,同时也简化了许多高级功能的应用过程。例如,它支持异步消息传递机制,使得程序能够更加高效地运行;另外也更容易其他软件工具集成在一起工作。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

向南而行灬

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

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

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

打赏作者

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

抵扣说明:

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

余额充值