Repository navigation
Releases
SerialArm-Core v0.6.2
SerialArm-Core v0.6.2
本次更新完善独立运行、机械臂接入、四用途增益标定与三维预览,集中修复准备检查、配置兼容和运行恢复中的问题
主要更新
1. 独立运行与机械臂接入
- SerialArm Studio、Terminal 和 Python 直接使用原生 Core,启动与日常使用无需宿主 ROS2 环境
- 默认发行包不再捆绑 ROS2 与 MoveIt 适配层,需要时按组件单独安装
- 完善 URDF、Xacro 和 Description 包导入、模型资源收集、Profile 创建与硬件配置引导
- 修复准备检查状态被关节限位覆盖、有效硬件配置被错误拒绝连接的问题
- 完善 Profile 迁移、配置恢复、关节映射与历史检查记录的有效性判断
2. 四用途控制与增益标定
- 统一刚性、柔性、拖拽和伺服跟踪四种增益用途,分别管理控制方式、增益用途与运动任务
- 增益标定沿示教轨迹联合测量全部关节,自动阶段按原始轨迹时长约 12 倍安排预算,例如 25 秒轨迹对应约 300 秒
- 根据实测结果小步调整增益,候选退化时回退已测参数,减少增益持续逼近配置上限的情况
- 修正静止采样、双向运动识别、反馈时序和拖拽衰减判断,减少编码量化与初始偏差引起的误判
- 已完成测量但未达参考指标时显示警告,允许应用、保存和导出合法增益;反馈、Safety 与参数有效性检查继续保留
- 自动采集、回放与标定统一使用居中预览卡,显示关节目标、角度差、阶段、进度与实测诊断;手动流程保留在原页面
- 支持保留已完成的测量结果,分别查看和采用各用途增益
3. 三维预览与图形兼容
- 提供正常 GPU 三维、兼容软件三维和无三维救援模式,兼容模式由用户主动选择
- 图形初始化或上下文故障在预览区域展示,提供诊断、重试与恢复入口,避免将渲染错误显示为机器人运动失败
- 图形诊断按渲染后端、WebGL2、显卡驱动、运行库和日志分组显示,支持导出
- 恢复预览时保留可恢复的视角、图层与选择,完善渲染资源释放和页面切换处理
- 修复模型滚轮缩放、关节滑条实时预览与青绿色目标虚影显示
- 控制工作台与动力学标定切换子页时保留三维预览,减少重复加载与静止重绘
兼容模式使用 Electron 自带的软件渲染后端,会增加 CPU 占用;启用软件 WebGL 回退需主动接受相应安全影响,Renderer 沙箱仍启用;切换图形后端后需结束会话并手动重启,原生控制周期不变
无三维救援模式保留配置、数值状态、记录与导出入口,依赖姿态预览确认的操作仍需恢复预览后完成
4. 工作台布局与运行恢复
- 固定页面标题与操作栏,控制及标定页面统一使用顶部机械臂状态卡
- 统一使能、停放并失能、立即失能、当前位置刚性保持、柔性恢复与清除故障入口,移除重复按钮
- 修复错误状态下断开按钮重复、名称变化与布局错位的问题,保持统一的断开工作台入口
- 调整控制参数和标定卡片的层级、展开状态与间距
- 修复停放、断连、示教中断与后台异常后的恢复和退出处理
5. 配置、导出与文档
- 新建、保存及导出统一使用四用途配置,兼容读取旧字段与旧 GUI 生成的 YAML 锚点
- 应用和导出历史候选时核对模型、映射、硬件与控制上下文,保留标定时的实测参数
- 完善反馈新鲜度、运动完成判定、重力校正与动力学辨识的数据和导出一致性
- 统一 SerialArm Studio 品牌名称,加入协会 Logo,整理中英文界面文案
- 整理中文 README,新增 README_en.md 与贡献说明
- 将公开文档收敛为安装、使用、开发、API 和标定参考,合并重复说明并更新链接
安装与启动
Linux 发行包面向 Ubuntu 22.04 x86_64,包含 Core、Terminal、模型工具、Python Binding、DM-Arm 支持和桌面工作台,无需安装 ROS2 或 MoveIt
下载发行附件后,可选择 deb 安装
sudo apt install ./SerialArm-Core-linux-amd64.deb也可以运行 AppImage,系统需提供 libfuse2 等运行库
chmod +x SerialArm-Core-linux-x86_64.AppImage
./SerialArm-Core-linux-x86_64.AppImage将两个发行包与 SHA256SUMS 放在同一目录后检查文件完整性
sha256sum -c SHA256SUMS源码安装继续使用统一入口,ROS2 与 MoveIt 按需选择
./install.sh
./launch.shSerialArm-Core v0.6.1
SerialArm-Core v0.6.1
本次更新重点完善 Linux 发行包、控制链路保护与桌面工作台的日常使用流程
新增 AppImage 与 deb 分发方式,修复故障反馈、命令超时和退出处理中的问题,并调整重复到位的轨迹录制与回放机制
主要更新
1. Linux 发行包
- 新增 AppImage 与 deb 发行包,集成桌面工作台、C++ Core、Python Binding、DM-Arm、ROS2 Adapter 与 MoveIt 配置
- 提供统一打包入口,检查源码、构建选项、安装产物与 GUI 依赖是否一致
- 增加安装与打包互斥,避免并发操作改写正在打包的文件
- 提供 SHA256 校验清单,运行记录与缓存不随发行包分发
- 发行包使用用户配置目录保存 Profile 参数与标定数据
2. 控制状态与故障处理
- 修复达妙电机的真实故障与失能反馈被当作正常状态的问题
- 修复 ROS2 重复发送旧命令导致命令超时保护失效的问题
- 完善故障保持期间的状态反馈与接口返回,避免继续报告成功或使用旧状态
- 修复 FAULT 状态下停用组件时,失能未完成却报告成功的问题
- 原生控制端拒绝安全退出时,桌面工作台保留连接并显示原因
3. 重复到位与轨迹管理
- 调整录制顺序,先在触点 B 对齐并开始录制,再拖拽撤离至安全点 A 后结束
- 自动循环从 A 沿轨迹倒放至 B,停留后沿原录制方向返回 A
- 支持轨迹保存、重新载入,以及执行前的 Profile、入口能力与起点对齐检查
- 支持循环中停止并保持,停在触点附近时可沿已录制路径撤离至安全点
重复到位流程不自动测量接触误差,也不提供自动碰撞检测
4. 离线任务与桌面工作台
- 支持选择 Profile 后直接扫描历史任务,无需连接机械臂
- 统一离线分析与成果导出的活动会话检查,避免耗时操作阻塞控制请求
- 修复发行包中 GUI 检查配置与 Terminal 实际加载配置不一致的问题
- 修复重新连接后遥测导出混入上一会话数据的问题
- 优化错误弹窗,提供更明确的错误原因与处理提示
- 完善 YAML 参数保存,保留原有布局、注释及无关配置,并检查保存期间的文件变化
安装与启动
Linux 发行包面向 Ubuntu 22.04 x86_64 与 ROS2 Humble,目标机器需先准备 ROS2、MoveIt 与 ros2_control 等系统依赖
下载发行附件后,可选择 deb 安装
sudo apt install ./SerialArm-Core-linux-amd64.deb也可以直接运行 AppImage
chmod +x SerialArm-Core-linux-x86_64.AppImage
./SerialArm-Core-linux-x86_64.AppImage将两个安装包与 SHA256SUMS 放在同一目录后,可检查文件完整性
sha256sum -c SHA256SUMS源码安装继续使用统一入口
./install.sh
./launch.sh升级说明
- 缺少来源记录或与当前源码不一致的旧安装,需要重新构建后才能用于打包
- 从安全点 A 向触点 B 录制的旧轨迹不能直接用于新的重复到位流程,需要按 B 到 A 的顺序重新录制
- 离线分析与成果导出前,需要安全断开工作台及其他活动运行会话
许可证
项目许可证由 MIT 调整为 GPL-3.0-only,自有组件的许可证声明同步更新
SerialArm-Core v0.6.0
SerialArm-Core v0.6.0
本次更新重点完善自研串联机械臂从模型导入、硬件配置、动力学标定到真机控制的完整工作流
SerialArm-Core 不再仅提供独立的控制与动力学接口,而是通过统一的机器人配置体系和桌面工作台,降低新机械臂的接入、调试与标定成本
主要更新
1. 新机械臂接入与配置
- 支持从 URDF、Xacro 或 Description 包创建机器人 Profile
- 新增 Profile Library,统一管理内置与外部机械臂配置
- 提供模型检查、硬件映射、控制参数配置与准备状态管理
- 根据配置及验证结果判断机械臂是否具备正常使用条件
- 优化模型预览与配置引导,减少手工修改配置文件的需求
2. 动力学标定与模型校正
- 完善重力模型校正工作流,支持拖拽示教、自动回放与数据采集
- 支持静态重力数据分析、摩擦验证与独立验证
- 提供校正前后模型对比、候选结果审核、保存及恢复
- 增强标定过程中的异常处理、状态检查与数据一致性验证
- 保留原始模型与配置,避免未经确认的候选结果直接覆盖正式参数
重力模型校正仅对经过辨识与验证的重力相关参数生效,不等同于完成全部惯性参数的精确辨识
3. 控制与示教功能
- 新增轨迹示教与回放功能
- 完善刚性、柔性控制参数的配置与验证流程
- 支持重力补偿效果验证及在线临时调节
- 优化控制状态、故障恢复与安全准入逻辑
4. 桌面工作台优化
- 重组专业工具与机器人配置工作流
- 优化模型查看器、参数布局和操作引导
- 统一 Profile 配置、模型检查、控制、标定与诊断入口
- 保持 GUI 与 Terminal 共用底层 Core 和真机控制能力
安装与启动
在 Linux 环境下执行
./install.sh
./launch.sh安装向导支持按需安装 C++ Core、Standalone、Python Binding、ROS2、MoveIt 及桌面 GUI
已有机器人项目可以继续通过外部 Profile 接入,无需将机器人专用配置合并到 SerialArm-Core 源码中
验证情况
- 已使用新接入的真实机械臂验证完整配置与使用流程
- 完成新机械臂模型导入、Profile 配置、真机连接及控制流程验证
- 动力学标定与模型校正功能已纳入统一工作流
实际标定效果和控制性能取决于机械臂结构、执行器反馈、动力学模型与实验数据质量,建议在新硬件上独立验证后再应用校正结果
当前支持范围
- C++17 Core 与动力学计算
- 关节阻抗、关节导纳及动力学前馈
- 机器人 Profile 与硬件抽象
- Python Binding
- ROS2 / ros2_control / MoveIt 2
- Linux 桌面工作台
当前主要面向 Linux 和 ROS2 Humble 环境,其他平台与执行器类型需单独验证
LeRobot、Isaac Sim 原生适配及通用任务空间控制不包含在本次发布范围内
SerialArm-Core v0.5.3
v0.5.3 — 统一安装入口与桌面工作台
新增交互式安装向导和桌面 GUI,集中管理组件安装、机器人配置检查与运行入口
新增
install.sh统一安装 Core、Terminal、Python Binding、ROS2、MoveIt、GUI 与测试组件- 提供 C++ 集成、独立调试、Python、ROS2 全栈、开发与自定义安装方案,自动补齐组件依赖
launch.sh启动桌面工作台,支持内置和外部 Robot Profile、连接参数覆盖与离线诊断- 集成 Model、Terminal、Hardware 与 MoveIt 运行入口
- 支持中英文、深浅色主题、偏好保存及运行前硬件确认
优化
- 整理仓库目录与文档
使用
./install.sh
./launch.sh已有 Core 安装时可单独补装 GUI
./install.sh --gui-only --yesGUI 需要 Linux 桌面环境、Node.js 20+ 和 npm,ROS2 方案主要面向 Ubuntu 22.04 + Humble,其他尚未测试
验证与已知限制
- 安装器、Launcher 后端与 Bridge 自动化测试通过,Electron 界面交互测试通过
- 真实 ROS2 全流程与硬件连接仍需现场验收
- 内置白色机械臂配置尚未接入真实夹爪反馈,可能出现
Missing gripper_left
SerialArm-Core v0.5.2
SerialArm-Core v0.5.2
v0.5.2 主要解决 ROS 2 Adapter 的下游可组合性问题;framework-neutral Core、Robot 控制语义和 SerialArmSystem 接口保持不变
主要变化
display.launch.py、hardware.launch.py、moveit.launch.py支持通过profile_file加载下游项目自己的 Robot Profile- ROS 2 launch 新增可选
resource_paths,并完整传递到 C++ Robot Profile resolver - ROS 2 Adapter 会根据 Profile 中引用的 ament package 自动补充 Core resolver 所需的 resource roots
- Python
load_robot_profile_core()完整暴露profile_file和resource_paths display.launch.py同时支持description.urdf和description.xacrocontrollers.spawn可以覆盖需要自动启动的 Controller;缺省时保持原有joint_state_broadcaster + joint_trajectory_controllermoveit.launch.py会把外部 Profile 参数和controller_manager_name继续透传给hardware.launch.py- 原有
dm_arm_gray、dm_arm_white启动方式保持兼容
下游机器人示例
profiles:
tomato_picker:
core:
package: tomato_picker_description
config: config/core/tomato_picker.yaml
hardware:
plugin: serial_arm_hardware_damiao
config_package: dm_arm_description
config: config/hardware.yaml
description:
package: tomato_picker_description
xacro: urdf/tomato_picker.urdf.xacro
ros2_control_xacro: urdf/tomato_picker.ros2_control.xacro
controllers:
package: tomato_picker_bringup
config: config/ros2_controllers.yaml
spawn:
- joint_state_broadcaster
- joint_trajectory_controller
moveit:
package: tomato_picker_moveit_configros2 launch serial_arm_ros2_control moveit.launch.py \
robot_profile:=tomato_picker \
profile_file:=/path/to/tomato_picker_bringup/config/robot_profiles.yaml下游项目负责持有实际机器人 Profile、动力学模型、Description 和 MoveIt 资源;SerialArm-Core 继续只负责通用 Core、硬件抽象和可复用 ROS 2 Adapter
SerialArm-Core v0.5.1
SerialArm-Core v0.5.1
v0.5.1 是一个以运行安全与分发可用性为核心的维护版本
本次更新重点解决两个问题:一是 RobotSession 在可恢复 FAULT 后可能提前结束 worker,导致 Python 会话生命周期无法继续;二是非 ROS 用户安装 Pinocchio 等依赖和使用 Standalone Core / Python Binding 的门槛过高
RobotSession Online FAULT Recovery
- 可恢复的
FAULT + fault_holding不再结束 C++ worker - worker 会持续调用
maintain_fault_hold(),保持安全反应在线 clear_fault()、enter_fault_compliant_recovery()、return_to_fault_rigid_hold()统一提交给同一个 worker 串行执行- 避免 Python 调用线程与控制线程同时修改 Robot 状态机
- 进入 FAULT 后自动废弃旧
move_to目标、旧阻抗模式请求和未应用的 gravity scale 请求 clear_fault()成功后固定从ACTIVE + RIGID_HOLD恢复- 不会自动继续故障前轨迹,也不会自动重新进入
COMPLIANT_DRAG - FAULT 期间拒绝新的运动请求
- worker 停止或
stop()遇到 FAULT 时使用force_deactivate(),避免留下无人维护的周期 hold
这使拖拽、手眼标定和其他需要长期保持 RobotSession 在线的流程可以在一次可恢复 FAULT 后继续工作,而不需要重启整个会话
Standalone Dependency Management
新增 Conan 2 Standalone 依赖路径
SerialArm-Core
↓
find_package(...)
↓
Conan 2 / CMakeDeps / CMakeToolchain
↓
Pinocchio + Eigen + yaml-cpp + GTest
Core CMake 仍保持 dependency-manager agnostic:
- 不 vendor Pinocchio
- 不使用 git submodule 管理 Pinocchio
- 不在默认 CMake 中通过 FetchContent 编译 Pinocchio
- ROS 2 用户继续使用
rosdep + apt - Standalone Linux 用户使用 Conan 2
Standalone Core Quick Start
python3 -m pip install --user "conan>=2,<3"
export PATH="$HOME/.local/bin:$PATH"
./tools/bootstrap_standalone.sh
source install/standalone/setup.bashbootstrap 会自动完成 Conan profile、依赖安装、Core configure/build、ctest 和 install
DM-Arm One-command Bootstrap
仓库内置 DM-Arm 用户可以直接执行
./tools/bootstrap_standalone.sh --robot dm_arm
source install/standalone/setup.bash
serial_arm_terminal --robot-profile dm_arm_gray该路径会继续安装:
- Damiao USB2CAN Protocol
- Damiao Hardware Backend
- Robot Profiles
- DM-Arm Description / Config / Model resources
并自动生成统一的 install/standalone/setup.bash
Standalone Python Wheel
修复 standalone wheel 在非 ROS 环境下的安装链:
_serial_arm在无 ament 环境下也会进入 wheellibserial_arm_core.so随 wheel 一起安装_serial_arm使用$ORIGINRPATH 查找随包安装的 Core shared library- 补充 Python package README,保证 PEP 621 metadata 路径有效
- standalone wheel 不要求 ROS 2 / ament
构建示例:
conan install . \
--output-folder=build/conan \
--build=missing \
-s build_type=Release
source "$PWD/build/conan/conanrun.sh"
export CMAKE_ARGS="-DCMAKE_TOOLCHAIN_FILE=$PWD/build/conan/conan_toolchain.cmake"
cd src/serial_arm/core/python
python3 -m pip install build
python3 -m build --wheel
python3 -m pip install --force-reinstall dist/serial_arm-*.whl
python3 -c "import serial_arm; print(serial_arm.__version__)"Regression Coverage
新增 / 强化以下回归测试:
serial_arm_robot_session_fault_recovery_contractserial_arm_robot_session_fault_recovery_runtime_testsserial_arm_standalone_dependency_contractserial_arm_bootstrap_standalone_cli
其中 RobotSession runtime test 使用故障注入 Hardware Plugin 在控制周期中制造一次可恢复 READ_FAILED,验证:
ACTIVE + tracking
↓
recoverable FAULT
↓
worker still running
↓
FAULT + RIGID_HOLD
↓
clear_fault()
↓
ACTIVE + RIGID_HOLD
↓
re-enter tracking without new goal
↓
old move_to target is not resumed
Compatibility
- Version:
0.5.1 - C++: C++17
- ROS 2: Humble path remains supported
- Standalone: Linux C++ / Python
- Existing Robot Profile and Hardware Backend interfaces remain unchanged
- v0.6.0 planned task-space capability is not included in this maintenance release
SerialArm-Core v0.5.0
SerialArm-Core v0.5.0
v0.5.0 聚焦机械臂交互控制能力,将外力估计、关节空间导纳控制、柔顺运行状态和交互运行时能力纳入 Core 层,同时完成控制链、配置体系和 ROS 2 Adapter 的统一
Interaction Capability
新增通用交互控制基础能力:
- External Torque Observer
- MOMENTUM 外力估计
- FULL_ID 外力估计
- Joint Admittance Controller
- Joint Interaction Runtime
整体控制链:
Joint State
↓
External Torque Observer
↓
Joint Admittance
↓
Reference Correction
↓
Joint Controller
↓
Safety
↓
Hardware Backend
外力估计与动力学前馈
支持两类独立能力:
Observer
用于估计外部作用力:
MOMENTUM- 基于广义动量观测
- 不显式依赖关节加速度
- 更适合真实硬件运行
FULL_ID- 基于完整逆动力学 residual
- 使用动力学模型计算理论力矩
- 适合模型准确且状态质量较高的场景
Model Feedforward
用于运动过程动力学补偿:
NONEGRAVITYFULL_INVERSE_DYNAMICS
Observer 与 Feedforward 属于不同控制链路:
- Observer 用于外力估计
- Feedforward 用于控制力矩补偿
Joint Admittance
新增固定关节空间导纳控制,支持:
- 虚拟质量 M
- 虚拟阻尼 D
- 虚拟刚度 K
- 最大位置修正限制
- 最大速度修正限制
调参遵循:
- K 决定稳态退让距离
- M 决定启动惯性
- D 决定响应平滑程度与阻尼比
Controller 与 Runtime
完善:
- RIGID_TRACKING
- COMPLIANT_TRACKING
- COMPLIANT_HOLD
- COMPLIANT_DRAG
- Interaction Runtime
统一:
- 控制模式切换
- 外力响应
- 安全检查
- 状态诊断
ROS 2 / MoveIt Adapter
完成:
- ros2_control 与 Core Interaction 能力接入
- Robot Profile 参数链同步
- Runtime 生命周期适配
- shutdown park 流程优化
测试与验证
完成:
- Core 构建验证
- Hardware Backend 验证
- Native Terminal 真机验证
- ros2_control 验证
- MoveIt 2 接入验证
- Interaction 真机调参验证
SerialArm-Core v0.4.0
SerialArm-Core v0.4.0
v0.4.0 将 v0.3.0 的 Shared CAN 扩展为统一的同进程 Shared Physical Bus 架构,目标是在机械臂与独立末端、附加轴或其他外设满足物理兼容条件时共享同一条 CAN 或串行总线,同时保持 Driver 解耦和物理资源唯一 ownership
Shared Physical Bus
BusRegistry成为 Core 内部唯一的 shared physical bus ownership 协调层,移除 legacyBusPool- Registry 使用
CREATING / READYreservation 保证并发 acquisition 只创建一次 physical bus,creator / open 在全局锁外执行,并支持失败后的 reservation 清理与重试 ownership_key用于识别真实物理资源,等价 tty alias 会归一到同一设备,CAN / Serial 不能重复占用同一个 physical tty- provider 必须通过
config_signature声明 provider identity 和物理兼容参数
CAN 与 Serial Consumer Contract
CAN Driver 不再持有 raw CanBus,统一通过 acquire_can_channel() 获取独立 CanChannel
Physical CanBus
↓
BusRegistry
↓
CanChannel
↓
Protocol / Driver
Serial Driver 通过 acquire_serial_bus_client() 获取 SerialBusClient,完整 request-response 在受限 SerialTransaction 中串行执行
Physical SerialPort
↓
internal SerialBus
↓
SerialBusClient
↓
SerialTransaction
↓
Protocol / Driver
不同 Serial Driver 可以使用独立 read / write timeout,Driver 无法直接 open / close shared SerialBus、修改持久串口配置或获取 raw fd
Damiao 与兼容性修复
- Damiao USB2CAN 接入迁移到统一 CAN acquisition contract
- 修复
/dev/serial/by-id/...与/dev/ttyACM*指向同一 USB2CAN 时的重复配置冲突 - 保留 v0.3.0 的 multi-
CanChannelfan-out、targeted receive、bounded queue 与 diagnostics 行为 - Runtime Override、Python、ros2_control 与 MoveIt 参数链继续兼容现有 Robot Profile
测试与设计边界
本版本已完成 clean build、Core / Transport / Damiao、Runtime Override、Python、ros2_control 与 Shared CAN / Shared Serial 回归测试
当前 Shared Bus 仍限定为同进程资源管理,不提供跨进程 broker;不同厂家或不同协议能否共线仍取决于 bitrate、地址 / CAN ID、framing、主动发送行为、电气层和总线负载等兼容条件;需要显式 RTS / TIOCSRS485 方向控制的 RS485、hot-plug / reconnect 和完整 Robot Component 框架留待后续版本
Full Changelog: v0.3.0...v0.4.0
SerialArm-Core v0.3.0
SerialArm-Core v0.3.0
v0.3.0 重点修复机械臂与末端扩展电机 / CAN 外设共享同一物理总线时的通信正确性问题,并补齐多 CanChannel 并发、Damiao targeted receive、运行时硬件参数覆盖及 ROS 2 / MoveIt 参数链验证
核心修复:末端扩展外设共享 CAN
本版本的主要修复目标是让机械臂本体与独立末端执行器、附加轴或其他 CAN 外设能够在同一进程中稳定共享同一条物理 CAN / USB2CAN 总线
典型结构:
Robot / DamiaoMotorBus
↓
ARM MotorControl
↓
ARM CanChannel ──────────┐
│
External actuator ├── BusPool ── DamiaoUsbCanBus ── physical CAN
↓ │
MotorControl │
↓ │
Tool CanChannel ─────────┘
主要修复包括:
- 修复多个逻辑
CanChannel共享同一物理总线时,一条通道接收后导致另一条通道丢失对应 CAN frame 的问题 - 物理 CAN frame 由
CanBus读取一次后 fan-out 到所有匹配 filter 的CanChannel CanChannel::flush()只清理本通道 pending queue,不再影响同一物理总线上的其他逻辑通道- TX 与 RX 使用独立同步机制,长时间 receive 不再阻塞其他通道发送
- 修复末端外设长时间等待响应时可能占用接收路径、影响机械臂通道正常接收的问题
BusPool::get_or_create()改为原子获取或创建,避免同进程并发初始化同名 bus 时产生重复物理 BusCanChannel增加有界 pending queue,队列达到上限时丢弃最旧帧并累计 diagnostics,避免共享高流量 CAN 时低频外设队列无限增长- 未知或不匹配的 CAN frame 不会进入其他无关 Channel
Damiao 多设备事务修复
针对机械臂电机和末端扩展达妙电机可能共享 master_id = 0 的场景,完善 MotorControl 的设备级匹配逻辑
- 支持多个设备共享
master_id = 0 - 普通 motor feedback 根据 payload 中的完整
slave ID匹配目标电机 - 参数读写响应根据
slave ID + RID + response type精确匹配 - 参数事务期间会跳过其他电机、其他 RID 和管理帧,不将其误解析为目标响应
- 参数事务只清理当前
MotorControl所属CanChannel的 pending queue,不清空 physical bus - 独立末端电机无需加入 Robot joint 列表,也不需要向
Robot/MotorBus增加 raw CAN 接口
这使机械臂本体和独立末端执行器可以各自持有 MotorControl + CanChannel,同时复用同一个 BusPool 中的 physical bus
Transport 测试补强
新增并完善共享 CAN Transport 测试,覆盖:
- 单 Channel 正常接收
- 一个 Channel 不会消费掉另一个 Channel 的匹配 frame
- 一个 Channel 的
flush()不会清除另一个 Channel 的 pending frame - 未知 frame 不进入无关 Channel
- 多 Channel 并发 TX / RX 不串扰
BusPool::get_or_create()并发原子性- 长 receive 不阻塞 send
- 末端外设长 receive 不独占机械臂接收路径
- 有界 Channel pending queue 与 dropped frame diagnostics
其他改进:Runtime Override
运行时硬件连接参数覆盖作为本版本的辅助改进加入
- 新增统一的
HardwareConfigOverrides - 支持覆盖:
serial_portbaudratebus
- 未显式覆盖的字段继续使用
hardware.yaml中的配置 - Native C++ Terminal 支持:
--serial-port--baudrate--bus
- Python
RobotSession同步支持 Runtime Override - ROS 2
hardware.launch.py与moveit.launch.py支持参数透传 - DM-Arm gray / white ros2_control xacro 完成参数声明与透传
- Runtime Override 只影响本次运行,不写回原始 YAML
robot_profile在 Robot Profile 启动模式下仍需显式指定
示例:
serial_arm_terminal \
--robot-profile dm_arm_gray \
--serial-port /dev/ttyACM1ros2 launch serial_arm_ros2_control moveit.launch.py \
robot_profile:=dm_arm_gray \
serial_port:=/dev/ttyACM1不提供 serial_port / baudrate / bus 时继续使用 Robot Profile 对应 hardware.yaml 中的连接配置
测试与真机验证
本版本已完成:
serial_arm_core- Core contract tests
- Hardware Runtime Override tests
- SerialPort tests
- Transport tests
serial_arm_ros2_control- Robot Profile tests
- Runtime Override xacro tests
- gray / white 两套 DM-Arm Profile 的 Runtime Override xacro 测试
colcon test-result --verbose- 17 tests
- 0 errors
- 0 failures
- 0 skipped
- DM-Arm 真机 MoveIt 2 + ros2_control 规划与轨迹执行验证通过
文档
- README 增加共享 CAN / 独立外设接入模型说明
- Tutorial 增加机械臂与独立 CAN 外设共享 physical bus 的示例
- API 补充
CanBus、CanChannel、BusPool、Damiao targeted receive 及独立外设接入说明 - 补充 Runtime Override 的使用方法与参数优先级
当前设计约束
BusPool / CanChannel提供同进程共享,不提供跨进程 CAN broker- 同名 bus 必须对应一致的物理串口与波特率
- 每个独立驱动应持有自己的
CanChannel - Damiao payload 级设备识别由
MotorControl负责,不放入通用 Transport 层 - Runtime Override 当前覆盖
serial_port、baudrate和bus - 串口设备继续使用
/dev/ttyACM* - EEF 目前作为独立 CAN 外设接入路径使用,尚未提供统一的 SerialArm EEF Backend 抽象
- Gripper 与 SocketCAN Backend 尚未实现
Full Changelog: v0.2.0...v0.3.0
SerialArm-Core v0.2.0
SerialArm-Core v0.2.0
v0.2.0 聚焦依赖修复、CAN transport 基础设施和 Damiao backend 通信分层
主要变化
- 新增
serial_arm::transport::CanFrame、CanFilter、CanBus、CanChannel CanBus / CanChannel支持同进程多逻辑 channel 的 CAN RX 分发- 新增 Linux/POSIX
serial_arm::transport::SerialPort - Damiao backend 从直接持有串口改为通过
CanChannel通信 - 新增
serial_arm_protocol_damiao_usb2can,其中DamiaoUsbCanBus负责达妙官方 USB2CAN 模块私有串口协议与CanFrame互转 - 修复
package.xml/ rosdep 依赖声明,包括yaml-cpp、eigen、pinocchio、gtest、python3-dev、pybind11-dev - 移除 DM-Arm MoveIt config 的 warehouse runtime dependency 和 setup assistant runtime launch
- 版本统一到
0.2.0
限制
- 本版本未实现 EEF backend、Gripper 或 SocketCAN
- v0.2.0 支持同进程 Hardware / Peripheral 通过同一 bus name 获取共享 CAN Bus 并创建独立 CanChannel
CanBus / CanChannel当前目标是同进程共享,不提供跨进程总线管理