遨博协作机器人ROS开发 - 机械臂复杂轨迹规划

本文介绍了ROS环境下机械臂的复杂轨迹规划,包括MoveIt!的正向运动学、圆弧轨迹规划、轨迹重定义、多轨迹连续运动和速度限制调整。通过实例展示了如何实现机械臂的精确运动控制,并提出了课后练习,涉及实际机械臂的轨迹执行与参数调整。

目录

一、简介

二、环境版本

三、学习目标

四、知识储备

 五、任务实施

六、任务拓展

 七、课堂小结

 八、课后练习


一、简介

大家好,欢迎关注遨博学院带来的系列技术分享文章(协作机器人ROS开发),今天我们来学习一下“机械臂复杂轨迹规划”。

二、环境版本

  • 主机系统版本:Windwos10 64位
  • 处理器型号:Intel-i7
  • 虚拟机版本:VMware Workstation 16 Pro
  • 虚拟机系统:Ubuntu 18.04.6 LTS
  • ROS版本:Melodic

三、学习目标

四、知识储备

下面开始介绍本节内容的知识点:

1.MoveIt!的正向运动学

通过MoveIt!的API接口控制机械臂运动,程序中一般是通过设置机械臂末端需要到达的位姿,然后规划路径并执行来控制机械臂运动的,这样可以保证每次末端都会运动到指定的位姿,但是,机械臂6个关节的姿态每次规划并不一定相同。

如下方两个示意图所示,机械臂具有相同的末端位姿,但是具备不同的关节角。

 通过机械臂末端的位姿来计算机器人运动的路径,其实是一个逆运动学的过程,如果需要每次机械臂运动后的整体姿态是固定的,就需要使用正运动学过程,如下列代码所示,设置的目标不是末端的位姿,而是6个关节的角度。

需要注意的是,在ROS中角度使用的单位是弧度,而在机械臂示教器中使用的单位是角度,需要进行单位的转换。

设置关节角为目标姿态时需要调用setJointValueTarget函数。

 2.圆弧轨迹规划

在MoveIt!规划中,圆弧轨迹插补API是未提供的。实际应用里,例如焊接等任务需要圆弧轨迹,那么就需要自行实现。方法如下图所示,是用很多直线段模拟圆弧,取点越多越接近实际圆弧。在圆弧上均匀采样,将位置依次添加到路点,最后调用直线路径规划API实现圆弧运动,实现方法如右侧代码所示。

3.轨迹重定义

如果对规划出来的轨迹不是很满意,可以在“plan”和“execute”之间对轨迹进行修改。这里以删除轨迹中的中间点为例,对轨迹进行重定义。

首先调用MoveIt!的API规划得到一条路径plan(轨迹规划),如下列代码所示:

 接着调用右侧代码中实现的函数,delete_trajectory(plan, 10);,这是对plan每隔10个点删除一个,完成轨迹重定义,当然如果删除的点太多,会造成真实机械臂运动产生卡顿和抖动

 4.多轨迹连续运动

如果要一次运动多种复杂的轨迹,使用前面的方法,需要每次规划路径,然后等待机械臂运动完成,再次规划下一条路径,如此往复。在执行每条路径后,要规划下一条路径,这必然会导致计算路径耗时所产生的停顿,如果计算机的运算能力不高,这种停顿时间会更加明显。

如何让机械臂在各段轨迹之间不停顿,一气呵成完成所有轨迹的运动?MoveIt!本身是没有此功能的,因为MoveIt!规划出来的轨迹一定是速度从0到0的轨迹,我们需要重新组合API的调用来实现多轨迹连续运动。

实现方法是将规划得到的多条轨迹拼接成一条,然后对这一条轨迹中的速度,加速度进行重新规划,成为一条完整的轨迹,关键就在于如何重规划。

下面给出用时间最优算法对拼接的轨迹进行重规划,当然也可以用其它算法实现。

 下列是多条轨迹连续规划示例代码,生成新轨迹,然后就可以控制机械臂运动。

