ROS机器人开发实践(专题篇)—— MoveIt!

文章目录

  • 1. MoveIt简介
  • 2. MoveIt! Setup Assistant配置机械臂
    • C800机械臂
    • 含有相机和夹爪的机械臂
  • 3. MoveIt+Gazebo仿真配置


ROS的功能是强大的,当然对机械臂也有相应的支持 —— MoveIt!
MoveIt官方网站
ROS机器人开发实践(专题篇)—— MoveIt!_第1张图片

1. MoveIt简介

  • 一个 集成化的 开发平台
  • 一系列的功能包 组成
    • 运动规划
    • 控制与导航算法
    • 操作控制
  • 提供窗口化操作

ROS机器人开发实践(专题篇)—— MoveIt!_第2张图片

  1. 用户接口(User Interface)
    1. C++:使用move_group_interface包提供的API
    2. Python:使用moveit_commander包提供的API
    3. GUI:使用MoveIt!的rviz插件
  2. ROS参数服务器
    1. URDF:robot_description参数,获取机器人URDF模型的描述信息
    2. SRDF:robot_description_semantic参数,获取机器人模型的配置信息
    3. config:机器人的其他配置信息,例如关节限位、运动学插件、运动规划插件等
  3. 机器人
    1. Topic和Action通信

ROS机器人开发实践(专题篇)—— MoveIt!_第3张图片

2. MoveIt! Setup Assistant配置机械臂

安装MoveIt wiki官网

完成后执行如下指令:

$ roslaunch moveit_setup_assistant setup_assistant.launch

ROS机器人开发实践(专题篇)—— MoveIt!_第4张图片

C800机械臂

首先进行C800机械臂的配置:

ROS机器人开发实践(专题篇)—— MoveIt!_第5张图片

  1. Start:点击Create New Moveit Configuration Package,浏览并选中机械臂的urdf文件,点击load加载你的机械臂。
    ROS机器人开发实践(专题篇)—— MoveIt!_第6张图片
  2. Self Collisions:设置自碰撞检测,为减少之后的计算量,检查机械臂中不可能相互碰撞的link。ROS机器人开发实践(专题篇)—— MoveIt!_第7张图片
  3. Virtual Joints:虚拟关节。给机械臂整体在外界设置一个参考系。如果机械臂含有底盘,就可以通过虚拟关节和外界参考系的相对运动,确定机械臂的状态。这里把世界坐标系和设置的虚拟关节建立了联系。由于机械臂是不可动的,使用所以设置了fixed(还有planar和floating两种选择)。ROS机器人开发实践(专题篇)—— MoveIt!_第8张图片
  4. Planning Groups:规划组。Kinematic Solver是运动学正逆解,这里选择了kdl,Kin.Search Timeout是结算时间,如果超出这个时间就会报错,这取决于电脑的性能。OMPL(Open Motion Planning Library)运动规划算法,这里选择常用的RRTConnect。随后添加运动规划的关节,可以使用add joint添加,也可以使用添加Kinematic Chain,添加Base Link和Tip Link形成一个完整的运动学链。
    ROS机器人开发实践(专题篇)—— MoveIt!_第9张图片ROS机器人开发实践(专题篇)—— MoveIt!_第10张图片
  5. Robot Poses:预定义机器人位姿。将0位置定义成home,类似于无人机返航一样,可以随时通过home返回0点,也可以设定其他若干个点。
    ROS机器人开发实践(专题篇)—— MoveIt!_第11张图片
  6. End Effectors:定义一个终端,用做夹爪的控制。
  7. Passive Joints:固定一个自由度。放入右边Passive Joint的关节将被锁定,不能运动。ROS机器人开发实践(专题篇)—— MoveIt!_第12张图片
  8. ROS Control:作用是将MoveIt发出的数据封装好发布出去。点击Auto Add就可以自动加入一个Planning Group内的所有FollowjointTrajectory控制器。还需要点击add controller添加一个控制端用来接收MoveIt的信息并传给gazebo仿真器,使得机械臂运动。也是通过这个controller和真机传输信息的。
    ROS机器人开发实践(专题篇)—— MoveIt!_第13张图片ROS机器人开发实践(专题篇)—— MoveIt!_第14张图片
  9. Simulation:生成或修改URDF使得可以在Gazebo内进行仿真,只需点击Generate。将自动产生的文件复制到传入的.urdf文件中,并将EffortJointInterface改成PositionJointInterface,因为前面我们使用的是路径规划,生成的是力驱。
    ROS机器人开发实践(专题篇)—— MoveIt!_第15张图片
  10. 3D Perception:机械臂上的相机设置。
  11. Autho Information:作者信息。
  12. Configuration Files:产生一个配置包,命名最好为“机械臂名_moveit_config”。点击Generate。

