Moveit--控制真实机械臂

Moveit工作流程

  1. Moveit进行避障规划运动时,首先利用RRT算法规划出一个空间轨迹(此时只有位置信息,即关节的角度),
  2. 然后采用规划器的TOPP算法给这条路附加上速度,时间等信息,(即进行了关节的插补)

 

 

主体流程:在moveit中得到运动轨迹,再利用插补算法计算出路径上个点对应的各州的 角度,然后发给伺服驱动,完成运动,

Moveit的规划轨迹是关节空间,即对应于各轴的位置、速度、加速度,ROS自带的插补算法在ros_controller 功能包中,有源码参考,

古月老师的做法是:将moveit规划的多关节空间的轨迹点,然后发到机器人的控制器端,控制器端为满足EtherCAT实时性和稳定性,没有用ROS,控制器端根据相邻的轨迹点(各轴角度)用五次曲线做插值,然后周期性通过EtherCAT控制伺服输出。

 

https://blog.csdn.net/lingchen2348/article/details/80261161

使用moveit!控制真实机械臂(3)——修改moveit配置文件来控制真实机械臂(9月27日更新):https://blog.csdn.net/lingchen2348/article/details/80300069

详细解析了如何从虚拟的机器人修改相应文件以满足真实机器人的控制需求,适用于所有的机器人

moveit采用action的方式来控制机械臂,本文相当于action的客户端,

在下一篇文章(4)(5)中写了action服务端的实现,只有两边全实现了,才能真正控制机械臂,而服务端的action实现过程通用性要差的多

 

使用moveit!控制真实机械臂(4)——了解moveit!所使用的action

https://blog.csdn.net/lingchen2348/article/details/80260973

1.action的基础内容可以先看一下ros 官网和古月的博客,可以这样简单理解:action打包了同一行为下的多个消息,使用action可以将你从繁琐的消息订阅与发布编程中解放出来,并且使节点间的信息交互能力大大提升,

moveit扮演的角色是客户端(即发送运动参数的,),服务端(接受运动参数的)才是我们需要编写的部分,不要搞反了。

 

它的内部有一个重要成员 trajectory,当你使用moveit规划了一个机械臂运动路径时,它记录了机械臂运动的各个轨迹点,每个轨迹点以机械臂关节角的形式表述,这个数据也是我们最终控制机械臂所想要的最终数据,

 

使用moveit!控制真实机械臂(5)——编写真实机械臂节点中的action服务程序https://blog.csdn.net/lingchen2348/article/details/80379166

1.预备条件:
1)、机械臂底层驱动已经完成。 
无论你的机械臂是从大牌公司买来的还是自己造的,请预先完成好底层驱动控制部分,这里假设你的驱动控制程序不包括ROS相关代码,没有消息、没有action等等这些ROS才有的东西,仅仅是用C++语言控制机械臂的基本运动(比如运动到指定关节角、机械臂末端运动到指定位置和姿态)。这很重要,因为我们的目标是使用moveit控制真实机械臂,如果底层驱动还有问题,那后续内容就无从谈起了

2、机械臂能够按照路点(轨迹)运动。

 

具体改造过程:

1、用ROS封装你的驱动程序。

 

(4)初始化这个服务端对象 
先来看看官网是怎么初始化action服务端对象的,

官网中,action的实现是在一个类里,as_作为这个类的一个成员变量,as_的初始化写在了该类构造函数的初始化列表里(即构造函数冒号后面的内容),这一点很关键,因为服务端对象as_的初始化要先于包含它的类,因此,as_的初始化写错位置是要报错的

你可能感兴趣的:(ROS,moveit)