机械臂的路径规划(jaka c12)
提示:随着本人的学习加深会不断更新的
前言
本文参考一:机械臂运动规划算法主要分为三大类
传统方法:RRT*算法在2D/3D机械臂轨迹规划中的应用实战
深度强化学习算法:最完整机械臂控制指南:用DDPG算法实现毫米级轨迹规划
一句话大白话:机械臂运动规划 = 给机械臂算一条「从 A 到 B、不撞东西、动作平顺」的运动路线 + 速度节奏
一、路径规划的基本逻辑
- 机械臂的路径规划就像给机器人画导航地图,需同时满足三个条件:避开障碍物、减少运动能耗、保持轨迹平滑。主流算法如RRT(快速随机树)通过随机采样构建路径网络,而A*算法则像智能寻路系统,实时计算最优解。实际应用中,算法需根据机械臂自由度(6轴或7轴)动态调整计算精度。想让机械臂从A点挪到B点,还得躲开障碍物,这就涉及到路径规划。它不光要管运动轨迹,还得考虑进入和退出的方向,比如抓东西时角度得对。
二、选择并执行路径规划算法
路径规划的目的是寻找一条从起点到终点且无碰撞的几何路径。目前主流的算法包括:
-
采样算法:如快速探索随机树(RRT)及其改进版(RRT*、RRTConnect)。这类算法无需对环境进行显式建模,通过随机采样和碰撞检测来扩展搜索树,非常适合高自由度机械臂和复杂动态环境。
-
传统与几何算法:如人工势场法(APF),通过模拟目标点的引力和障碍物的斥力来引导机械臂运动。虽然实时性好,但容易陷入局部极小值陷阱。
-
融合与智能算法:为了克服单一算法的缺陷,当前常采用混合架构。例如,将APF与RRT融合(APF-RRT),利用势场引导随机树生长,可大幅缩短规划时间并减小路径长度;此外,遗传算法、粒子群优化等也被用于全局搜索。
2.1常用路径规划算法
-
A*算法:这个算法把空间分成格子,像手机导航找最短路,靠“猜”算哪条路最省。它简单又高效,特别适合工厂里障碍少、环境固定的场景,比如流水线搬运。但要是障碍物动来动去,它就容易懵圈。
-
RRT算法:这个算法随机撒点,像探险一样长出一棵“树”,慢慢找到路。优点是能应付复杂环境,比如机械臂周围乱七八糟的障碍都能绕开,缺点是路径可能弯弯曲曲,常用于动态任务,像抓取移动物体。
-
PRM算法这个算法先在空间里随机撒点,连成一张“路网”,然后挑最佳路径。适合重复性任务,前期算得费劲,但后面跑起来超顺。
2.2轨迹规划
初始规划出的路径往往存在较多转折,直接执行会导致机械臂抖动和电机磨损,因此必须进行平滑处理:
- 曲线拟合:常采用B样条曲线(如5次B样条)对离散的路径点进行拟合。5次B样条能够保证机械臂在运动过程中的角度、角速度和角加速度连续光滑,避免刚性冲击。
- 平滑算法:也可结合滑动平均平滑算法或B-spline曲线生成算法,产生连续、平滑的避障曲线。
2.3小记
2.3.1运动学基础
-
正向运动学(Forward Kinematics):知道每个关节的角度和位置,就能算出末端执行器在哪。比如手肘抬30度、手腕转45度,抓手就到某个点。
-
逆动力学(Inverse Dynamics):反过来,知道末端要去哪,算每个关节咋动、用多大力,保证动作稳又准。
2.3.2 MoveIt PlanningScene
MoveIt PlanningScene 可以理解成 MoveIt 后端里的“规划世界模型”。它里面记录了规划时需要知道的东西:
机械臂模型
当前关节状态
障碍物
环境物体
2.3.3 轨迹点,逆运动学关节角度,和避障,这几个的关系
碰撞检测本身:不是 RRTConnect 做的,是 MoveIt2 的 PlanningScene / collision checking 做的,路径规划后就是轨迹规划
它们的关系可以按顺序理解:
目标位姿
↓
逆运动学 IK(得到的每个关节的角度)
↓
路径/运动规划 + 避障(路径规划算法是MoveIt2 + OMPL + RRTConnect)。OMPL + RRTConnect 是集成在 MoveIt 里的规划插件体系中使用的
↓
轨迹点
↓
机械臂执行
OMPL + RRTConnect 是集成在 MoveIt 里的规划插件体系中使用的。障碍物需要放在MoveIt PlanningScene里面
MoveIt 本身不是只包含一个算法,它是一个机器人运动规划框架。它可以调用不同的规划器。你现在这个后端日志里显示:更准确地说:
MoveIt
↓
规划管线 Planning Pipeline
↓
OMPL 插件
↓
RRTConnect 算法
真正的碰撞检查是在 MoveIt2 内部完成的。
2.3.4 rivz相关的知识点
在rviz当中,拉动机械臂或者是改变轴的角度,改变完以后想回到原先的位置,点击Start State—>previous 和 Goal stata ----->previous 然后再点击current
2.3.5 movelty 和OPML,RRTconeect的关系
MoveIt 负责发出“请规划路径”的指令;OMPL 负责提供一大堆算法选型;而 RRT-Connect 是这些算法中被用得最多的那一个。
- MoveIt 构建问题:MoveIt 整合机器人模型、环境障碍物等,将“规划请求”转化为一个OMPL能理解的抽象规划问题。
- 调用 OMPL 算法:MoveIt 通过 OMPL 接口,根据配置(默认为 RRTConnect)调用 OMPL 库开始计算。
- OMPL 执行规划:OMPL 中的 RRTConnect 算法在抽象空间里快速搜索,找到一条无碰撞的几何路径。
- MoveIt 处理结果:MoveIt 接收路径后,会进行轨迹后处理(如添加速度、加速度信息),生成机器人最终可执行的轨迹。
2.3.6 MoveIt 增加点云 OctoMap 插件
MoveIt 增加点云 OctoMap 插件”指的是在机器人运动规划框架 MoveIt 中,通过加载特定的软件插件,将三维点云数据转换为一个可供避障和导航使用的三维 occupancy grid 地图(即 OctoMap)
- OctoMap:这是“实时3D模型”。它是一种高效的三维 occupancy grid 地图,采用八叉树 (Octree)数据结构。这种结构能紧凑地表达三维空间,并快速查询某个位置是否被障碍物占据,非常适用于复杂的、动态变化的环境
2.3.7 move_group和movelt的关系
MoveIt 是整套完整运动规划框架;move_group 是 MoveIt 框架里最核心的那一个节点。MoveIt 是整个大框架,move_group 是 MoveIt 中负责处理运动任务的核心后台节点。
- MoveIt 包含很多组件:规划插件、IK 插件、碰撞检测库、move_group 节点、MoveGroupInterface客户端库、rviz 插件等。
- move_group 节点:整合上面所有组件,对外暴露 Action/Service接口,接收客户端请求,内部调用规划器、IK、碰撞检测算出轨迹,下发给机器人控制器。
2.3.8 ros里面的朝向
ROS通常采用右手坐标系。对于机器人机体坐标系,常见约定是:
+X:向前
+Y:向左
+Z:向上
三 碰撞检测
碰撞检测不是只在路径规划之前执行一次,而是贯穿规划过程:规划前:检查起点和目标点是否已经碰撞,确认目标是否有效。RRTConnect规划中:每生成一个候选关节状态和连接线段,都要通过碰撞检测。发生碰撞的节点或路径会被丢弃。规划后:对完整轨迹再次检查,确保时间参数化后仍然没有碰撞。
目标输入
↓
建立 PlanningScene 和碰撞模型
↓
IK 求解 / 生成关节空间目标
↓
RRTConnect 路径规划
↓
规划过程中持续碰撞检测
↓
时间参数化(TOTG)
↓
最终轨迹碰撞复核
3.1碰撞检查靠什么来判断
在判断碰撞之前,系统必须先把“物理世界”和“机器人自身”数字化。这对应提到的前三个要素:
- URDF/SRDF 机器人模型:URDF描述了机器人的物理组成:有哪些关节、连杆,连杆的几何形状(长方体、圆柱体、网格)以及它们之间的运动学关系。SRDF 是 URDF 的补充,定义了机器人的碰撞检测“禁用对”(比如,左轮和右轮永远不可能接触,无需检查它们之间的碰撞,节省算力)。
- PlanningScene(规划场景):这是 MoveIt2维护的一个实时更新的“数字孪生”世界。它包含了机器人自身、静态障碍物(墙壁、桌子)、动态障碍物(其他移动的物体)以及地面。
- AllowedCollisionMatrix(允许碰撞矩阵,ACM):这是一个“豁免名单”。即使两个物体在数学上发生了重叠,如果它们在ACM 中被标记为允许碰撞,检查器也会放行。这通常用于处理机器人抓取物体时,手指与物体必然接触的情况,避免规划失败。
3.2 核心执行者:碰撞检查由谁来完成?(执行机制)
CollisionPlugin(碰撞插件):MoveIt2 本身不写死碰撞算法,而是通过插件接口调用最专业的计算库,通常是 FCL(Flexible Collision Library) 或 Bullet。这些库使用高效的算法(如分离轴定理或 GJK 算法)来计算机器人连杆与障碍物之间是否存在穿透(Penetration) 或 距离(Distance)。如果距离小于 0,即判定为碰撞;如果距离大于一个预设的安全阈值(如 0.01 米),即判定为安全。
四、结构光相机集成到机械臂
结构光相机集成流程:
- 将相机固定在机械臂末端,并连接供电和网络。
- 配置相机、本机与机械臂在同一网络,确认能够访问相机 IP。
- 安装相机 Linux SDK 和 ROS 驱动,发布深度图与三维点云话题。
- 在 RViz 中检查点云是否有效,确认 XYZ、距离和刷新频率正常。
- 建立“机械臂末端→相机”TF 坐标关系。
- 完成手眼标定,用真实标定结果替换临时 TF。
- 将点云接入 MoveIt OctoMap,验证环境显示、避障规划及低速真实运动。
MV-DPS200P-02 → Linux MV3D SDK → ROS2驱动节点,去找技术售后,找到相应的SDK开发包(SDK_Mv3dRgbd_Linux_V1.4.1.4_250902),里面包含了ROS相应的开发包,因为相机是没有和机械臂 直联的,我们可以基于这个进行ROS直采
更多推荐
所有评论(0)