鹤啸九天 自律更自由,平凡不平庸 Less is More

机器人控制

2025-05-04
鹤啸九天
阅读量

Notes(温馨提示):

  1. ★ 首次阅读建议浏览:导航指南, 或划到本页末尾, 或直接点击跳转, 查看全站导航图
  2. 右上角工具条搜索文章,右下角二维码关注微信公众号(鹤啸九天),底栏分享、赞赏、评论
  3. ★ 转载请注明文章来源,知识点积累起来不容易,水滴石穿,绳锯木断,谢谢理解
  4. ★ 如有疑问,邮件讨论,欢迎贡献优质资料


机器人控制

资料

站内专题

机器人操控

多种方案

  • YOLO 目标识别➕深度测距➕RGB点云渲染系统
  • VLA 视觉理解
  • WMA 世界模型决策

相机引导机械臂修正位姿,分为两大类:

  • 2D/3D 眼在手上(Eye-in-Hand)相机装在机械臂末端,随臂运动。
    • IBVS(图像视觉伺服):直接用像素误差闭环,不用标定精准 3D;
    • PBVS(位置视觉伺服):视觉算出目标 3D 坐标,交给运动规划。
  • 眼在手外(Eye-to-Hand)
    • 相机固定桌面 / 吊顶,全局观测机械臂。
    • 配套视觉算法:手眼标定(Tsai、AX=XB 求解)、深度检测、AprilTag/ArUco 标记定位、YOLO 物体检测 + 点云分割抓取

YOLO

YOLO 目标识别➕深度测距➕RGB点云渲染系统,示例

比如,基于 Intel RealSense D435i 双目深度摄像头 + YOLO 深度学习目标检测 + ROS2 数据通信 + PyQt 可视化界面 的智能视觉感知系统。

  • 系统能够实时采集 D435i 的 RGB 图像深度图像点云数据
  • 并通过 YOLO 模型完成目标识别,同时计算目标的像素坐标、中心点深度信息,实现目标检测深度测距三维感知可视化展示。

技术实现

  1. 系统使用 Python 语言开发,基于 PyQt/Qt 可视化框架 设计图形化操作界面,界面简洁直观,可根据需求进行二次开发和UI定制。
  2. 系统结合 ROS2 + Intel RealSense D435i 实现深度相机数据采集,支持订阅 RGB 图像、深度图像和点云相关话题,可实时获取环境中的视觉信息与深度信息。
  3. 目标识别部分采用 YOLO 系列深度学习目标检测算法,基于 PyTorch / Ultralytics 框架 实现模型加载与实时推理,可支持 YOLOv5、YOLOv8、YOLOv11 等不同版本模型,也可以替换为自定义训练模型,可根据需求进行二次开发。
  4. 系统支持加载不同的 .pt 推理模型,可以针对不同场景进行模型替换,例如行人检测、机械零件识别、工业缺陷检测、机器人抓取目标识别、桌面物体识别等,可根据需求进行二次开发。
  5. 左侧控制面板支持模型加载、置信度 Conf 调节、IOU 阈值调节、状态信息显示、模型类别信息显示等功能,方便用户实时调整检测效果。
  6. 中间主画面显示 YOLO 实时检测结果,能够展示目标类别、置信度、检测框、目标中心点、像素坐标以及对应的深度距离信息。

系统展示内容:

  1. 左侧为参数控制区域
    • 加载 YOLO 模型
    • 调节置信度 Conf
    • 调节交并比 IOU
    • 显示 FPS
    • 显示检测目标数量
    • 显示当前模型路径和类别信息
  2. 中间为 YOLO 检测结果区域
    • 实时显示 RGB 图像
    • 显示检测框
    • 显示目标类别
    • 显示置信度
    • 显示目标像素坐标
    • 显示目标深度距离
  3. 右侧为深度图/点云渲染区域
    • 显示 D435i 深度图像
    • 使用 JET 色彩映射进行可视化
    • 近处、远处目标颜色区分明显
    • 支持显示深度范围和图像分辨率

宇树机器人控制 OpenClaw-Robotics

OpenClaw-Robotics

npx skills add LooperRobotics/OpenClaw-Robotics

机械臂

NERO 机械臂

NERO 是松灵机器人在具身智能赛道上的重磅新品,一款专为科研、人形机器人开发及复杂任务场景打造的高自由度、高灵活性仿生臂。

