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

  • 内容
  • 评论
  • 相关

~欢迎关注~

微信公众号:古月居

新浪微博:古月春旭

知乎专栏:古月居

原文链接:古月私房课 | 搭建仿真环境一样玩转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)

新浪微博:古月春旭

知乎专栏:古月居

微信 OR 支付宝 扫描二维码
为本文作者 打个赏
pay_weixinpay_weixin

评论

31条评论
  1. Gravatar 头像

    gan 回复

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

      • Gravatar 头像

        gan 回复

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

  2. Gravatar 头像

    邹俊宇 回复

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

    • Gravatar 头像

      邹俊宇 回复

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

  3. Gravatar 头像

    litt 回复

    胡老师,根据您的本课程,建立了自己的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 应该是控制器的参数没配置好,检查下命名是否和你用的机械臂都是对应的

      • Gravatar 头像

        胖子 回复

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

    • Gravatar 头像

      周仙明 回复

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

    • Gravatar 头像

      linda 回复

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

    • Gravatar 头像

      胖子 回复

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

  4. Gravatar 头像

    lvhonghao 回复

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

  5. Gravatar 头像

    尼坤 回复

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

  6. Gravatar 头像

    zzz 回复

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

    • 古月

      古月 回复

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

  7. Gravatar 头像

    小白 回复

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

    • 古月

      古月 回复

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

      • Gravatar 头像

        小白 回复

        @古月 好的谢谢古月老师。

      • Gravatar 头像

        小白 回复

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

  8. Gravatar 头像

    lvhonghao 回复

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

    • 古月

      古月 回复

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

  9. Gravatar 头像

    小弓长 回复

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

    • 古月

      古月 回复

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

  10. Gravatar 头像

    lvhonghao 回复

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

    • 古月

      古月 回复

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据