MoveIt入门之——使用MoveIt配置助手生成MoveIt配置文件

本文详细介绍了在ROS环境中使用MoveIt进行机器人运动规划配置的步骤,包括安装MoveItassistant、配置URDF文件、自碰撞检测、虚拟关节设置、创建planninggroup、设置robotposes、配置末端执行器、设置被动关节及生成配置文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.安装MoveIt assistant

sudo apt-get install ros-kinetic-moveit

如果报错说找不到软件包,可能是没有更新源,只要去roswiki上找安装教程,把源重新加入就可以了。

二.打开配置助手

roslaunch moveit_setup_assistant setup_assistant.launch

这个没什么好说的,就一行命令的事

三.开始配置

1.首先你需要有一个没有问题的URDF文件。

至于怎么检查有没有问题:
不用担心,ROS有工具可以使用。

sudo apt-get install liburdfdom-tools

安装完成后只需要用下面这行命令就可以检查特定URDF文件。[your urdf file namw]替换为你的文件名

check_urdf [your urdf file name].urdf

如果没有问题就会看到类似下面这样的信息
这里写图片描述

2.有了URDF文件后,那么启动配置助手,加载URDF文件

这里写图片描述
有两个按键,一个是创建新的MoveIt配置文件,另一个是编辑已有的MoveIt配置文件
这里我们选择创建新的配置文件。
这里写图片描述
选择Browse浏览文件目录,选择你想要的URDF文件,点击load files确定就行了。
这里写图片描述
笔者在这里曾经踩了一次坑,当时无论我用什么URDF文件,load之后在右边的预览框内都无法出现模型的预览。
我找遍了百度,Google都无法找到解决方法,最后还是看terminal的报错信息才意识到可能是因为我没有把URDF文件放在我的工作空间内
所以导致配置助手找不到URDF文件,在我把URDF文件夹放在工作空间的src目录下以后,就成功看到上面这幅图了。
不仅如此,如果单单只有一个URDF文件的话也是不行的,具体原因你要去看terminal的报错信息,这很有用,学会看报错信息很重要。看完就会发现错误提示可能会是说找不到xxx的描述文件,其实就是说找不到你这个模型的stl文件。

3.自碰撞检测配置

这里写图片描述
点击左边栏,跳转到第二步。
第二步是自碰撞检测的配置。很容易理解,机器人在规划运动轨迹的时候可能会出现自身结构相互碰撞的情况,所以我们就需要自碰撞检测
一般来说这一步按照默认值就行了,10000个采样点可以满足一般需求了。
所以只需要点击Generate Collision Matrix 生成碰撞矩阵
这里写图片描述
直观上看碰撞矩阵就像上图这样

4.设置虚拟关节

在这里什么叫做虚拟关节呢?虚拟关节就是定义一个关节将机器人与世界链接起来,举个例子,比如现在给机械臂安装上一个AGV小车底盘,那么这个小车底盘就算机械臂的虚拟关节,这个关节类型是planar(在平面上运动)的;如果把机械臂固定在地面上,那么与地面的连接就算一个虚拟关节,这个关节类型是fixed(固定)的;再比如是一个人形机器人,那么脚底和世界的连接也算一个虚拟关节,而这个关节类型就是float(浮动)的。
child_link指你想要连接到世界的关节。
这里写图片描述

5.创建planning group

创建planning group是使用MoveIt非常核心的一步。
这里写图片描述

规划组的名称:

这里写图片描述

运动学逆解工具选择:

这里选择比较常用的KDL
这里写图片描述

运动规划参数配置:

这里写图片描述
1. Kin. Search Resolution: 关节空间的采样密度
2. Kin. Search TImeout: 求解时间
3. Kin. Solver Attempts: 求解失败尝试次数

这三项参数一般保持默认值就行了。

OMPL算法选择(不一定有这个东西):