这款机械臂采用仿人七轴冗余构型,精准复刻人类手臂的7个自由度(肩3、肘1、腕3),不仅在结构上高度仿生,更在运动学层面实现了类人的冗余解空间。

NERO自重仅4.8kg,末端负载达3kg,可稳定搭载RGB-D相机、灵巧手、力传感器等典型具身科研载荷。它原生支持CAN、TCP、HTTP通信协议,提供完整Python SDK,全面兼容ROS1与ROS2,无缝对接主流AI框架

自然语言操控

skill

A1X SDK

A1X SDK 是基于 Python 的机械臂控制接口,专为 A1X 型机械手设计。

该 SDK 为 ROS 2 控制器提供易于使用的 Python 封装,并附带多个端到端任务的综合示例,包括视觉目标抓取、手眼标定和直接运动控制。

4个 skill

  • a1x-arm-codegen:生成 Galaxea A1X 机械臂可执行代码
  • A1X 智能抓取技能(a1x-grab-skill)
  • a1x-realsense-vision 当用户询问看到什么、能看到什么、需要观察/分析当前摄像头画面时触发,通过 RealSense D405 相机实时拍摄,调用 qwen3.5-plus 云端 VLM 进行视觉分析
  • a1x-tts 将文本转为语音并播放,支持多种声音和 HD 模型。可独立使用,也可被其他技能调用实现机器人语音播报

当用户明确提出物体抓取任务时触发(如”帮我抓桌上的黄色物体”),采用 Code-as-Policies 方法:先视觉识别场景,再由 LLM 生成高层逻辑代码调用原语函数执行抓取

基于 Code as Policies 架构,将用户的自然语言抓取请求转化为可执行的机器人操作:

  • 视觉层:RealSense D405 + qwen3.5-plus 云端大模型识别场景物体
  • 规划层:LLM 根据场景描述和用户意图生成 Python 调度代码
  • 执行层:SAM3 分割 + 完整抓取流水线(深度计算 → 坐标变换 → IK → 运动)

AgileX skill 操控

① OpenClawPi AgileX

OpenClawPi 是模块化技能集合仓库,聚焦机器人核心功能的快速集成与复用,覆盖机械臂控制、抓取、视觉感知、语音交互等关键场景,为机器人的二次开发和应用落地提供开箱即用的技能组件。

AgileX Robotics 技能集合库

② pyAgxArm

2026-3-4 让小龙虾帮我控制七轴臂 openclaw 操控机械臂,含演示视频

pyAgxArm 是 AgileX 机械臂与末端执行器的 Python SDK,支持 CAN 通信、状态读取、运动控制,以及 Piper、Nero、AgxGripper、Revo2 等设备的接口调用。

pyAgxArm 是 AgileX Robotics提供的官方Python SDK,专门用于控制其系列机械臂(包括NERO和Piper等)。

该SDK提供了完整的控制接口:

  • 连接与配置:通过函数创建配置字典,指定机械臂型号、通信方式、通道等参数,然后使用AgxArmFactory创建机械臂实例并连接。
  • 运动模式:支持多种运动模式,每种模式对应不同的控制接口:
  • 关节位置速度模式(robot.MOTION_MODE.J)
  • 关节快速响应模式(robot.MOTION_MODE.JS)
  • 点到点模式(robot.MOTION_MODE.P)
  • 直线模式(robot.MOTION_MODE.L)
  • 圆弧模式(robot.MOTION_MODE.C)
  • 单位系统:关节角度使用弧度制,笛卡尔位姿的位置使用米制,姿态使用弧度制。

整个控制流程遵循严格的安全协议和操作顺序:

  • 连接建立:首先通过CAN总线建立与机械臂的物理连接。
  • 模式切换:机械臂必须在使能前切换到正常模式,模式切换前后都需要1秒的延迟。
  • 使能操作:CRITICAL原则——机械臂在切换模式前必须处于使能状态。如果机械臂处于失能状态,无法切换模式。
  • 运动执行:所有运动命令都必须在正常模式下使用。
  • 运动完成检测:通过检查motion_status来判断运动是否完成。
  • 安全措施:每次机械臂操作后添加小延迟(0.01秒),运动完成等待使用较短超时(2-3秒)。

实现 openclaw 指令与设备执行的全流程联动,大幅降低机械臂操控门槛。

