本文参考Moveit!官方文档。
系统:ubuntu 18.04 / 16.04
ROS:Melodic / Kinetic
概述
基于python的运动组API是最简单的MoveIt!用户接口。其中提供了用户常用的大量功能封装,例如:
- 设置目标关节控制或笛卡尔空间位置
- 创建运动规划
- 移动机器人
- 在环境中添加对象
- 将对象与机器人连接或断开
下载示例功能包
我们通过官方的示例功能包来分析该API的用法。首先将两个官方的示例下载到工作空间的src目录并编译:
对Kinetic版本的ROS:
sudo apt-get install ros-kinetic-franka-description
cd ~/catkin_ws/src
git clone -b kinetic-devel https://github.com/ros-planning/moveit_tutorials.git
git clone -b kinetic-devel https://github.com/ros-planning/panda_moveit_config.git
cd ~/catkin_ws/
catkin_make
对Melodic版本的ROS:
sudo apt-get install ros-melodic-franka-description
cd ~/catkin_ws/src
git clone https://github.com/ros-planning/moveit_tutorials.git -b melodic-devel
git clone https://github.com/ros-planning/panda_moveit_config.git -b melodic-devel
cd ~/catkin_ws/
catkin_make
分别是机器人模型、官方教程功能包和panda机械臂的配置功能包。
运行rviz和MoveGroup节点
ctrl+alt+T 打开两个终端,依次运行下列两行命令。第一行命令在终端中加载完毕后,再运行第二行:
roslaunch panda_moveit_config demo.launch
rosrun moveit_tutorials move_group_python_interface_tutorial.py
在第二个终端中依次敲击回车键,在rviz界面中可以看到机器人执行如下动作:
- 机器人规划并运动到关节目标位姿
- 机器人向目标位姿规划一条路径
- 机器人规划了一条笛卡尔空间的路径
- 机器人再次规划了一条笛卡尔空间路径
- 机器人执行了该笛卡尔空间路径
- 在Panda机械臂的末端出现了一个小箱子
- 小箱子改变了颜色,表示它现在已经附加在了机械臂上
- 机械臂附带着小箱子规划并执行了一条笛卡尔空间路径
- 小箱子再次改变颜色,说明它现在已经脱离了机械臂
- 小箱子消失
代码与注释
下面为 move_group_python_interface_tutorial.py 的代码,已将所有注释和打印语句翻译,可直接替换 ~/catkin_ws/src/moveit_tutorials/doc/move_group_python_interface/scripts/ 路径下的同名文件。
友情提示:
要充分理解本章的代码,除了要懂得基本的python语法和面向对象的编程结构以外,还需要有基本的机器人运动学知识,包括但不限于:
- 理解关节空间位置与笛卡尔空间位姿的区别
- 什么是路径规划,关节空间与笛卡尔空间路径规划的区别
#!/usr/bin/env python
上一篇文章的遗留问题:公差检测函数 all_close()决定动作是否执行
在上一篇文章的最后,我提到了rviz规划界面的不稳定性。这是因为函数all_close()多次用来检测规划状态与当前状态是否相符。在纯粹做运动规划的理想状态下,即使公差很小也不会有什么影响。但实际环境或仿真环境会影响机器人的当前状态。例如由于基座运动、刚度过小导致的位置误差,会使得公差检测不通过,进而导致运动规划失败。这种情况下,应当适当加大允许的公差范围。
值得研究的一个问题
在实验过程中,发现机械臂位姿偶尔会发生跳变,应该是求逆解时的多解造成的。难道 Moveit! 默认求解器无法处理多解情况?这个问题值得研究一下。
演示效果
ROS机械臂的控制API示例https://www.zhihu.com/video/1104515064329170944参考文献
[1] Move Group Python Interface