关于ROS中Moveit中运动规划的总结资料和相关问题

1、如果要在Moveit中配置自己的运动规划库,则需要自己用源码安装Moveit和OMPL ,然后参照这个大神的资料按照步骤进行操作。
或者说下载moveit代码都可以找到源码的,多项式插值之类的算法也都可以找到。要集成自己算法的话,可以参考moveit中已有的算法,也可以通过插件的形式集成,后期进行相应的尝试。
2、运动规划的公开课可以参照 夕法尼亚大学Coursera运动规划公开课。
3、机械臂运动规划算法性质的学习的话,需要看源码,理解move_group.plan()后moveit如何与ompl进行的交互,然后ompl如何完成的算法并将结果返回给moveit的。
4、Moveit 中产生的trajectory Data 只能在程序内部看到,并不能通过话题、消息来看到,其是通过 follow_joint_trajectory 进行封装之后,才可以通过相应的话题进行查看。
5、ros controller 是采用五次多项式对机械臂的轨迹点进行插补的。Moveit中的得到的规划路径消息是根据轨迹用TOPP计算出速度加速度,也就是说如果现在有一条轨迹的position,也是可以用TOPP算出这条轨迹的速度和加速度值,然后自己同话题发布出去。
6、Ros 中的action的服务端是机械臂的底层驱动和ROS封装的一个桥梁,action服务端接收到 moveit 客户端的轨迹规划数据点,然后将该数据处理之后发送给实际的机械臂进行控制,所以action的服务端一般写在机械臂的ros封装程序中,很靠近底层控制程序。
7、通过编写Action 的服务端利用Moveit去控制实际的机械臂,要实现rviz中的机械臂和真实环境中的机械臂进行同步运动,也是需要真实的机械臂发布/joint_states 话题的,然后/robot_state 订阅相应的消息后,转换成正确的TF变换之后,就可以实现同步了。

相关的问题:
1、有的时候我们运行launch文件的时候,会发现在rviz中可以加载,但是在gazebo中却不能正常加载,可能会提示关节的名字在模型中没有。这种问题可能是模型中没有这个关节,但是在gazebo的属性中设置了这个关节,而rviz只是一个显示作用。
2、问题:用moveit的时候,从话题中/execute_trajectory/goal能得到规划的路径点,然后下发给实际的机械臂进行运动,但是这个时候仿真的机械臂已经运动到了目标点了,因为要得到/execute_trajectory/goal这个消息,就一定要在moveit里面执行execute.,因此导致实际的机械臂和rviz中的机械臂运行的不同步。
解决方法:因为这个话题只是action的底层实现,我们写程序的时候是不能直接用这个话题的,而是要用follow trajectory 那个action,机械臂接收规划的路径,开始运动,不断反馈状态,到达目标点结束,这样就是一个同步的状态。
3、问题:真实的机械臂是在matlab中控制的,控制器的频率是1ms,路径点的消息是通过tcp来接受的。那么是不是需要在matlab中接受到每两个路径点之间都要做一次插补,这样会不会造成两者的一个不同步呢?
解决方法:每两个路径点之间都要做插补的,插补周期就是1ms。是否同步还要看反馈的状态是不是实时的。
4、问题:之前用action 写了一个程序,往FollowJointTrajectoryGoal 填充了四个点,程序能运行,rviz和gazebo也能同步运行。不过发现在查看follow_joint_trajectory/goal这个话题的时候,只能得到我设置的四个点,得不到其插补得到的轨迹点。而在moveit的界面中直接用plan和execute,查看话题follow_joint_trajectory/goal 可以得到十多个路径点。这两者控制机械臂运动存在着什么区别?
解决方法:follow_joint_trajectory/goal里边是路点信息,不是插补出来的轨迹点。moveit规划出来的虽然多一点,但也只是更加详细的轨迹点。插补是在gazebo端的controller上做的,通过话题是看不到的,除非修改源码,加入打印信息。如果是下发给实际的机械臂,那么也是需要对接受到的数据进行相应的精插补。
也就是说插补和控制器的一些原理还是要去看ros controller的源码。其实可以这样来理解,在运行launch文件,rviz中的机械臂的运动其实是跟随gazebo中的机械臂运动的,因为最终的插补是由gazebo中的控制器来实现的。
其实之前一直以为是gazebo中机械臂跟随rviz中的机械臂来运动的。如果不用gazebo,单独用moveit来做运动规划,比如运行demo.launch文件,点击execute,实现机械臂的运动,是因为fake controller来实现插补和控制机械臂的运动。gazebo是仿真器,里边相当于是一个真实机器人,rviz只是显示作用(rviz中的模型是根据反馈的joints_state实时显示的,只要对这个话题进行相应的更新就可以了),只是把相应的很多功能作为插件的形式进行调用,方便用户进行使用。

上面的一些资料来源于:
1、古月居的博客机械臂轨迹规划——三次样条对比研究
2、古月居胡老师在深蓝学院的课程。

你可能感兴趣的:(ROS)