ROS探索总结(六十四)—— 古月私房课 | 搭建仿真环境一样玩转ROS机械臂

8383
38
2019年4月1日 11时36分

~欢迎关注~

微信公众号:古月居

新浪微博:古月春旭

知乎专栏:古月居

原文链接:古月私房课 | 搭建仿真环境一样玩转ROS机械臂

 

大家好,这里是《ROS机械臂开发:从入门到实战》的第五讲——搭建仿真环境一样玩转ROS机械臂,我是主讲人胡春旭。

幻灯片1

本讲我们将从以下三个部分进行讲解。

幻灯片2

首先是ROS中针对控制器功能的ros_control。

幻灯片3

在应用层面,ROS中有Navigation、SLAM、MoveIt!等众多功能,但这些功能输出的速度、轨迹到底该如何与真实机器人结合,这是很多ROS开发者的疑惑,ros_control就是为实现这里的控制中间件而诞生的。

幻灯片4

ros_control提供了一系列针对控制器的功能,由Controller Manager管理众多控制器,控制器内的主要功能是基于PID的闭环控制。为满足不同硬件的扩展,ros_control还设计了一个硬件抽象层,将软件算法和硬件接口剥离。

幻灯片5

ros_control提供了常用的控制器,如位置控制、速度控制、力控制,还有一个虽然没有控制功能,但依然称为controller的关节状态控制器,完成机器人关节状态的周期反馈。

幻灯片6

将模型放入Gazebo仿真之前,还需要确认或添加以下模块。

幻灯片7

首先检查模型中的每个link是否都添加了惯性参数和碰撞属性。

幻灯片8

然后为每个运动的joint配置传动装置,传动装置可以理解为是电机+减速机,这里我们为机械臂的六个关节配置了位置控制接口的传动装置。

幻灯片9

为了将模型的传动装置转起来,还需要添加gazebo中的控制器插件,具体参数通过后续的讲解添加。

幻灯片10

确认以上内容后,就可以把模型放置到仿真环境中了,使用如下launch文件加载模型到Gazebo中。

幻灯片11

运行仿真环境后,可以看到机械臂已经成功加载到Gazebo中,但此时的机械臂还无法运动。

幻灯片12

第三个部分,我们就来介绍如何让机械臂动起来。

幻灯片13

在动之前,我们应该了解MoveIt!控制机械臂的整体架构,大家可以参考下图,这也是我们系列课程最重要的一页PPT,理解了这张图才能更好的将MoveIt!应用于真实机器人/仿真的开发。

幻灯片14

MoveIt!+Gazebo仿真架构与上图一致,重点是完成控制接口两端的Follow Joint Trajectory、Joint Trajectory Controller、Joint State Controller配置。

幻灯片15

先来配置Gazebo端的Joint Trajectory Controller,这是action通信的server端,其中的关节名称必须要与机器人模型中的joint名称一致,并通过launch文件加载配置参数并启动控制器。

幻灯片16

然后是Joint State Controller的配置,以50Hz的频率发布机器人的关节状态。

幻灯片17

最后是MoveIt!端的Follow Joint Trajectory,作为action通信的client端,将Moveit!规划好的轨迹发给Gazebo。

幻灯片18

以上配置的各种controller,通过如下launch文件一次启动。

幻灯片19

配置完成后,就可以使用如下命令启动仿真系统了,会同时打开Gazebo和MoveIt!界面。

幻灯片20

通过MoveIt!控制机械臂运动规划,Gazebo中的机械臂也将同步运动。

幻灯片21

我们还可以通过话题消息看到MoveIt!规划得到的轨迹数据,轨迹点使用关节空间下的速度、位置、加速度进行描述。

幻灯片22

以上就是本讲的内容概要,详细讲解过程和操作视频请见具体课程。

幻灯片24

更多精彩,欢迎大家关注“古月居”。

幻灯片27

 

更多内容欢迎关注:

微信公众号:古月居 (guyue_home)

新浪微博:古月春旭

知乎专栏:古月居

发表评论

后才能评论