核心功能:

  • 根据用户自然语言描述,引导OpenClaw生成可执行的pyAgxArm控制代码(Python脚本)。

技能文件定义了何时触发该技能——当用户说“写代码控制机械臂”、“根据我的描述生成控制脚本”或“让机械臂按顺序执行多个动作”时,OpenClaw便会启动代码生成流程。

skill目录创建 agx_arm_codegen 目录,然后创建使用下面的skill文件

当用户向 OpenClaw 描述机械臂动作时,如“帮我把东西从左边移到右边”,OpenClaw会:

  • 解析自然语言指令,理解用户的意图
  • 结合pyagxarm-api.md中的API参考和代码模板
  • 生成完整的、可运行的Python控制脚本
  • 提醒用户需要在已安装pyAgxArm和python-can的环境中运行,且CAN需已激活、机械臂已上电
  • 强调安全注意事项:执行前确认工作区域内无人员和障碍物;建议先小幅度、低速度测试

生成的代码包含了连接配置、使能流程、运动命令序列以及安全检测逻辑,用户只需在准备好的环境中运行即可。

Claw Arm

2026-4-7 从零开始让AI接管你的机械臂(so-100+skills+openclaw/claude code)

Claw Arm 是让机械臂”变聪明”的开源项目。

  • 用户说:”抓起那个红色的方块”
  • 机器人做:识别方块 -> 计算位置 -> 精准抓取 -> 完成

不需要机器人专业背景,只需要 Python 基础。

自然语言控制

/nature_arm 跳个舞
/nature_arm 抓取红色物体
/nature_arm 把方块放到左边

结合 Claude Code / OpenClaw,用自然语言控制机械臂

摄像头画面
    |
    v
颜色/物体检测
    |
    v
坐标转换 (像素->世界)
    |
    v
机械臂运动
    |
    v
精准抓取

安装

# 1. 克隆项目
git clone https://github.com/Linmoqian/claw_arm.git
cd claw_arm

# 2. 一键配置环境
conda env create -f environment.yml
conda activate claw_arm

# 3. 测试硬件连接
python script/1.3test_motors.py  # 电机测试
python CV/1_camera_test.py       # 摄像头测试

# 4. 运行第一个示例
python examples/basic/hello_arm.py

AlohaMini

具身智能的真机实验就必须动辄几十万么?

探索未来的工具,本不该高不可攀, 推动具身智能向前的,不只是少数实验室里的昂贵设备,更在于让每一位开发者、每一个课题组都能买得起、用得上、跑得通算法。

【2025-11-23】AlohaMini 机器人正式发布, 全开源,可量产

AlohaMini 是一款支持电动升降臂的双臂移动机器人。设计精美、可完全3D打印且成本亲民,专为具身智能研究与真实世界场景操作而打造,组装大约60分钟即可完成,并能通过LeRobot系统进行训练与部署。

  • 💰 极具性价比:整机12999起!打破真机采购高门槛。
  • 🌐 100% 全栈开源:CAD、BOM 清单、LeRobot 算法代码全开源,拒绝黑盒。
  • 🏭 可稳定量产:已实现标准化组装,到手即用,告别手工攒机的不稳定。
  • 🦾 全能硬件形态:6+1 自由度双臂 + 电动升降主轴 + 全向移动底盘,完美适配 ACT / SmolVLA / GR00T 等主流端到端算法。

理论

方向表示

如何描述空间坐标或者空间物体的方向(姿态,rotations)?

  • 四元数: 4个有一定相关性(a^2 + b^2 + c^2 + d^2 = 1)的数来描述空间旋转
  • 欧拉角: 通过3个独立的参数来描述空间的旋转
  • 旋转矩阵: 通过3x3矩阵来描述空间旋转。每一行,每一列都有特殊的含义。现在假设Oxyz是原始坐标系,Ox’y’z’是旋转过后的坐标系。

总结

  • 欧拉角:给人看、手动调参;不能用来连续动力学计算
  • 四元数:算法内部姿态存储、平滑插值、姿态解算(工业首选)
  • 旋转矩阵:底层几何运算、批量点变换、渲染输出媒介
