为什么在gazebo中ros2_control会和其他插件冲突

大家好,我是最近爱吃牛肉面的小鱼。今天我想分享一个来自社区的问题,关于 Gazebo 复合机器人仿真插件不能同时使用的困扰。这个问题我曾在多年前遇到过,并在社区中找到了一些解决方案,现在就来分享给大家。

背景:

在 Gazebo 中对复合机器人(移动底盘加机械臂)进行仿真,即需要能够用键盘控制底盘的移动,并且用 MoveIt 控制机械臂。系统环境:Ubuntu 16.04;ROS Kinetic;Gazebo 7.16

问题描述:

在 AGV 底盘的 xacro 文件中,配置了两轮差速的插件 <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so">;在机械臂的 xacro 文件中,配置了机械臂控制的插件 <plugin name="gazebo_ros_controller" filename="libgazebo_ros_control.so">

当启动 Gazebo 仿真环境后,通过 rostopic list 查看话题,发现确实有 /cmd_vel 话题存在。于是尝试使用 teleop_twist_keyboard 控制底盘运动,但是却没有任何反应,而此时却可以通过 MoveIt 控制机械臂。将机械臂的插件注释掉后,底盘可以正常控制移动,由此推测是两个插件发生了冲突。

上网查阅后发现,有人在知乎上提到了相同的问题(链接:https://zhuanlan.zhihu.com/p/402596766),其中提到了插件冲突可能导致的问题。但是对于是否将两个插件放在同一 URDF 文件中的问题,作者并未明确说明。我将底盘和机械臂各自写为一个 xacro 文件,最后通过一个总的 xacro 文件来汇总两个部分。如果这种方式仍然会导致冲突,那么两个插件应该如何配置呢?

感谢阅读!如果有任何思路,请不吝赐教。


@1103445927 这个问题是我三四年前遇到的,具体解决方法我已经记不太清了。但是现在我能给你的建议是,可以考虑放弃两轮差速插件,然后在 ROS Control 中寻找适用于两轮差速控制的控制器(虽然不一定能找到,但这个思路应该是正确的)。祝好!

再更新下这个答案,为什么 ROS 2 Control 会和 Gazebo 其他插件发生冲突呢?

Gazebo 其实是一个仿真软件,他可以提供对其中关节的控制接口。但这些控制接口是独占的,也就是说,同一时间只能接收一个控制指令,否则就不知道该听谁的。ROS 2 Control 会尝试接管所有可控关节,并将其抽象为 ROS 2 Control 接口,然后由其下的控制器来使用。因此,解决这个问题最好的方法是统一使用 ROS 2 Control,利用 ROS 2 Control 下的关节轨迹跟踪控制器来控制机械臂的关节,用两轮差速控制器来控制底盘轮子的接口即可。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值