Skip to content

Releases

SerialArm-Core v0.6.2

Choose a tag to compare

@Kaede-Rei Kaede-Rei released this 08 Nov 07:55

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.sh

SerialArm-Core v0.6.1

Choose a tag to compare

@Kaede-Rei Kaede-Rei released this 23 Oct 15:21

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

Choose a tag to compare

@Kaede-Rei Kaede-Rei released this 19 Oct 05:20

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

Choose a tag to compare

@Kaede-Rei Kaede-Rei released this 03 Oct 18:17

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 --yes

GUI 需要 Linux 桌面环境、Node.js 20+ 和 npm,ROS2 方案主要面向 Ubuntu 22.04 + Humble,其他尚未测试

验证与已知限制

  • 安装器、Launcher 后端与 Bridge 自动化测试通过,Electron 界面交互测试通过
  • 真实 ROS2 全流程与硬件连接仍需现场验收
  • 内置白色机械臂配置尚未接入真实夹爪反馈,可能出现 Missing gripper_left

SerialArm-Core v0.5.2

Choose a tag to compare

@Kaede-Rei Kaede-Rei released this 19 Sep 19:16

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.xacro
  • controllers.spawn 可以覆盖需要自动启动的 Controller;缺省时保持原有 joint_state_broadcaster + joint_trajectory_controller
  • moveit.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_config
ros2 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

Choose a tag to compare

@Kaede-Rei Kaede-Rei released this 18 Sep 09:39

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.bash

bootstrap 会自动完成 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 环境下也会进入 wheel
  • libserial_arm_core.so 随 wheel 一起安装
  • _serial_arm 使用 $ORIGIN RPATH 查找随包安装的 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_contract
  • serial_arm_robot_session_fault_recovery_runtime_tests
  • serial_arm_standalone_dependency_contract
  • serial_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

Choose a tag to compare

@Kaede-Rei Kaede-Rei released this 23 Aug 15:13

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

用于运动过程动力学补偿:

  • NONE
  • GRAVITY
  • FULL_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

Choose a tag to compare

@Kaede-Rei Kaede-Rei released this 15 Aug 14:23

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 协调层,移除 legacy BusPool
  • Registry 使用 CREATING / READY reservation 保证并发 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-CanChannel fan-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

Choose a tag to compare

@Kaede-Rei Kaede-Rei released this 11 Aug 06:44

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 时产生重复物理 Bus
  • CanChannel 增加有界 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_port
    • baudrate
    • bus
  • 未显式覆盖的字段继续使用 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/ttyACM1
ros2 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

Choose a tag to compare

@Kaede-Rei Kaede-Rei released this 09 Aug 06:56

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 当前目标是同进程共享,不提供跨进程总线管理