MoveIt教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文介绍了如何使用ROS(机器人操作系统)Noetic版本下的MoveIt运动规划框架对机械臂进行控制。课程学习需要掌握Linux操作系统的基本操作以及一门编程语言(C++或Python)的使用。


一、搭建MoveIt开发环境

1 ROS简介

ROS是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理,也提供用于获取、编译、编写和跨计算机运行代码所需的工具和库函数。
ROS作为一个分布式的进程(节点)框架,其节点封装在易于分享和发布的功能包中,主要目的是为机器人研究开发提供代码复用支持。

ROS系统常用命令

创建新的ROS功能包

catkin_create_pkg 自定义包名 依赖包 

安装 ROS功能包

sudo apt install 包名

删除某个功能包

sudo apt purge 包名 

列出所有功能包

rospack list

查找某个功能包并返回安装路径

rospack find 包名 

进入某个功能包

roscd 包名 

列出功能包下的文件

rosls 包名 

搜索某个功能包

apt search 包名 

roscore是ROS的系统先决条件节点和程序的集合,必须运行roscore才能进行通信。roscore将启动ros master、ros参数服务器、rosout日志节点。
启动roscore:

roscore

指定端口号启动

roscore -p 端口号

rosrun运行指定的ROS节点(需要先启动roscore才能使用)

rosrun 包名 可执行文件名
示例:rosrun turtlesim turtlesim_node

roslaunch执行功能包下的launch文件(launch文件包含roscore和数个ROS节点,可直接启动)

roslaunch 包名 launch文件名

2 MoveIt简介

MoveIt由ROS中一系列移动操作的功能包组成,包含运动规划,操作控制,环境感知,运动学正逆解,碰撞检测等,是目前最常见的机械臂运动规划软件。 MoveIt提供了一系列成熟的插件和工具,可以实现机械臂控制的快速配置以及运动规划所需的大部分功能,并且封装了大量API方便用户进行二次开发。
可以查阅官方文档:https://moveit.github.io/moveit_tutorials/,学习MoveIt的详细教程和 API 说明。

3 安装步骤

3.1 安装ROS系统

首先进行ROS安装。
使用快捷键 crtl+alt+t 打开终端
在终端中输入鱼香ROS大佬的脚本命令一键安装ROS:

wget http://fishros.com/install -O fishros && . fishros

在这里插入图片描述
输入后终端会提示输入用户密码后回车(Enter),注意这里密码输入是不显现的。
在这里插入图片描述
这里选择1后回车。
在这里插入图片描述
首次安装选择1,脚本会自动检测系统判断ROS安装选择,我们使用的Ubuntu20.04推荐安装ROS版本如下:
在这里插入图片描述
选择noetic(ROS1)版本,按3后回车,安装完成。

验证是否安装完成,重新启动一个终端并输入:

roscore

在这里插入图片描述
即可验证ROS是否安装完成并查看ROS版本信息。

3.2 安装MoveIt框架

更新ROS软件包,由于rosdep经常出现网络问题,这里选择使用rosdepc:

sudo pip install rosdepc
sudo rosdepc init
sudo rosdepc update
sudo apt update
sudo apt dist-upgrade

安装catkin(编译工具)和wstool(工作空间工具)

sudo apt install ros-noetic-catkin python3-catkin-tools
sudo apt install python3-wstool

安装MoveIt框架

sudo apt-get install ros-noetic-moveit

二、ROS功能包使用介绍

2.1 机械臂ROS功能包介绍

在不同品牌机器人官方网站中可以下载相应的机械臂的ROS功能包,使用细节可查阅官方文档,各功能包的作用如下(xx表示机械臂品牌名):

序号名称作用
1xx_description机器人描述功能包,其中有创建好的机器人模型和配置rm_description文件
2xx_moveit_config使用Setup Assistant工具根据机械臂URDF模型创建生成的一个 MoveIt配置的功能包,它包含了大部分MoveIt启动所需的配置文件和启动文件
3xx_gazebogazebo
4xx_demoMoveIt!编程示例,包括场景规划、避障规划和抓取放置等
5xx_msgs机械臂用到的所有控制和状态消息
6xx_control机器人控制器,将Moveit规划的机械臂轨迹,通过样条插值细分发给 rm_driver节点
7xx_driver(1)与机械臂通过以太网口建立socket连接,保证上位机的 IP 在同一局域网内,使用ROS控制机械臂;(2)订阅各topic数据,更新RVIZ内机械臂各关节角度
8xx_bringup启动机器人,运行启动的launch文件后,可自动运行rm_driver,rm_control 和RViz交互界面,在仿真界面中拖拽机器人即可控制真实机器人运动

