小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
复合机器人(移动底盘加机械臂)在Gazebo中的控制plugin配置问题
-
背景:
在Gazebo 中对复合机器人(移动底盘加机械臂)进行仿真,即:需要能够用键盘控制底盘的移动,并且用moveit控制机械臂。
系统:ubuntu16.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控制机械臂的;把机械臂的plugin注释掉,此时便可以控制底盘运动了。推测是两个plugin 发生了冲突。
上网查阅,发现鱼香ROS在知乎上提到过相同的问题(https://zhuanlan.zhihu.com/p/402596766 “还有就是插件冲突这种,不过大家应该很少遇到,遇到了就很难受了。比如:两轮差速插件和机械臂的轨迹执行插件不要放在都放在urdf中加载,会冲突导致轮子失效。不要问小鱼怎么知道的”)
请问这篇知乎帖子的意思是两个插件不要放在同一urdf文件中吗?我是将底盘和机械臂各自写为一个xacro文件,最后通过一个总的xacro来汇总两个部分。这样都会冲突的话,那两个插件应该如何配置呢?
(感谢看完!若有思路还请不吝赐教) -
@1103445927 这个问题是我三四年前碰到的了,当时具体怎么解决的我也记不得了。现在大概能给你的思路是,放弃两轮差速插件,然后在ros_control中找两轮差速控制器使用(不一定找得到,但思路应该是正确的)。祝好!
再更新下这个答案,为什么ros2_control会和Gazebo其他插件冲突呢?
gazebo其实就是一个仿真软件,他可以对外提供提供对其中关节的控制接口,但是控制接口是独占的,也就是说,同一时间不能被输入多个控制指令,不然就不知道听谁的,ros2_control 会尝试接管所有的可控关节,并将其抽象为ros2_control接口,再由其下的控制器来使用,所以解决这个问题最好的办法就是同一使用ros2_control,使用 ros2_control 下关节轨迹跟踪控制器来占用机械臂的关节,用两轮差速控制器来占用轮子接口即可。
-
@1103445927 你好,最后这个问题在ros中解决了吗,我也是无法同时操控车底盘和机械臂,困扰好久了;如何解决了可以提供以下解决思路吗,不胜感激。