含有相机和夹爪的机械臂

首先补充知识.urdf设定旋转轴时,TF坐标x轴(红)始终指向旋转轴方向。

这里呈现与上述步骤未包含的步骤:

  1. 对于有夹爪的机械臂还需设置夹爪的Planning Group,因为夹爪和机械臂本体通常是两套控制器,这里只需把夹爪添加到Joints就可以了。
    ROS机器人开发实践(专题篇)—— MoveIt!_第16张图片
  2. End Effectors:设置对夹爪的控制。
    ROS机器人开发实践(专题篇)—— MoveIt!_第17张图片
  3. 需要设置机械臂和夹爪的控制器,在assitant内不能使用相同的controller名,但是如果命名不同,机械臂控制器信息的接受者arm_controller_gazebo便不能接受arm_controller发送的MoveIt信息,需要在后续进行更改。
    ROS机器人开发实践(专题篇)—— MoveIt!_第18张图片
  4. 设置相机采集点云信息。/camera/depth/points是在urdf文件中事先设定好的目录。ROS机器人开发实践(专题篇)—— MoveIt!_第19张图片
    ROS机器人开发实践(专题篇)—— MoveIt!_第20张图片

3. MoveIt+Gazebo仿真配置

ros_control 可参考https://blog.csdn.net/weixin_41045354/article/details/104413355
ROS机器人开发实践(专题篇)—— MoveIt!_第21张图片
MoveIt发送轨迹(Trajectory)信息(包括运动学 Kinematics、路径规划 Path Planning、碰撞检测 Collision Checking);通过FollowJointTrajectory将信息封装成Action(ROS中的一种通信形式,即传输信息并能得到反馈);然后插补,对轨迹上的轨迹点进行插补,比如1ms,运用Trajectory Interpolation插补算法;随后把信息发送给伺服,通过电频信号转换成电流、电压信号,使得电机进行旋转,并通过Joint State Controller反馈信息。

  • 控制器管理器
    • 提供一种通用的接口来管理不同的控制器。controller manager包含了各种各样的控制器,典型的包括机械臂本身和夹爪。真实机械臂会通过编码器,进行位姿的反馈;joint_state实现了Gazebo中类似编码器的功能。
  • 控制器
    • 读取硬件状态,发布控制命令,完成每个joint的控制。
  • 硬件资源
    • 为上下两层提供硬件资源的接口。
  • 机器人硬件抽象
    • 机器人硬件抽象和硬件资源直接打交道,通过write和read方法完成硬件操作。
  • 真实机器人
    • 执行接收到的命令。

ROS机器人开发实践(专题篇)—— MoveIt!_第22张图片

  1. 修改刚才创建的c800_moveit_config/config/ros_controllers.yaml。controller_list下是在assistant中设置的机械臂的控制器,用来控制6个joint,需要把下面controller_gazebo(在assistant中设置的用来接收MoveIt封装信息的控制器名)改成arm_controller,两个名字需要相同,由于assistant内不能出现相同名称,需要自己在文件中修改。
    ROS机器人开发实践(专题篇)—— MoveIt!_第23张图片
  2. 修改/launch/ros_controllers.launch。将controller_azebo(同样是assistant内设置的)改成刚才提到的arm_controller和joint_state_controller,joint_state_controller用来反馈位姿信息。
    ROS机器人开发实践(专题篇)—— MoveIt!_第24张图片

你可能感兴趣的:(ROS)