2.2 编译功能包源码

创建一个新的工作空间:

mkdir -p ws_robot/src

ws_robot可以替换成自定义空间名称。
进入工作空间的src目录下:

cd ~/ws_robot/src

编译机器人ROS功能包

以睿尔曼机器人的ROS源码包为例。
将下载的ROS包拷贝到工作空间的src文件夹下。
在这里插入图片描述
通过rosdep安装源码包依赖:

rosdep install -y --from-paths . --ignore-src --rosdistro noetic -r

使用catkin工具配置工作空间并进行编译:

cd ~/ws_robot

初始化工作空间:

catkin init

先编译消息包:

catkin build rm_msgs

编译整个源码包:

catkin build

编译完成。

编译其他功能包

工作空间建立完毕后将下载的功能包拷贝到工作空间的src文件夹下,打开终端进入工作空间后执行如下命令:

catkin build 包名

使用功能包

需要打开终端进入工作空间:

cd ~/ws_rmrobot

在当前的终端中刷新环境变量:

source devel/setup.bash

每次打开一个新的终端或者编译完成后都需要重复以上步骤。

可以选择手动添加source命令至.bashrc文件让系统自动刷新工作空间。
在home目录下打开.bashrc文件:

gedit ~/.bashrc

在.bashrc文件最后一行添加命令:

# xxx是你的工作空间的名称
source ~/xxx/devel/setup.bash

修改文件后写入系统环境:

source ~/.bashrc

三、使用RViz与机械臂交互

3.1 RViz简介

RViz是ROS系统中的三维可视化平台,也是MoveIt的插件之一。通过MoveIt的Rviz插件,可以实现机器人外部信息的图形化界面。用户可以设置虚拟环境,以交互方式设置机器人的开始及目标状态,测试各种运动规划算法并进行视化输出。
在这里插入图片描述
1.Displays面板
添加、配置和管理各种可视化对象。
2.场景面板
用于显示机械臂所在的模拟环境。允许按住鼠标左键调整视角、按住中键拖动平移视图、滚轮缩放比例操作。
3.View面板
用于配置和控制三维视图的工具面板。可以调整视觉设置。
4.Time面板
用于控制时间和时间相关功能的工具面板。允许调整时间、播放/暂停可视化数据以及设置时间相关的参数。

3.2 机器人描述功能包

机器人ROS源码包中的description功能包有创建好的机器人模型和配置文件。
rm_description 功能包中主要包含urdf、meshes、launch和config四个文件夹。
urdf:存放机器人模型的描述文件(URDF与xacro格式)。URDF全称为Unified Robot Description Format,静态描述机器人几何形状、连接关系等基本属性的一种统一格式。
meshes:放置URDF中引用的模型渲染文件。
launch:存放相关的启动文件。
config:保存rviz界面配置文件。

3.3 显示机械臂模型

打开终端进入工作空间后启动机器人ROS包中description功能包中的launch文件即可:

roslaunch rm_description rm_<arm_type>_display.launch

如使用RM65机械臂时使用以下指令

roslaunch rm_description rm_65_display.launch

机械臂RViz界面如下图所示
在这里插入图片描述
运行后除了启动了RViz,还启动了joint_state_publisher节点,可以在出现的UI中滑动各部位的joint控制条,模型对应的机械臂关节就会转动。
如果未显示机械臂模型,可手动修改“Fixed Frame”为“base_link”,然后按下左下角Add按钮,在弹出的界面找到“RobotModel”并添加。

3.4 运行机械臂演示例程

打开终端进入工作空间执行以下命令:

roslaunch rm_65_moveit_config demo.launch

在这里插入图片描述
按住场景面板中的规划器拖动即可改变机器人的姿态。然后再MotionPlaining页面中点击“Plan & Execute”,MoveIt开始规划路径并控制机器人向目标位置移动,界面中可以看到机器人运动的全过程。

3.5 机械臂配置助手

