python控制机械臂6轴_在ROS环境下,怎么使用moveit!来驱动真实的六轴机械臂?
很多小伙伴在使用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!来驱动真实的六轴机械臂?相关推荐
- python小课离线版_断网环境下利用pip安装Python离线安装包
这几天搞Windows离线断网环境下安装Python包,配置环境,各种坑!做个记录,供以后查询吧. # 生产环境 windows 7 # python 2.7.9 # pip 1.5.2 友情提示:当 ...
- ROS环境下Baxter机器人控制记录
1.前记: 这篇博文为自己学习是的记录,做这一切的目的就是熟悉ROS环境下如何控制Baxter机器人做运动.以便将来对其控制的扩展,如基于视觉(单目,双目,或Kinect)交互的控制,基于leap m ...
- 【联合仿真】Adams六关节机械臂与Matlab/Simulink的联合仿真(上)
Adams六关节机械臂与Matlab/Simulink的联合仿真(上) 前言:一直对于六关节机械臂与simulink的联合仿真很感兴趣,但网上关于实际模型的机械臂联合仿真的资料很少,更别说六关节的联合 ...
- ros环境下配置orb-slam2遇到的问题
第一次写博客,记录一下ros配置orb-slam2的过程与问题,配置过程都是参考各路大神.环境是VMware,Ubuntu18.04,ROS Melodic. Ubuntu18.04配置ros环境参考 ...
- 六自由度机械臂的solidworks模型图及分享
之前曾经在一个机械臂制造商的网站上浏览过一款机械臂 603桌面级六自由度机械臂. 于是便想使用该款机械臂来学习ros. 于是我便使用了solidworks将这款机械臂按照一比一的比例画了出来,但是长度 ...
- WHEELTEC N100惯导模块在ROS环境下如何使用?
文章目录 0.引言 1.惯导模块介绍 2.惯导模块连接端口测试 3.配置惯导模块的ROS驱动功能包 4.惯导模块数据输出和可视化 0.引言 之前采用的惯导模块为ICM20948 IMU模块(模块精 ...
- 【神经网络】基于RBF神经网络的六关节机械臂无模型控制
前言:最近在搞神经网络,看到有用神经网络逼近未建模动态的,也有用神经网络来逼近整个模型的,后者即是无模型控制.无模型控制它不需要知道系统的名义模型,直接用神经网络来逼近整个系统,感觉这个方法还蛮厉害的 ...
- 【联合仿真】Adams六关节机械臂与Matlab/Simulink的联合仿真(下)
Adams六关节机械臂与Matlab/Simulink的联合仿真(下) 接上文,上文讲到了建立好变量与测量单元之间的关联了,下面完成matlab/simulink的对接接口以及模型搭建 第一步. ad ...
- ubuntu 20.04 ROS 环境下 使用 velodyne
ubuntu 20.04 ROS 环境下 使用 velodyne 系统环境配置 硬件连接 网口配置 运行驱动程序 通过rviz可视化点云 系统环境配置 安装ROS依赖 sudo apt install ...
最新文章
- 好程序员web前端分享HTML基础篇
- MPL,MIL和MCL
- ajax实现二级联动
- 空调吸气和排气_吸气剂和二传手被认为有害
- python学习实例(2)
- python in memory_使用 in_memory 工作空间的注意事项
- [ERR] 1227 - Access denied; you need (at least one of) the SUPER privilege
- HashSet、LinkedHashSet、TreeSet 简明解释
- [C#] 回眸 C# 的前世今生 - 见证 C# 6.0 的新语法特性
- mooc作业怎么上传附件_中国大学MOOC最新考试系统(老师视角)增加学生作弊成本...
- 【MATLAB】MATLAB基本运算
- 全世界应当普及的经典文章:另辟蹊径解读《心经》
- 给windows右键,添加快捷键
- 威宁八中高考成绩查询2021,威宁自治县第八中学隆重举行2021年高考誓师大会
- 选择适当的NFC标签类型
- linux内存不足导致tomcat宕机
- swagger使用流程梳理
- Python自动玩俄罗斯方块小游戏
- Schlumberger New Energy、CEA与合作伙伴宣布,欧洲委员会批准成立清洁氢气生产技术企业Genvia
- 嵌入式系统概念以及嵌入式基础知识