编程流程:链接控制需要的规划组——>设置目标位姿(关节空间或笛卡尔空间)——>设置运动约束(可选)——>使用MoveIt!规划一条到达目标的轨迹——>修改轨迹(如速度等参数)——>执行规划出的轨迹
与MoveIt!有关的程序API可以参考http://moveit.ros.org/code-api/
关节空间运动:
set_joint_value_target, set_pose_target
点到点运动:不需要在笛卡尔空间规划末端运动轨迹,机器人各个关节运动不需要联动
实现关节空间运动,描述B点位置的两种方式:(1)正向运动学,通过关节的角度或者位置来描述;(2)逆向运动学,通过空间范围内的xyz和四元数来描述
笛卡尔空间运动:
compute_cartesian_path
笛卡尔路径约束,路径点之间的路径形状是一条直线
自动避障运动:
方式一:通过MoveIt!可视化插件添加模型,在运动规划时会自动考虑碰撞检测
方式二:通过程序来添加障碍物,add_box, attach_box
圆弧轨迹规划:
轨迹重定义:
多轨迹连续运动:
先规划每一条轨迹,然后再拼接在一起,最后再重新规划一下
更换运动学插件:
MoveIt!默认使用的运动学求解器——kdl
数值解
优点:可求解封闭情况下逆运动学
缺点:速度慢,失败率高
TRAC-IK
成功率高,但求解不稳定
#安装
$sudo apt-get install ros-kinetic-trac-ik-kinematics-plugin
#配置yaml文件,把里面的求解器更换一下
$rosed "$MYROBOT_NAME"_moveit_config/config/kinematics.yaml
arm:
kinematics_solver: trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin
kinematics_solver_attempts: 3
kinematics solver search resolution: 0.005
#测试
$sudo "$MYROBOT_NAME"_moveit_config demo.launch
IKFast——由Rosen Diankov编写的OpenRAVE运动规划软件提供
成功率高,求解稳定、速度快,但存在多解选择问题
可以求解任意复杂运动链的运动学方程(解析解),并产生特定语言的文件(如C++)后供使用;
比较稳定、速度快,在最新的处理器上能以5微秒的速度完成运算 ,但是配置比较繁琐。并且更换模型后,C++文件要重新生成一遍才能使用。参考链接:htttp://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/ikfast/ikfast_tutorial.html