如何在Gazebo中实现多机器人仿真-环球快播

2023-06-29 17:24:04 来源: 个人图书馆-netouch

gazebo是一款功能强大的三维物理仿真平台,具备强大的物理引擎、高质量的图形渲染、方便的编程与图形接口,最重要的是其开源免费的特性。gazebo中的机器人模型与rviz使用的模型相同,但是需要在模型中加入机器人和周围环境的物理属性,例如质量、摩擦系数、弹性系数等。机器人的传感器信息也可以通过插件的形式加入仿真环境,以可视化的方式进行显示。

在ros学习及研发过程中,经常需要使用gazebo来进行3D仿真,对模型的各种物理参数、控制代码等进行实物前的操练。在多智能体协同控制的研究中,需要在gazebo中添加多个机器人用于仿真,那么,应该如何将一个乃至多个机器人,放入gazebo仿真环境中呢?


(相关资料图)

1.单机器人仿真

在gazebo中放入机器人的操作通常用launch文件实现,步骤可归纳为:

其中有关于urdf模型的构建可以参考古月学院的课程《一起从零手写URDF模型》和前面小伙伴的帖子《URDF物理参数解释及生成》。

在我的仿真任务中代码如下:

2.多机器人仿真

相比于单机器人,多机器人仿真需要在原基础上加入

这里我使用的方法,是在机器人配置文件

与前面相对,在这里我们将发布和接收的cmd_vel全部设置为相对名称(相对名称的典型特征是它缺少全局名称带有的前斜杠“/”),在我们设置的命名空间内发布后,ROS将当前命名空间的名称加在相对名称的前面,从而将相对名解析为全局名称。

即做以下修改:

cmd_velvel_pub = rospy.Publisher("cmd_vel", Twist, queue_size=1)cmd_velvel_pub = rospy.Publisher("cmd_vel", Twist, queue_size=1)

在终端启动键盘控制节点时加上命名空间,即可实现对单个机器人的控制:

$ ROS_NAMESPACE=ares1rosrunares_teleopares_teleop.py$ ROS_NAMESPACE=ares1rosrunares_teleopares_teleop.py

图8 单独控制时的rqt_graph

图9、10 单独控制时的效果

在命名空间下,还有经常使用的重映射操作,这里就不在赘述,感兴趣的小伙伴可以参考古月君的文章《ROS探索总结(五十六)—— launch文件》。

在gazebo中加载多机器人仅仅是多智能体协同控制研究的第一步,之后还有大量的研究要做,我写的也只是个人总结 ,一定有很多不足之处,欢迎大家一起留言讨论。引用古月君的话作为总结,“怕什么真理无穷,进一寸有一寸的欢喜”,共勉!

完整代码:

相关新闻