软件集成ROS2(支持离线示教机械臂)逻辑记录

一、整体架构总览

三层结构:Qt 前端(交互层) → rosbridge(通信中转) → ROS2 后台(运算控制层)(我用的是windows的wsl2)

全程数据流:拖拽生成目标位姿 → 网络转发 → 逆运动学 + 路径规划 + 避障 → 结果回传前端展示

二、各模块详细职责

  1. Qt 前端(运行在 Windows,用户操作界面)
    核心工作:人机交互加载 3D 仿真场景、机械臂模型,支持鼠标拖拽机械臂末端做离线示教。生成并发送指令数据,拖拽后实时算出末端空间位姿(坐标 + 姿态),封装为 PoseStamped 消息,通过 WebSocket 发给 rosbridge,对应话题:/bp/teach_target_pose。
    接收后端数据 + 界面展示:接收 /bp/preview_joint_states:解析 6 轴关节角度,界面展示IK 解算结果、实时驱动 3D 机械臂模型姿态变化;
    接收 /bp/planned_trajectory:解析运动轨迹,界面标记规划路径、统计轨迹接收次数;区分系统原生关节状态和 IK 预览数据,做状态提示。
    简单概括:只做 "操作 + 发请求 + 显结果",不做任何复杂计算。
  2. rosbridge(通信中间层,跑在 ROS2 服务器 192.16.10.238)
    核心工作
    Windows Qt 无法直接使用 ROS2 原生 DDS 通信,它是协议 & 数据格式转换器:
    一侧对接 Qt:使用 WebSocket 协议(端口 9090),接收 Qt 传来的 JSON 格式数据;
    格式转换:把 JSON 转为 ROS2 标准消息,通过 ROS2 DDS 发布对应话题;
    反向转发:把 ROS2 后端输出的话题数据,转回 JSON,通过 WebSocket 回传给 Qt。
    简单概括,纯 "传话翻译",不参与计算、不处理业务逻辑。
  3. ROS2 后台(核心运算层,跑在 Ubuntu 22.04 + ROS2 Humble)由自定义业务节点 + MoveIt2 组合而成,整条链路的计算核心:订阅话题:监听/bp/teach_target_pose,拿到前端发来的机械臂末端目标位姿。逆运动学 IK 解算:根据末端位姿,反推机械臂每个关节的角度。碰撞检测 + 路径规划 + 避障,结合场景里的设备外壳、摇臂、转台等障碍物,用 MoveIt2 算法算出整条安全运动轨迹。发布结果话题,发布 /bp/preview_jo:int_states:IK 算出的关节角度,供前端预览姿态;发布 /bp/planned_trajectory:完整运动轨迹数据,供前端展示路径。简单概括:接收请求、做 IK 解算、避障、路径规划,把计算结果发回前端。

三、正常完整数据流(闭环)

用户拖拽 Qt 里的机械臂末端 → 前端生成目标位姿 → 发 /bp/teach_target_pose

rosbridge 转协议 + 格式 → ROS2 后台收到位姿数据,后台执行:IK 解算 → 碰撞 / 避障检测 → 路径规划后台主动发布两个结果话题:

/bp/preview_joint_states(关节角)

/bp/planned_trajectory(运动轨迹)

rosbridge 再次转译数据 → 回传给 Qt 前端,前端解析数据,更新 3D 模型、界面状态、计数,流程走完。