代码流程为首先定义一个轨迹变量trajectory,接着将已经规划好的路径中的每个点加入到trajectory中,重复此操作加入所有规划的轨迹,然后将所有的轨迹点重新规划,生成新的轨迹trajectory,最后将新轨迹赋值到规划变量中。

 5.修改超时运动限制

MoveIt!对于机械臂运动一条轨迹的时间是有默认限制的,如果采用多轨迹连续运动,那么会认为这是一条完整的轨迹,一般复杂轨迹运动的时间是比较长的,所以需要修改这个限制,以防超时导致的报错,方法如下。

修改AUBO-E5的MoveIt功能包下launch文件夹下的trajectory_execution.launch.xml文件,将执行的超时时间修改为20,单位是秒,如果在运行时报timeout的错误,也和机械臂运行速度有关,可适当增大这个数值。

在下图所示的位置进行修改,需要注意的是,轨迹执行时间限制的修改最好经过测试并符合实际需求。

 五、任务实施

接下来,我们来看下通过机械臂跳舞案例,展现正向运动学、轨迹重定义、多轨迹连续运动等内容。

12.机械臂复杂轨迹规划

六、任务拓展

设置机械臂速度与加速度限制。

为了使机械臂舞蹈运动速度和加速度更快,需要修改AUBO-E5的MoveIt功能包下config文件夹下的joint_limits.yaml文件,如右图所示,这里可以设置机械臂6个关节最大速度和加速度。

此文件内内参数的含义如下:

  • has_velocity_limits:速度限制是否生效,true代表生效,false代表不生效,生效时才能控制最大速度;
  • max_velocity:最大速度限制值,单位为弧度/s;
  • has_acceleration_limits:加速度限制是否生效,true代表生效,false代表不生效,生效时才能控制最大加速度;
  • max_acceleration:最大加速度限制值,单位为弧度/平方秒。

 七、课堂小结

下面我们进行课堂小结:

1.本节内容主要针对MoveIt!的复杂路径规划,可以利用圆弧轨迹规划、轨迹重定义、多轨迹连续运动等方式完成需要的轨迹路径,这在实际的应用过程中是非常重要的。

2.真实机械臂的ROS最大速度与最大加速的限制调节需要以安全为主,特别是在调试开发阶段,防止速度超出预期造成不必要的损失,同时也请放心,在ROS控制下,机械臂的碰撞停止等安全功能依然有效。

 八、课后练习

最后给大家布置一道课后习题。

1.利用圆弧轨迹规划的方法,编写1个在水平面规划圆形末端轨迹的程序节点,并控制真实机械臂完成此轨迹的验证。

2.利用轨迹重定义的方法,逐步删除轨迹中的路点,观察真实机械臂的运动情况。

在接下来的ROS课程中,我们会讲解遨博机械臂末端工具ROS驱动,欢迎持续关注。