功能包已经有配置好的moveit_config文件,如需要创建自己的机械臂或是修改机械臂自碰撞、添加传感器等信息可以通过MoveIt内置的助手工具根据机械臂URDF描述文件生成SRDF文件。
SRDF全称Semantic Robot Description Format,是URDF的补充,在URDF的静态描述基础上增加了语义描述,为机器人静态描述添加关于行为、功能、用途和约束等方面的信息,如碰撞检测、运动规划,使机器人的描述更加丰富,可以进行更高级的任务规划和操作。
配置操作如下:
(1)启动配置助手
打开终端进入工作空间执行以下命令:

roslaunch moveit_setup_assistant  setup_assistant.launch

启动后配置界面如下如所示:
请添加图片描述
我们选择①查看已有的配置,按②选择使用机械臂型号对应的moveit_config功能包路径。
在机械臂的moveit_config功能包中按ctrl+h查看隐藏文件会出现.setup_assistant的配置文件:
在这里插入图片描述
urdf文件放置在rm_description功能包下,检查urdf文件路径是否正确。
(2)生成自碰撞矩阵
点击左边栏第二个选项卡Self-Collisions:
在这里插入图片描述
点击按钮生成自碰撞矩阵。
(3)增加虚拟关节
左边栏第三个选项卡Virtual Joints,对于底座固定的机器人可以忽略。
当机械臂固定在移动底盘上时,需要一个对应里程计odom的虚拟关节,因为底座base_link相对于里程计odom的坐标系frame是移动的。
(4)添加规划组
左边栏第四个选项卡Planning Groups,用于对机器人多个关节的规划,一个规划组可以包含多个关节。
在这里插入图片描述
可以看到机械臂规划组名为arm,有6个关节joint,从基本链接base_link到末端链接link6,代表整个机械臂的规划将考虑link1~6这6个关节的规划。
Add Group可以添加新规划组,如夹爪规划组,添加关节与运动链,设置自己的组名与解算器等属性。
(5)添加机器人姿态
左边栏第五个选项卡Robot Poses用于提前设定机器人姿势,有需要可以点击Add Pose添加。
(6)设置机器人末端执行器
第六个选项卡End Effector用于添加末端执行器。
点击右下方Add End Effector,设置末端名称,选择夹爪规划组,父连杆,父级组为arm。
(7)添加被动关节
第七个选项卡Passive joints,用于添加被动关节从而不发布其状态。
(8)生成配置文件
左边栏最后一个选项卡Configuration Files用于生成配置文件。
在这里插入图片描述
点击Browse选择配置文件保存目录,勾选想要生成或更新的配置文件,最后点击Generate Package生成。

四、MoveIt!控制真实机械臂

MoveIt完成运动规划后,使用名为“FollowJointTrajectory”的action作为输出接口,其中包含了一系列规划好的路径点轨迹。真实机械臂需要编程添加一个server订阅这个action 并处理以控制真实机器人。

4.1 机器人控制相关功能包

控制器rm_control

机器人控制器 rm_control 功能包,通过添加一个server订阅MoveIt完成运动规划后输出的action信息,然后将Moveit规划的机械臂轨迹,通过三次样条插值细分,按照10ms的控制周期发给 rm_driver 节点。

驱动功能包 rm_driver

rm_driver功能包,实现与机械臂通过以太网口建立socket连接,订阅和发布机器人的各topic信息,将rm_control处理后发来的机械臂运行路径点轨迹通过socket发送至真实机械臂实现对真实机械臂的控制,同时接收机械臂返回的信息处理后通过topic发布至 move_group 完成rviz中机器人的同步。

4.2 运行演示例程

先将RM65机器人上电,等待机器人初始化,初始化完成后会闪烁绿灯。先确保上位机IP与机械臂在同一局域网内,打开rm_65_moveit_config/launch/rm_65_moveit_controller_manager.launch.xml文件,确认加载的到参数服务器的controllers.yaml配置文件代码如下:

<!-- loads ros_controllers to the param server -->
<!-- <rosparam file="$(find rm_65_moveit_config)/config/ros_controllers.yaml"/> -->
<rosparam file="$(find rm_65_moveit_config)/config/controllers.yaml"/>
<!-- <rosparam file="$(find rm_65_moveit_config)/config/controllers_gazebo.yaml"/> -->

打开终端,执行以下命令启动控制器:

roslaunch rm_control rm_65_control.launch

打开一个新的终端启动driver节点和加载可视化界面:

roslaunch rm_bringup rm_65_robot.launch

运行成功后可以看到界面中的机器人模型与真实机械臂姿态一致,此时在rviz中拖动规划完成后,真实机械臂也会按照MoveIt规划的路径运动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值