提示:随着本人的学习加深会不断更新的


前言

本文参考一:机械臂运动规划算法主要分为三大类
传统方法: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 米),即判定为安全。

四、结构光相机集成到机械臂

结构光相机集成流程:

  1. 将相机固定在机械臂末端,并连接供电和网络。
  2. 配置相机、本机与机械臂在同一网络,确认能够访问相机 IP。
  3. 安装相机 Linux SDK 和 ROS 驱动,发布深度图与三维点云话题。
  4. 在 RViz 中检查点云是否有效,确认 XYZ、距离和刷新频率正常。
  5. 建立“机械臂末端→相机”TF 坐标关系。
  6. 完成手眼标定,用真实标定结果替换临时 TF。
  7. 将点云接入 MoveIt OctoMap,验证环境显示、避障规划及低速真实运动。

MV-DPS200P-02 → Linux MV3D SDK → ROS2驱动节点,去找技术售后,找到相应的SDK开发包(SDK_Mv3dRgbd_Linux_V1.4.1.4_250902),里面包含了ROS相应的开发包,因为相机是没有和机械臂 直联的,我们可以基于这个进行ROS直采

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