对比维度 旋转矩阵(DCM) 欧拉角(Euler Angles) 单位四元数(Unit Quaternion)
主要优点 ① 数学底层标准,理论推导方便
② 无奇点,全局有效
③ 批量点变换、渲染管线最优
① 参数最少,存储最小
② 人机交互首选,UI 调参直观
③ 调试友好,易理解、易表达
① 无万向锁,全姿态连续
② SLERP 插值平滑,动画/动捕标配
③ 合成效率高,数值维护简单
④ 机器人/无人机/SLAM 工业首选
主要缺点 ① 存储冗余、占内存
② 无法平滑插值
③ 需定期正交化
④ 难以直接提取旋转轴角
万向节死锁(致命硬伤)
② 插值效果差
③ 不适合连续动力学积分
④ 旋转顺序易踩坑,工程 bug 多
① 人类不直观,难调试
② 存在 q/-q 对偶歧义
③ 批量顶点旋转不如矩阵高效
典型应用场景 渲染管线、GPU 顶点变换、相机投影、坐标系变换 UI 编辑器、人工调参、姿态显示(仅给人看) 游戏动画、动捕、无人机飞控、IMU 姿态解算、SLAM 后端优化
参数形式 3×3 正交矩阵,9 个浮点数 3 个角度(α, β, γ),3 个浮点数 四维向量 [w,x,y,z],4 个浮点数
自由度 / 冗余 自由度 3,存储高度冗余(6 个约束) 自由度 3,无冗余 自由度 3,单位模长约束 + q 与 -q 对偶冗余
奇异性 / 万向锁 无任何奇点,全局有效 存在万向节死锁(中间角 ±90° 时丢失一个自由度) 无奇点,SO(3) 全局光滑覆盖
直观可读性 极差,无法直接看出旋转轴与角度 极好,人可直接理解 roll/pitch/yaw,便于调参 极差,纯数值,人类无法直接解读姿态
姿态插值 不能直接线性插值,会丧失正交性,无简单平滑方案 线性插值路径畸变、抖动、容易翻转 SLERP 球面线性插值,过渡平滑、角速度均匀
旋转合成(多次旋转叠加) 矩阵乘法,约 45 次浮点运算 需反复转矩阵 + 三角函数,开销最大 四元数乘法,约 28 次浮点运算,效率最高
向量 / 点云旋转 直接矩阵乘向量,批量顶点变换最优,GPU 原生支持 不能直接旋转向量,必须先转为矩阵 单点旋转 qvq*,开销高于矩阵;批量场景建议先转矩阵
数值稳定性 / 漂移修正 多次运算后失去正交性,需定期正交化修正(成本高) 奇点附近角度跳变、不连续,难以修正 仅需归一化,维护成本极低
歧义性 一一对应,无歧义 同一姿态对应多组角度(多解) q 与 -q 表示同一旋转(二重覆盖)
微分 / 姿态积分 支持,但推导繁琐 奇点附近不可积分,惯性导航禁用 非常适合角速度积分,INS/SLAM 工业标准

欧拉角

欧拉角用于表示刚体当前的姿态。

思想:

  • 将刚体绕某一轴的一次旋转,分解为依次分别绕X、Y、Z轴的三次旋转。
  • 这三个轴分别旋转的转动角度,就是一组三个欧拉角。

三次旋转(而其实可以绕某一轴,一次旋转即可达到最终位置)

两组坐标系,我们定义为:

  • xyz:世界坐标系(固定不动)
  • XYZ :刚体坐标系(与刚体同步运动)

万向节死锁(Gimbal Lock)

万向节死锁发生在欧拉角形式下,是由欧拉旋转定义本身造成的。

平衡环架(英语:Gimbal)是一具有枢纽的装置,作用是使得一物体能以单一轴旋转。由彼此垂直的枢纽轴所组成的一组三只平衡环架,则可使架在最内的环架的物体维持旋转轴不变,而应用在船上的陀螺仪、罗盘、饮料杯架等用途上,而不受船体因波浪上下震动、船身转向的影响。

陀螺仪分别绕X、Y、Z三个轴旋转时的旋转角。这里直接等同于欧拉角, 陀螺仪用来测量平衡和转速,在载体高速转动的时候,陀螺仪始终要通过自我调节,使得转子保持原有的平衡。

万向节死锁

四元数

四元数是一种扩展复数概念的数学结构

由爱尔兰数学家哈密顿于1843年提出,是复数在三维空间的自然推广。