这里写图片描述
可能是版本原因,有些MoveIt配置助手并没有这个选项,我能找到的同类教程也鲜有出现这个东西,这个选项其实就是让用户自己选择OMPL的算法,在这里我们选择RRT。关于算法优劣的对比,在这里就不讲了,才疏学浅不好乱讲。
在MoveIt配置助手里,创建规划组有四种方法Add Joints, Add Links, Add Kin. Chain, Add Subgroups,这里我选用Add Kin. Chain。
这里写图片描述
这就完成了一个规划组的配置了。
到此,我们创建了手臂部分的规划组,但是还不够,别忘了,我们还有夹持器呢。
这里写图片描述
这里写图片描述
这里写图片描述

这样就创建了两个规划组。

6.设置robot poses

这一步是用来预先设置好一些固定的位置,就像宏定义一样,自定义一个位置常量,这样我们在写代码的时候就可以直接调用这个位置量了。可以用来设置初始位置什么的。
这里写图片描述
可以手动调节也可以输入数值来调节,调节的单位是弧度。
设置完点击保存就行了。如果没问题的话就会看到下图这样的界面
这里写图片描述

7.配置末端执行器

在大多数情况下,我们会给机械臂安装末端执行器,可以是夹持器,可以是真空吸盘,甚至可以是3d打印机的挤出头。如果恰好安装的是夹持器这种末端执行器,那么刚刚我们多设置的一个规划组就有用了。
这里写图片描述
这里写图片描述

8.设置被动关节

什么叫被动关节?顾名思义就是无法主动运动的关节,也可以理解为从动关节。比如双驱小车上的从动万向轮。码垛机械臂上的从动连杆。如果在这一步设置为被动关节,那么这个关节就不会参与运动规划。
在这里没有被动关节,所以这一步可以跳过。

9.填写作者信息

这里写图片描述

10.最后一步————生成配置文件

这里写图片描述
都是傻瓜操作,就不多说了。

### 使用MoveIt框架对机器人末端执行器进行运动规划和控制 #### 了解基本概念 为了有效地利用MoveIt框架来操作机器人末端执行器,理解几个核心概念至关重要。`move_group`是一个ROS节点,在启动时会从参数服务器读取三个主要的信息源:URDF、SRDF以及特定于MoveIt配置数据[^1]。 - **URDF (Unified Robot Description Format)** 描述了机械结构及其物理属性; - **SRDF (Semantic Robot Description Format)** 提供额外语义信息,比如哪些链路应该被看作是手爪的一部分; - **MoveIt特有配置** 包含诸如关节限制、运动学求解器的选择等细节。 #### 设定目标位置与姿态 当希望指定末端执行器的目标位姿时,可以采用两种方式之一: - 如果确切知道要定位的具体链接,则调用`setEndEffectorLink()`方法并传入该链接的名字作为参数。 - 对于更抽象的需求场景——即不需要关心具体哪个部件负责抓握动作的情况下,可以选择通过`setEndEffector()`函数指明整个末端执行器组名即可[^3]。 ```cpp // C++ API 示例代码片段 group.setPoseTarget(target_pose); // 设置期望达到的位置和方向 ``` #### 应用手势保持功能 有时可能需要确保在移动过程中维持某个固定的角度或方位不变。这可以通过应用路径约束来达成。例如对于Panda机器人而言,如果想要让其手臂末端在整个轨迹上都指向相同的方向,可以在规划前添加相应的姿势约束条件;完成之后务必记得清除这些临时设定以免影响后续任务[^2]。 ```cpp // 添加姿态约束的例子 geometry_msgs::PoseStamped pose; pose.pose.orientation.w = 1.0; // 假设这里定义了一个理想的朝向 constraints->orientation_constraints.resize(1); auto& oc = constraints->orientation_constraints[0]; oc.link_name = "panda_link8"; // 替换成实际使用的末端连接名称 oc.absolute_x_axis_tolerance = 0.1; oc.absolute_y_axis_tolerance = 0.1; oc.absolute_z_axis_tolerance = 0.1; oc.weight = 1.0; group.setPathConstraints(constraints); // 执行完当前计划后立即移除所有已施加的限制措施 group.clearPathConstraints(); ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值