<think>好的,用户想了解ROS2中机械路径规划的方法或教程。首先,我需要回忆ROS2的相关知识,尤其是与机械路径规划相关的部分。记得ROS2常用的功能包如MoveIt 2,它是MoveIt的ROS2版本,广泛用于机械的运动规划。用户可能希望从基础开始,逐步了解如何配置和使用这些工具。 根据用户提供的引用,特别是引用[1]提到的全局路径规划算法如Dijkstra、A*和D算法,但机械的路径规划可能更侧重于运动规划,比如逆运动学求解和避障。引用[2]和[3]提到了轨迹规划的具体应用和MATLAB的工具箱,这可能与ROS2中的实现有类似之处,但需要转换到ROS2的框架下。 首先,我应该介绍MoveIt 2,因为它是在ROS2中进行机械运动规划的主要工具。需要说明其架构和主要组件,比如运动学求解器、碰撞检测等。然后,分步骤说明如何配置机械的URDF模型,安装MoveIt 2,生成配置文件,这些都是基础步骤。用户可能需要示例代码,所以提供一个简单的启动文件示例是必要的。 接下来,轨迹规划部分需要区分笛卡尔空间和关节空间的规划,并给出代码示例。例如,使用MoveIt的Python接口发送目标位姿。另外,OMPL作为默认的规划库,需要提到支持的算法如RRT、PRM,这对用户理解不同算法的选择有帮助。 避障和路径优化也是重要部分,可以引用引用[3]中的轨迹规划工具,说明如何在ROS2中实现类似功能。教程资源部分,推荐官方文档和示例仓库,帮助用户进一步学习。 最后,生成相关问题需要考虑用户可能的后续疑问,比如与ROS1的区别、算法选择、仿真工具、实时性处理以及实际部署的问题。这些问题能够帮助用户深入探索,并解决实际应用中可能遇到的困难。 需要确保回答结构清晰,步骤详细,并且引用正确。同时,检查所有LaTeX格式是否正确,数学表达式用$...$,独立公式用$$...$$,但根据用户的问题内容,可能数学公式较少,更多是代码和步骤说明。确保所有引用标记正确,如引用[^1]、[^2]、[^3]对应到用户提供的参考内容。</think>在ROS2中实现机械路径规划主要依赖MoveIt 2框架和运动规划库,以下是具体方法与实现步骤: ### 一、ROS2机械路径规划核心组件 1. **MoveIt 2架构**:包含运动学求解器(KDL/Trac-IK)、碰撞检测(FCL/Bullet)、规划器接口(OMPL)三大模块 2. **运动规划流程**: $$ q_{target} = IK(T_{end-effector}) $$ 其中$q_{target}$表示目标关节角度,$T$为末端位姿变换矩阵 ### 二、路径规划实现步骤 #### 步骤1:配置机械模型 ```xml <!-- URDF示例 --> <robot name="my_arm"> <link name="base_link"/> <joint name="joint1" type="revolute"> <parent link="base_link"/> <child link="arm_link"/> <axis xyz="0 0 1"/> </joint> </robot> ``` #### 步骤2:安装MoveIt 2 ```bash sudo apt install ros-${ROS_DISTRO}-moveit ``` #### 步骤3:生成MoveIt配置 ```python ros2 launch moveit_setup_assistant setup_assistant.launch.py ``` 通过GUI加载URDF并生成`moveit_config`包 ### 三、轨迹规划方法 #### 1. 笛卡尔空间规划 ```python from moveit_msgs.msg import MotionPlanRequest req.workspace_parameters.header.frame_id = "base_link" req.goal_constraints.append( PositionConstraint(link_name="end_effector")) ``` #### 2. 关节空间规划 ```python joint_state = JointState() joint_state.position = [0.1, -0.5, 1.2, 0, 0, 0] move_group.set_joint_value_target(joint_state) ``` ### 四、OMPL规划算法配置 | 算法类型 | 特点 | 适用场景 | |----------|----------------------|----------------| | RRT | 快速探索随机树 | 高维空间 | | PRM | 概率路线图 | 结构化环境 | | EST | 扩展空间树 | 狭窄通道 | 在`ompl_planning.yaml`中配置参数: ```yaml planner_configs: RRTstar: {type: geometric::RRTstar} ``` ### 五、避障与路径优化 1. **碰撞检测配置**: ```python planning_scene.add_collision_mesh("obstacle.stl", pose_stamped) ``` 2. **轨迹优化**: $$ \min \int \| \ddot{q}(t) \|^2 dt $$ 使用时间最优化算法生成平滑轨迹[^3] ### 六、教程资源推荐 1. [MoveIt 2官方文档](https://moveit.ros.org/documentation/ROS2/) 2. [ROS2机械控制示例仓库](https://github.com/ros-planning/moveit2_tutorials) 3. 轨迹规划视频教程《Mastering ROS2 Motion Planning》
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值