核心价值

  • 通过“实部+三维虚部”的结构描述旋转,完美规避欧拉角的轴序依赖与奇异问题(如万向锁),成为机器人学、计算机图形学等领域描述三维姿态的核心工具。

通常表示为 q=w+xi+yj+zk, 标准形式由1个实部和3个虚部组成,完整表达三维旋转的“角度”与“轴方向”信息:

  • w 为标量部分
  • x, y, z 为向量部分,对应虚数单位 i, j, k。

机器人学中,四元数被广泛用于三维姿态表示,相比欧拉角旋转矩阵,能避免万向节死锁、计算高效且插值平滑。

核心优势包括:

  • 无万向锁:欧拉角在俯仰 ±90° 时会丢失自由度,四元数无此问题。
  • 高效旋转叠加:通过四元数乘法即可实现姿态组合。
  • 平滑插值:球面线性插值(Slerp)可实现自然过渡。
  • 紧凑表示:仅需 4 个参数且满足单位化约束。

特点: 数值上更稳定,适合连续姿态插值。

机器人系统的位姿描述中,四元数是ROS、SLAM、IMU解算等系统默认使用的姿态表示方式

为什么用四元数表示机器人姿态?

  • 欧拉角在特定角度(如俯仰角 ±90°)时会丢失一个自由度,而四元数无此问题。

不同表示形式的转换

  • 四元数 → 旋转矩阵:便于在运动学中与齐次变换矩阵结合。
  • 四元数 → 欧拉角:方便与人类可读的姿态角度交互。
  • 旋转矩阵 / 欧拉角 → 四元数:用于传感器数据融合(如 IMU)。

机器人学应用场景

  • ROS / SLAM:作为标准姿态表示,减少数值漂移。
  • 机械臂控制:末端执行器姿态规划与插值。
  • 无人机与航天器:姿态解算与控制,确保飞行稳定性。

四元数在机器人学中不仅是数学工具,更是高精度姿态控制与路径规划的核心。在实际工程中,结合 IMU 数据与四元数滤波(如 Madgwick、Mahony 算法)可显著提升姿态估计精度。

URDF

URDF(Unified Robot Description Format)通用机器人说明书,本质是XML文本文件,告诉仿真器三件事:

  • 机器人有什么零件(连杆/Link)
  • 零件之间怎么连接(关节/Joint)
  • 每个零件长什么样、有多重

正向运动 FK

正向运动学 FK

  • 已知各关节角度,计算机械臂末端 TCP(工具中心点)空间坐标、姿态。
  • 主流解法:D-H 参数法(标准 MDH/SDH),绝大多数 6 轴机械臂通用
  • 进阶:改进 D-H、PoE(旋量理论),适合 7 轴冗余机械臂、人形手臂
  • 软件实现:符号推导(Mathematica)、数值矩阵乘算(C++ 实时跑)

解析逆运动 IK

逆向运动学 IK

  • 给定末端目标位姿,求解全部可行关节角度,操控最核心难点。

指定位置 让机械臂到达目的位置

四类IK算法路线 | 算法 | 原理 | 适用 | 优缺点 | |—-|—-|—-|—-| | 解析法 | 几何直接解方程,闭式解 | 6轴常规机械臂(PUMA、UR、串联6轴) | 速度极快、多解枚举;结构一变就要重推公式 | | 数值迭代IK | 牛顿-拉夫逊、高斯牛顿 | 7轴冗余、非标机械臂 | 通用,不用手推公式;迭代慢,容易局部最优 | | 雅可比伪逆 | 雅可比矩阵求逆,微小步迭代 | 实时轨迹跟随、冗余机械臂零空间优化 | 适合连续轨迹;奇异点会震荡 | | 深度学习IK | 神经网络拟合角度 | 超多自由度复杂臂 | 推理快;训练依赖数据集,精度不稳定 |

配套:IK解筛选算法——根据当前关节角度选最顺滑、关节转动最小的一组解。

运动轨迹规划

(让机械臂动得顺滑不抖动)

控制关节/末端从A点平稳走到B点,分为关节空间规划笛卡尔空间规划两大类。

关节空间轨迹(最常用,无奇异风险)

对每个关节单独规划角度随时间变化,各轴同步启停。

  1. 梯形速度曲线(Trap):匀加速→匀速→匀减速,简单高效,工业标配;加加速度突变,高速有震动
  2. S曲线加减速(S-Curve / Jerk限制):限制加加速度Jerk,全程加速度平滑,高速打磨、雕刻必备;7段S曲线行业主流
  3. 多项式插值:3次、5次、7次多项式。5次多项式(位置/速度/加速度起点终点全为0),启停无冲击,桌面机械臂首选。

