很多小伙伴在使用ROS的时候,都会产生类似的疑问,程序写过那么多,仿真也跑过不少,但是如何控制真实机械臂/机器人呢?

今天古月君就来尝试破个题。

首先,解决这个问题的关键词是“接口”。所谓接口,即数据传输的通道,如何将ROS功能包计算得到的数据发给真实机器人并使之运动是问题的关键。

机械臂有点复杂,我们先以简单一些的ROS小车为例,看看ROS是如何让真实小车动起来的。

大家在某宝上搜索“ROS移动机器人”,会出现一系列的小车,看来看去,无非都是类似下图的零部件组成的:

做个分类,大家应该会更清晰一些:

这就是从控制角度看到的机器人四大组成部分,ROS并不是机器人的全部,主要运行于控制系统当中。

以小车的导航为例,从复杂的算法到小车的运动具体经过了哪些步骤呢?

1.使用者在rviz中使用鼠标选择一个导航目标点

2.全局规划器开始路径规划,得到一条从A到B的最优路径

3.本地规划器开始计算机器人每个周期的最佳速度,尽量靠近最优路径并躲避动态障碍物

OK,划重点啦,此时以上还都是ROS功能包完成的工作,我们进一步简化以上步骤,所有功能看成黑盒,输入是目标位置,输出是周期速度,这个周期速度就是“接口”。

接下来我们要做的事情就是让小车的硬件匹配这个周期速度的接口,怎么匹配呢?

小车的运动最后由电机执行,电机要转起来就需要一个电压信号,要产生电压信号就需要将控制信号(PWM)放大,要产生控制信号就需要有一个微控制器(MCU),微控制器的输入指令哪里来,一条电缆(网线或串口线)连接PC和MCU,接口就连上了。

当然,接口连上只是“肉体连接”,要做到“精神连接”还需要完成控制器里的驱动控制,也就是我们常说的PID闭环控制。

至此,我们成功的让小车动起来了,总结一下,我们怎么让小车动起来的:

1.ROS功能包跑起来

2.控制数据传输给小车的控制器

3.控制器里完成底层控制

4.控制信号变成电信号,电机转起来

似乎有点偏题,我们回到机械臂的场景,原理依然是上边的四个步骤,根据不同的硬件条件,并不是每个步骤都需要我们自己来实现。

在ROS环境下,不管是移动小车的move_base,还是机械臂的MoveIt!,都是解决第一个步骤的功能算法问题。ROS最大的好处就是:我们可以先不关注功能算法的内部实现,通过接口的拼接快速实现系统的原型。所以这里我们需要关注的一个问题是MoveIt!的输入输出接口是什么?

在下边这张图中,我们可以看到MoveIt!核心节点的接口:

输入:编程API(C++、Python)、GUI(Rviz中的Motion Planning)

输出:关节轨迹(Trajectory)

先不纠结MoveIt!里边干了啥,反正当我们通过程序或者界面指定一个目标位置后,它会规划得到一条运动到目标位置的轨迹,这条轨迹由一系列关节空间的位置组成。

和ROS小车一样,接下来,我们要把这条轨迹发给机械臂的控制器,如果你使用的是类似UR、ABB这种工业机械臂的话,控制器都是配套的,只需要在示教器上做一些TCP端口的配置,就可以接收轨迹数据了,后续的底层控制算法和电机驱动就不需要我们关心了,完善的控制器都会帮我们实现。

换一个场景,如果是我们自己做机械臂,控制器需要自己开发,又该如何做呢?

还是上边ROS小车的思路,机械臂控制器里也需要实现这些基础功能:

1.接收控制数据(运动轨迹)

2.完成底层运动控制

3.控制信号变成电信号,电机转起来

不管你用的控制器是MCU、树莓派还是PC,总会有和外界通信的方法,比如常见的串口、网络等,所以第一个接收控制数据的方法就是通过任一媒介,将轨迹数据发送到控制器上,具体实现可以参考ros_serial、ROS-I Simple Message功能包或串口、 socket通信的编程方法。

收到数据之后呢?MoveIt!规划得到的关节轨迹由一系列轨迹点组成,每两个点之间的时间间隔不定,基本是0.1~1秒之间,这个时间间隔对于底层控制来讲,是非常大的,很容易造成轨迹运动不圆滑、速度不均匀的现象,需要进一步细分到和控制周期匹配的间隔,也就是你可能常听说的“轨迹插补”,具体实现可以参考ros_control。

比如初始轨迹的运动总时间是5s,按照10ms插补,那么我们将得到一条由500个点组成的轨迹,每个点包含此刻各关节的位置信息。

接下来就是把这些位置信息变成电信号,让电机转动带动机械臂运动,这就是我们常说的电机驱动。如果你用的是步进电机,你可能需要一个可以接收脉冲位置的步进驱动器,如果你用的是伺服电机,可能需要一个可以接收位置指令的伺服驱动器,如果你使用的是舵机,直接发送位置指令即可,如果你要自己做驱动器,请谷歌“如何实现电机驱动器”。

按照周期依次完成所有点后,轨迹运动完成,真实机械臂就按照MoveIt!的规划完成运动了。https://www.zhihu.com/video/1180610312959721472

古月君洋洋洒洒写了这么多,你可能已经从入门到放弃了。。。

好吧,忽略上边的所有内容,直接看图:

ROS MoveIt!控制真实机械臂的一般框架:

1.通过程序或界面设置机械臂运动目标

2.MoveIt!完成运动规划并输出关节轨迹

3.通过socket接口和控制器连接,将关节轨迹发送给控制器

4.控制器进行插补运算,并周期发送给电机驱动器

5.驱动器完成闭环控制,让电机多、快、好、爽的跟随输入指令