评论列表(38条)

  • 2020年4月26日 下午3:52

    老师您好,我照着你的文件修改了一下,在运行bringup.launch时出现了以下问题:
    roslaunch lr7_gazebo lr7_bringup_moveit.launch
    … logging to /home/lps/.ros/log/0a292bda-878f-11ea-bc7a-000c29d2ea71/roslaunch-lps-vm-7208.log
    Checking log directory for disk usage. This may take a while.
    Press Ctrl-C to interrupt
    Done checking log file disk usage. Usage is <1GB.

    xacro: in-order processing became default in ROS Melodic. You can drop the option.
    Resource not found: lr7
    ROS path [0]=/opt/ros/melodic/share/ros
    ROS path [1]=/home/lps/catkin_ws/src
    ROS path [2]=/opt/ros/melodic/share
    The traceback for the exception was written to the log file
    请问是怎么回事啊?

  • kuai 2019年8月24日 下午5:31

    老师您好!我在moveit assistant里配置完成后,在工作空间下进行编译,但是却有以下错误,请问该怎么解决啊?!谢谢!!!
    CMake Error at /home/kuai/catkin_ws/devel/share/moveit_ros_perception/cmake/moveit_ros_perceptionConfig.cmake:113 (message):
    Project ‘moveit_ros_perception’ specifies
    ‘/home/kuai/catkin_ws/src/moveit/moveit_ros/perception/lazy_free_space_updater/include’
    as an include dir, which is not found. It does neither exist as an
    absolute directory nor in
    ‘/home/kuai/catkin_ws/src/moveit/moveit_ros/perception//home/kuai/catkin_ws/src/moveit/moveit_ros/perception/lazy_free_space_updater/include’.
    Check the issue tracker ‘https://github.com/ros-planning/moveit/issues’ and
    consider creating a ticket if the problem has not been reported yet.
    Call Stack (most recent call first):
    /opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:76 (find_package)
    marm_planning/CMakeLists.txt:10 (find_package)

    — Configuring incomplete, errors occurred!
    See also “/home/kuai/catkin_ws/build/CMakeFiles/CMakeOutput.log”.
    See also “/home/kuai/catkin_ws/build/CMakeFiles/CMakeError.log”.
    Invoking “cmake” failed

  • gan 2019年8月5日 下午4:30

    古月老师,你好!我建立带底座机械臂时,放到gazebo中会出现跳动很明显现象,这是什么原因呢?可以采用什么方法解决了呢?

    • 古月 回复 gan 2019年8月6日 下午3:31

      可以试试修改物理参数

    • gan 回复 古月 2019年8月12日 下午5:31

      是的,可以解决了,谢谢古月老师

  • 邹俊宇 2019年5月21日 下午7:08

    古月老师你好,我最近在做移动机械臂,遇到了这样的问题:
    我在rviz里添加物体,然后物体的参考坐标系选择的是base_link,但是这样会出现物体跟着机器人移动的情况,因为base_link在机器人身上,所以物体的参考坐标系应该时选择一个固定的坐标系,那请问怎样在机器人的URDF文件里设置这个固定坐标系呢?

    • 邹俊宇 回复 邹俊宇 2019年5月21日 下午8:39

      我将物体的参考系设为了odom,固定的,但是物体还是跟着机器人一起移动

    • 古月 回复 邹俊宇 2019年5月23日 下午5:08

      参考移动机器人,可以设置一个odom坐标系

  • litt 2019年4月25日 下午5:05

    胡老师,根据您的本课程,建立了自己的moveit控制gazebo的ros包,在执行的时候,moveit中规划完成后,gazebo中的机器人并不运动,同时报错:Unable to identify any set of controllers that can actuate the specified joints: [ joint1 joint2 joint3 joint4 joint5 joint6 ]
    [ERROR] [1556182073.925398270, 37.859000000]: Known controllers and their joints:

    [ERROR] [1556182073.926160981, 37.859000000]: Apparently trajectory initialization failed
    ,我在网上查资料看不少人遇到了这个问题,但是都没有人回答。谢谢!

    • 古月 回复 litt 2019年4月25日 下午7:48

      应该是控制器的参数没配置好,检查下命名是否和你用的机械臂都是对应的

    • 胖子 回复 古月 2019年8月21日 上午4:12

      胡老师,我的代码用的是课上源码,为什么也出现这个问题呢?

    • 周仙明 回复 litt 2019年5月9日 上午11:21

      请问你解决了吗,我也遇到该问题,求指教

    • linda 回复 litt 2019年8月1日 下午6:17

      您好,请问你现在解决了吗?我也是怎么都没法在gazebo中移动模型。

    • 胖子 回复 litt 2019年8月21日 上午4:09

      请问您解决了吗?我用的是课上源码跑的,也出现了这个问题。可以留个联系方式吗

    • zzz 回复 litt 2019年10月5日 下午4:52

      你好 请问你解决了吗 我也遇到这个问题了 搞了好久没有搞好 能加我QQ吗1411893097

    • 古德里安的装甲师 回复 zzz 2020年3月30日 下午9:18

      我也遇到这个问题了,你们解决了吗

  • lvhonghao 2019年4月25日 上午11:10

    古月老师,gazebo仿真机械臂抓取可乐瓶,可是在仿真环境中抓不起来,左右可以推动,上下提不起来,查阅相关代码已经修改过物品的表面粗糙度及相关摩擦学参数,请问这是什么原因?应该怎么解决呢?望指点

  • 尼坤 2019年4月11日 下午3:23

    胡老师您好,我按照您的例程配置moveit控制gazebo运动,但是rviz中的moveit中轨迹规划没问题,gazebo中静止不动,是为什么呢?

    • 尼坤 回复 尼坤 2019年4月11日 下午3:25

      我用的是kinetic版本的

    • 王 回复 尼坤 2019年10月25日 下午3:56

      请问你解决了马

    • 古月 回复 尼坤 2019年4月15日 下午6:12

      应该是controller没配置好

  • zzz 2019年4月7日 下午11:05

    老师您好,我用moveit打开一个机械臂之后,末端标记点marker一直在闪烁,无法选中并拖拽,请问该怎么解决呢?谢谢古月老师!

    • 古月 回复 zzz 2019年4月8日 下午8:49

      这个不太清楚,看下机械臂的关节状态、tf是不是稳定的

  • 小白 2019年4月4日 下午3:10

    古月老师您好,我按照你这里的流程配置,但机械臂各个关节在gazebo里都是掉下来的,若去掉pid参数,则可正常显示,但会提示无法找到pid的参数。根据错误提示信息在Kinect版本内PositionJointInterface存在bug,需要改用vel或者effort,但我修改后,问题还是存在。github上的问题讨论https://github.com/ros-simulation/gazebo_ros_pkgs/issues/612。

    • 古月 回复 小白 2019年4月4日 下午10:27

      PositionJointInterface不需要配置PID参数,可以忽略运行中的错误信息,不影响使用

    • 小白 回复 古月 2019年4月7日 下午2:15

      好的谢谢古月老师。

    • 小白 回复 古月 2019年4月8日 下午3:19

      古月老师,忽略PID错误后,可以实现rviz规划的运动输出到gazebo了,但即使结果输出成功,但每次都会弹出下列错误,rviz中提示信息也是fail,错误内容如下:
      Controller handle hand_controller reports status ABORTED
      Controller hand_controller failed with error code GOAL_TOLERANCE_VIOLATED

    • 小白 回复 古月 2019年4月10日 下午4:08

      感谢问题解决,参考你给链接里的https://github.com/tu-darmstadt-ros-pkg/hector_tracker_gazebo/blob/master/hector_tracker_gazebo_ros_control/config/default_controllers.yaml#L42的参数

    • Murphy 回复 小白 2019年10月31日 下午5:30

      你好具体是什么原因造成的呢 我也碰着了这个问题 卡住了 谢谢了QAQ

    • Christianus 回复 小白 2020年4月17日 下午4:17

      你好,请问这个问题你是怎么解决的呢,我现在也卡住了

  • lvhonghao 2019年4月3日 下午12:47

    古月老师您好,再问您一下,我现在用moveit的python接口控制一个双臂机器人,但是将左右两个工作组分别写两个线程并不能实现同时规划,这是什么原因呢,请问是必须把两个工作组合并成一个工作组吗?

    • 古月 回复 lvhonghao 2019年4月4日 下午10:20

      不需要的,参考PR2、Baxter或者ROS社区里其他的双臂机器人,应该有类似的demo

  • 小弓长 2019年4月2日 下午2:49

    月哥哥,我想问下,机械臂的路径规划点,怎么去变成轨迹点,加上时间戳,速度和加速度,我知道moveIT里面有那个算法,那个文章我也看不懂,不知道您还有什么其他的办法吗?

    • 古月 回复 小弓长 2019年4月4日 下午10:14

      moveit调用ompl完成轨迹点的规划,iptp算法完速度、加速度、时间的规划,具体也只能看相关的文章或者博客

  • lvhonghao 2019年4月1日 下午8:37

    古月老师您好,请问一下,利用python接口控制机械臂的过程中,能否限制某一关节不参与规划,即转角为0呀或者保持不变

    • 古月 回复 lvhonghao 2019年4月4日 下午10:11

      在moveit setup assistant配置里,可以设置不参与规划的关节,如果是动态配置的话不太清楚,看下约束条件里有没有这一项吧