避障

(1)奇异点规避算法

机械臂腕部伸直/收拢时雅可比行列式为0,速度失控。

方案:雅可比阻尼最小二乘DLS、关节限位软约束、规划路径绕开奇异构型。

避障与全局运动规划算法(自主操控必备)

解决:环境有障碍物,需要绕开障碍物到达目标。

  1. 基于采样的规划(最通用)
    • RRT、RRT*:快速随机扩展树,适合高自由度机械臂,狭窄通道好用
    • Informed RRT*:带启发域,收敛更快;MoveIt默认首选
  2. 基于优化的规划 CHOMP、STOMP:直接优化轨迹平滑度+碰撞代价,适合近距离小幅避障

  3. 碰撞检测算法(规划必带)
    • 包围盒:AABB、OBB快速粗检
    • 精确碰撞:GJK算法(距离快速计算)、FCL库(ROS标配碰撞检测)

软件:FCL、Bullet、V-Clip

求解方法

机械臂解析逆运动学(Analytical IK)主流解法

  • 前提:只有满足特定几何构型的串联机械臂,才能求出闭式解析解
  • 最经典:Pieper准则
  • Pieper条件:6R机械臂,三个相邻关节轴线交于一点(腕部交汇,绝大多数工业6轴机械臂满足:UR、遨博、KUKA、ABB)。
  • 不满足Pieper条件的通用6R无解析解,只能用数值IK。

解析IK通用分支特性

  • 1. 6R Pieper构型:最多 8组解析解(8个IK分支)
  • 2. 7R:无穷解集,离散分支取决于冗余约束方式
  • 3. 每个解都需要FK校验(FK closure)剔除无效解、奇异解

解析IK vs 数值IK(快速区分)

  • 解析IK:直接公式算出角度,速度极快;存在解/无解明确;只适配特定构型
  • 数值IK:迭代寻优(牛顿法等);任何机械臂通用;速度慢;容易陷入局部解
6R机械臂

(1)6R机械臂(Pieper构型,腕交汇)主流解析方法

腕部分离法(最通用、工业标准),也叫位置姿态解耦法 机械臂拆分为:手臂(前3关节) + 球形腕部(后3关节交于腕原点)

  • 1. 由目标TCP位姿算出腕中心坐标
  • 2. 前3轴:求解腕中心位置(位置IK)
  • 3. 后3轴:已知腕中心,求解末端姿态(姿态IK) 分析
  • ✅ 优点:逻辑清晰,容易实现,得到全部8组分支解
  • 适用:所有标准6轴协作/工业机械臂(UR系列等)

D-H 参数代数消元法

建立D-H齐次变换方程,不断代数消元,推导出关节角度闭式方程。

分析

  • ✅ 理论通用;
  • ❌ 手工推导极其繁琐,不同构型需要重新推导方程。

几何图解法

利用空间几何关系(投影、三角函数、余弦定理)直接求解关节角。

适合结构简单机械臂,直观;复杂7R很难纯几何求解。

7R冗余机械臂

(2)7R冗余机械臂解析IK(7自由度)

7R不存在唯一解,有无穷多组解,解析方案分为两类:

① 固定冗余角解析法(工程最常用)

7R相比6R多1个冗余自由度。人为固定其中一个关节角度,7R退化为可解的6R,再套用6R解析IK。

  • 优点:复用成熟6R求解代码;可以人为避开奇异点
  • 缺点:丢失冗余自由度的避障/优化能力

② 零空间参数化解析解法

以冗余关节作为自由参数,推导出其余关节关于该参数的闭式表达式。

分析

  • 可连续遍历无穷多组IK分支;
  • 公式复杂,极少原生落地。

ROS 开发框架

ROS 是⽬前机器⼈相关开源社区最流⾏的项⽬之⼀,易⽤且完备的机器⼈开发框架、⽣态乃⾄社区,海量的机器⼈开源项⽬(涵盖感知、规划、控制、定位、SLAM和建图、可视化等⼏乎所有机器⼈领域)均使⽤ROS作为基础。