6.控制器反馈实时状态到MoveIt!,Rviz动态显示当前状态

以上内容古月君偏向于系统原理的介绍,具体实现的手段和硬件相关,各位还需要在原理的基础上完成开发。

更多参考欢迎继续阅读古月居的历史文章:功夫手:一款基于ROS的工业机器人​mp.weixin.qq.com公开课 | ROS机器人开发案例(附ppt)​mp.weixin.qq.com古月私房课 | ROS机械臂开发中的主角MoveIt!​mp.weixin.qq.com古月私房课 | 搭建仿真环境一样玩转ROS机械臂​mp.weixin.qq.com古月私房课 | 针对工业应用的ROS-I又是什么​mp.weixin.qq.com古月私房课 | 基于ROS设计一款机械臂控制系统​mp.weixin.qq.com

愿各位拥有一个段美好的机器人开发之旅。

python控制机械臂6轴_在ROS环境下,怎么使用moveit!来驱动真实的六轴机械臂?相关推荐

  1. python小课离线版_断网环境下利用pip安装Python离线安装包

    这几天搞Windows离线断网环境下安装Python包,配置环境,各种坑!做个记录,供以后查询吧. # 生产环境 windows 7 # python 2.7.9 # pip 1.5.2 友情提示:当 ...

  2. ROS环境下Baxter机器人控制记录

    1.前记: 这篇博文为自己学习是的记录,做这一切的目的就是熟悉ROS环境下如何控制Baxter机器人做运动.以便将来对其控制的扩展,如基于视觉(单目,双目,或Kinect)交互的控制,基于leap m ...

  3. 【联合仿真】Adams六关节机械臂与Matlab/Simulink的联合仿真(上)

    Adams六关节机械臂与Matlab/Simulink的联合仿真(上) 前言:一直对于六关节机械臂与simulink的联合仿真很感兴趣,但网上关于实际模型的机械臂联合仿真的资料很少,更别说六关节的联合 ...

  4. ros环境下配置orb-slam2遇到的问题

    第一次写博客,记录一下ros配置orb-slam2的过程与问题,配置过程都是参考各路大神.环境是VMware,Ubuntu18.04,ROS Melodic. Ubuntu18.04配置ros环境参考 ...

  5. 六自由度机械臂的solidworks模型图及分享

    之前曾经在一个机械臂制造商的网站上浏览过一款机械臂 603桌面级六自由度机械臂. 于是便想使用该款机械臂来学习ros. 于是我便使用了solidworks将这款机械臂按照一比一的比例画了出来,但是长度 ...

  6. WHEELTEC N100惯导模块在ROS环境下如何使用?

    文章目录 0.引言 1.惯导模块介绍 2.惯导模块连接端口测试 3.配置惯导模块的ROS驱动功能包 4.惯导模块数据输出和可视化 0.引言   之前采用的惯导模块为ICM20948 IMU模块(模块精 ...

  7. 【神经网络】基于RBF神经网络的六关节机械臂无模型控制

    前言:最近在搞神经网络,看到有用神经网络逼近未建模动态的,也有用神经网络来逼近整个模型的,后者即是无模型控制.无模型控制它不需要知道系统的名义模型,直接用神经网络来逼近整个系统,感觉这个方法还蛮厉害的 ...

  8. 【联合仿真】Adams六关节机械臂与Matlab/Simulink的联合仿真(下)

    Adams六关节机械臂与Matlab/Simulink的联合仿真(下) 接上文,上文讲到了建立好变量与测量单元之间的关联了,下面完成matlab/simulink的对接接口以及模型搭建 第一步. ad ...

  9. ubuntu 20.04 ROS 环境下 使用 velodyne

    ubuntu 20.04 ROS 环境下 使用 velodyne 系统环境配置 硬件连接 网口配置 运行驱动程序 通过rviz可视化点云 系统环境配置 安装ROS依赖 sudo apt install ...

最新文章

  1. 好程序员web前端分享HTML基础篇
  2. MPL,MIL和MCL
  3. ajax实现二级联动
  4. 空调吸气和排气_吸气剂和二传手被认为有害
  5. python学习实例(2)
  6. python in memory_使用 in_memory 工作空间的注意事项
  7. [ERR] 1227 - Access denied; you need (at least one of) the SUPER privilege
  8. HashSet、LinkedHashSet、TreeSet 简明解释
  9. [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性
  10. mooc作业怎么上传附件_中国大学MOOC最新考试系统(老师视角)增加学生作弊成本...
  11. 【MATLAB】MATLAB基本运算
  12. 全世界应当普及的经典文章:另辟蹊径解读《心经》
  13. 给windows右键,添加快捷键
  14. 威宁八中高考成绩查询2021,威宁自治县第八中学隆重举行2021年高考誓师大会
  15. 选择适当的NFC标签类型
  16. linux内存不足导致tomcat宕机
  17. swagger使用流程梳理
  18. Python自动玩俄罗斯方块小游戏
  19. Schlumberger New Energy、CEA与合作伙伴宣布,欧洲委员会批准成立清洁氢气生产技术企业Genvia
  20. 嵌入式系统概念以及嵌入式基础知识

热门文章

  1. 一个 print 函数,挺会玩啊?
  2. 平台如何限制ip流量_既抓流量又能变现,抖音“个人IP”如何打造?
  3. 商品分类目录数据结构分析
  4. 算法3-加减号得数方法数
  5. 【软件工程大作业】软件项目管理之人员管理
  6. xmind 使用方法
  7. 主流显卡生产厂商全面剖析--各种显卡品牌
  8. 如何去除PDF文档的编辑密码?
  9. 华为od机试真题 C++ 实现【篮球比赛】
  10. 无法超越的100米_百兆以太网传输距离_网线有哪几种?