以⾃动驾驶汽⻋为代表的新的机器⼈应⽤场景,对于中间层和开发框架在实时性、可靠性、伸缩性、跨平台可移植等⽅⾯提出了⼤量新的需求

  • ROS 显然不能满⾜这些需求,ROS2因此产⽣,在经历了若⼲年的迭代后,ROS2项⽬⽬前已经相对完备和稳定。

ROS 1

ROS1项⽬给科研机器⼈Willow Garage PR2提供开发环境和相应的⼯具,让这套软件在更多的机器⼈上运⾏,ROS为机器⼈开发构建了应⽤层的抽象和通⽤的消息接⼝,最终在机器⼈社区中⼴为使⽤并发展为⽬前最流⾏的机器⼈软件⽣态体系之⼀。

然⽽,ROS1 研发初衷注定了该架构缺陷:

  • ⽆实时性(real-time)
  • 嵌⼊式设备不友好
  • 对于⽹络通信的重依赖(需要⼤带宽且稳定的⽹络连接)
  • 多⽤于学术应⽤
  • 超⾼的灵活性带来的不规范的编程模式
  • 原⽣的ROS仅⽀持单机器⼈

然⽽, ROS已在⼤量⼯业领域的应⽤,包括科研机器⼈、⼯业机器⼈、轮式机器⼈、⾃动驾驶汽⻋乃⾄航天⽆⼈驾驶设备,其原来的功能设计已经不能满⾜海量应⽤对于某些性能(如实时性、安全性、嵌⼊式移植等)的需求,ROS2即在这样的背景下被设计和开发。

ROS 2

ROS2 在设计之初就考虑了产品环境下挑战

ROS2采⽤(或者计划采⽤)以下策略以提升其在产品环境的适⽤度:

  • ⽀持多机器⼈
  • 对⼩型嵌⼊式设备和微控制器的⽀持
  • 实时系统:⽀持实时控制,包括进程间和机器间通信的实时性
  • ⽀持⾮理想⽹络环境:在低质量⾼延迟等⽹络环境下系统仍然能够⼯作
  • 对产品环境的⽀持的能力
  • 规范的编程模型以⽀持基于ROS的⼤规模⽬的构建、开发和部署

ROS1 核⼼: 基于master中⼼节点的匿名发布-订阅通信中间层

相⽐之下,ROS2 采⽤基于RTSP(Real-Time Publish-Subscribe) 协议的DDS作为中间层

DDS(Data-Distribution Service) ⽤于实时和嵌⼊式系统发布-订阅式通信的⼯业标准,这种点到点的通信模式类似于ROS1的中间层,但是DDS不需要像ROS1那样借由master节点来完成两个节点间通信,这使得系统更加容错和灵活,DDS 被⼴泛应⽤于关键系统中,包括战舰、⼤型基础设施(如⽔电站)、⾦融系统、空间系统、航空系统等场景,这些⽤例也证实了DDS的可靠性。

多个⼚商提供多种DDS实现,⼀般来说DDS的底层通信机制基于UDP协议或者共享内存机制(当然也有 ⼚商提供基于TCP的DDS实现),⽽ROS2⽀持多种DDS实现,⽤⼾可以根据实际情况选择DDS中间层, ⽬前来说ROS2 Foxy完整⽀持以下DDS中间层:

  • eProsima的Fast RTPS(当前ROS2版本默认的DDS实现)
  • RTI的Connext DDS
  • Eclipse Cyclone DDS

ROS2 引⼊了 Quality of Service, QoS(服务质量)的策略⽤于配置节点间通信,进⽽提升了ROS2适应于不同应⽤场景的灵活性。ROS1只⽀持基于TCP的通信,通过配置QoS,ROS2可以表现出TCP的可靠性,也可以表现出UDP那样的⾼实时性。

ROS2 ⼏乎每半年会发布新版本,对应的代号(类似与ROS1中的Kinetic, Melodic和Noetic等版本代号):

  • Crystal: 2018年12⽉
  • Dashing: 2019年5⽉底
  • Eloquent: 2019年11⽉
  • Foxy: 2020年6⽉
  • Galactic: 2021年5⽉

组件

关键组件

  • 节点 (Nodes):ROS2 应用中的基本执行单元,每个节点负责一个具体的功能,例如驱动一个传感器、控制一个电机或执行一个算法。 ROS2 的一个重要改进是允许在一个操作系统进程中运行多个节点,这提高了资源利用率和通信效率。
  • 话题 (Topics):ROS 中最常用的通信方式,采用发布/订阅模型。一个节点可以将消息发布到一个特定的话题上,而其他任意数量的节点可以订阅该话题以接收消息。 这种方式是单向、异步的,非常适合流式数据的传输,如传感器数据、摄像头图像等。
    • 得益于 DDS,ROS2 在话题通信中引入了 QoS (Quality of Service) 服务质量策略。开发者可以精细地配置通信的可靠性(如“尽力而为”或“可靠传输”)、持久性(新加入的订阅者是否能接收到历史消息)和历史记录深度等参数,以适应不同的应用场景,这是 ROS1 所不具备的。
  • 服务 (Services):实现双向的请求/响应通信。一个节点(服务端)提供一项具体服务,其他节点(客户端)可以向其发送请求并等待响应。与 ROS1 的同步阻塞式服务调用不同,ROS2 的服务调用是异步的,客户端在发送请求后不会被阻塞,可以在等待响应的同时执行其他任务,从而提高了系统的并发性能。
  • 动作 (Actions):处理需要长时间运行并提供持续反馈的任务,如导航到目标点或执行一个机械臂的复杂动作。动作机制整合了话题和服务的特点,它包含三个部分:
    • 目标 (Goal): 客户端向动作服务器发送一个任务目标。
    • 反馈 (Feedback): 服务器在执行任务期间,通过一个话题周期性地发布反馈信息。
    • 结果 (Result): 任务完成后,服务器通过一个服务将最终结果返回给客户端。

主流实现

1. UR5/UR6解析IK:腕解耦分支解法(大量Python开源实现) 2. KDL:数值IK为主,不自带解析解 3. TrajOpt、MoveIt:默认数值IK;想要解析解需要单独嵌入自研闭式公式

MoveIt

MoveIt 是 ROS1 中最成熟、应用最广泛的机械臂运动规划框架,为机器人提供从模型描述到运动执行的一整套解决方案。

MoveIt 主要解决:

  • 机械臂运动规划(Motion Planning)
  • 碰撞检测(Collision Checking)
  • 逆运动学(IK)
  • 轨迹生成与执行
  • RViz 可视化与交互

MoveIt! 以 move_group 为核心节点,集成了各种组件,用于 ROS 动作和服务。

插件机制

MoveIt! 通过插件机制(plugin interface)与运动规划器(motion planner)进行交互,可以使用多个库的不同运动规划器,使得 MoveIt! 扩展性更强!默认使用的运动规划器是 OMPL(Open Motion Planning Library) 库。

SSIK

ssik

适用于6自由度旋转机械臂(6R)与7自由度冗余旋转机械臂(7R)的解析逆运动学求解方案。

每款机械臂对应一个独立完整的Python模块,可输出逆运动学全部分支解;经过正运动学闭环校验,求解误差远低于普通机器人重复定位精度,必要时还能进一步优化至机器精度。

RL + ROS

【2026-5-14】机器人端到端RL(强化学习)训练与 ROS2 真机部署, 含流程图

端到端RL从代码到真机跑起来,完整链路四个字:训、验、导、部署

端到端RL落地的四字诀:

  • 训:Isaac Gym + PPO,仿真里反复练习
  • 验:Mujoco Sim2Sim,确认策略泛化
  • 导:.pt → ONNX → TensorRT,固化加速
  • 部:ONNX Runtime + ROS2 + CAN,真机运行

每个阶段都有成熟开源工具,路线清晰,门槛在奖励设计——设计不好奖励,RL永远学不会。

仿真里能走 ≠ 真机能走。Sim2Real是端到端RL落地的关键一步——先在仿真A里练,再到仿真B里验,通过才上真机。

结束


支付宝打赏 微信打赏

~ 海内存知已,天涯若比邻 ~

Share

Similar Posts

Related Posts

上一篇 AI+游戏

下一篇 VLA专题

标题:AI+游戏

摘要:RL/大模型在游戏中的应用

标题:VLA专题

摘要:端侧多模态应用场景:机械臂、具身机器人等

站内可视化导航

文章可视化导读:鼠标划过图形块时,如果出现蓝色光环, 点击即可跳转到对应主题

Comments

--disqus--

    My Moment ( 微信公众号 )
    欢迎关注鹤啸九天