Skip to main content
Version: 6.1.0 (Latest)

Alicia-D ROS2 Humble

1. 介绍

Alicia-D ROS2 是一个用于控制【灵动 Alicia-D】系列六轴机械臂(带夹爪)的 ROS 工具包。它基于 ROS 2 Humble 构建,提供通过串口通信控制机械臂运动、操作夹爪、读取姿态与状态数据等功能。

License ROS2

1.1 主要特性

  • ros2_control 集成:基于标准的 ros2_control 硬件接口,支持与 MoveIt2 无缝集成。
  • MoveIt2 支持:完整的 MoveIt2 运动规划与执行功能。
  • 关节控制:支持设置与读取六个关节的角度,提供平滑轨迹执行。
  • 夹爪控制:支持精确位置控制,适配 50mm 和 100mm 两种夹爪类型。
  • 实时状态反馈:实时获取关节角、夹爪位置与机器人状态。
  • 自动固件检测:自动检测固件版本。
  • 串口通信:自动搜索串口或手动指定,支持高波特率通信。
  • 零位校准:将当前位置设置为新的零点。
  • 扭矩开关:开启或关闭关节电机扭矩,实现自由拖动示教。

1.2 项目结构

alicia_d_driver/
├── include/alicia_d_driver/
│ ├── alicia_d_hardware_interface.hpp # 硬件接口头文件
│ └── alicia_d_driver_node.hpp # 独立驱动节点
├── src/
│ ├── alicia_d_hardware_interface.cpp # 硬件接口实现
│ ├── alicia_d_driver_node.cpp # 独立驱动
│ └── serial_communicator.cpp # 串口通信
├── launch/
│ └── alicia_d_driver.launch.py # 独立驱动启动
├── alicia_d_driver.xml # 插件描述
└── CMakeLists.txt

alicia_d_moveit/
├── config/
│ ├── alicia_d_descriptions.ros2_control.xacro # 硬件接口配置
│ ├── ros2_controllers.yaml # 控制器配置
│ ├── moveit_controllers.yaml # MoveIt 控制器映射
│ └── ... # 其他 MoveIt 配置
├── launch/
│ ├── real_robot.launch.py # 真实机械臂启动
│ ├── demo.launch.py # 仿真启动
│ └── ... # 其他启动文件
└── package.xml

2. 快速开始

2.1 设置串口权限(一次性)

sudo usermod -a -G dialout $USER

然后需要完全注销并重新登录!

或临时设置:

sudo chmod 666 /dev/ttyACM*

2.2 获取源代码并编译

mkdir -p ~/alicia_ws/src
cd ~/alicia_ws
git clone https://github.com/Synria-Robotics/Alicia-D-ROS2.git -b v6.1.0 ./src
rosdep install --from-paths src --ignore-src -r -y
colcon build
source install/setup.bash

2.3 启动真实机械臂

ros2 launch alicia_d_driver alicia_d_driver.launch.py

3. 使用方法

3.1 MoveIt 仿真

对于 50mm 夹爪类型,使用默认值:

ros2 launch alicia_d_moveit demo.launch.py

对于 100mm 夹爪类型,指定夹爪类型:

ros2 launch alicia_d_moveit demo.launch.py gripper_type:=100mm

3.2 Real Robot MoveIt

使用 MoveIt 控制真实机械臂:

基本启动(使用默认参数):

ros2 launch alicia_d_moveit real_robot.launch.py

指定夹爪类型:

ros2 launch alicia_d_moveit real_robot.launch.py gripper_type:=50mm

指定串口(自动检测可用时可不指定):

ros2 launch alicia_d_moveit real_robot.launch.py \
gripper_type:=100mm \
port:=/dev/ttyACM0

指定运动速度(度/秒):

ros2 launch alicia_d_moveit real_robot.launch.py \
gripper_type:=50mm \
port:=/dev/ttyACM0 \
speed_deg_s:=30

MoveIt Launch 参数说明

参数默认值说明
gripper_type50mm夹爪类型:50mm100mm
port''(空字符串)串口设备路径,如 /dev/ttyACM0,留空则自动检测
speed_deg_s20关节运动的默认速度(度/秒)

提示:底层驱动会自动检测固件版本与机械臂版本(v5_5 / v5_6),一般无需手动指定。


3.3 独立驱动节点(无 MoveIt)

独立驱动节点仅运行底层驱动,不依赖 MoveIt,适用于只需要基础关节/夹爪控制的场景。

启动独立驱动

基本启动(使用默认参数):

ros2 launch alicia_d_driver alicia_d_driver.launch.py

指定串口:

ros2 launch alicia_d_driver alicia_d_driver.launch.py port:=/dev/ttyACM0

指定默认速度(度/秒):

ros2 launch alicia_d_driver alicia_d_driver.launch.py \
port:=/dev/ttyACM0 \
default_speed_deg_s:=30.0

独立驱动参数说明

参数默认值说明
port''(空字符串)串口设备路径,如 /dev/ttyACM0。留空则自动检测
default_speed_deg_s20.0关节运动的默认速度(度/秒),范围:4.39–439.45

独立驱动 Topics

订阅 Topics:

  • /joint_commands (sensor_msgs/JointState):发送关节位置和速度命令
  • /demonstration (std_msgs/Bool):使能/禁用示教模式(零力矩)
  • /zero_calibrate (std_msgs/Bool):执行零位校准

发布 Topics:

  • /joint_states (sensor_msgs/JointState):发布当前关节状态(位置、速度)

使用示例

1. 使能示教模式(零力矩)

使能示教模式后,可以手动拖动机械臂进行示教:

ros2 topic pub --once /demonstration std_msgs/msg/Bool "{data: true}"
2. 禁用示教模式(恢复全力矩)
ros2 topic pub --once /demonstration std_msgs/msg/Bool "{data: false}"
3. 零位校准

⚠️ 注意:此操作不可逆,如非必要请忽略此步骤。

  1. 先禁用力矩(进入示教模式):

    ros2 topic pub --once /demonstration std_msgs/msg/Bool "{data: true}"
  2. 将机械臂手动移动到期望的零位姿势

  3. 执行零位校准(校准后会自动恢复力矩):

    ros2 topic pub --once /zero_calibrate std_msgs/msg/Bool "{data: true}"
4. 发送关节命令

通过 /joint_commands topic 发送关节位置和速度命令。

示例 1:移动到零位,使用默认速度(20 度/秒)

ros2 topic pub --once /joint_commands sensor_msgs/msg/JointState "
name: ['Joint1', 'Joint2', 'Joint3', 'Joint4', 'Joint5', 'Joint6', 'Gripper']
position: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 500.0]
"

示例 2:指定速度移动(30 度/秒 = 0.524 弧度/秒)

ros2 topic pub --once /joint_commands sensor_msgs/msg/JointState "
name: ['Joint1', 'Joint2', 'Joint3', 'Joint4', 'Joint5', 'Joint6', 'Gripper']
position: [0.785, 0.785, 0.0, 0.0, 0.0, 0.0, 500.0]
velocity: [0.524, 0.524, 0.524, 0.524, 0.524, 0.524, 0.0]
"

单位说明:

/joint_commands topic 使用 sensor_msgs/JointState 消息类型,遵循 ROS 标准约定:

  • 关节位置单位为 弧度(rad)
  • velocity 字段中的速度单位为 弧度/秒(rad/s)

虽然驱动内部使用度/秒(speed_deg_s / default_speed_deg_s),但 ROS 消息标准要求使用 rad/s。驱动会自动将 rad/s 转换为 deg/s,因此请始终以 rad/s 提供速度值。

行为说明:

  • 如果提供了 rad/s 的速度值,驱动会将其转换为 deg/s,并使用最大值作为所有关节的公共速度
  • 如果不提供速度,将使用 default_speed_deg_s 参数值(单位为度/秒)
  • 夹爪位置范围为 0–1000(0 为完全打开,1000 为完全闭合)

速度转换参考(用于 /joint_commands topic):

  • 20 度/秒 = 0.349 弧度/秒 → 使用 velocity: [0.349, 0.349, ...]
  • 30 度/秒 = 0.524 弧度/秒 → 使用 velocity: [0.524, 0.524, ...]
  • 40 度/秒 = 0.698 弧度/秒 → 使用 velocity: [0.698, 0.698, ...]
  • 100 度/秒 = 1.745 弧度/秒 → 使用 velocity: [1.745, 1.745, ...]

快速换算公式:弧度/秒 = 度/秒 × π / 180弧度/秒 = 度/秒 × 0.0174533

5. 读取关节状态数据
ros2 topic echo /joint_states

4. 故障排除

4.1 连接问题

问题:无法连接到串口

解决方案

  1. 检查线缆连接
  2. 验证端口名称:ls /dev/tty*
  3. 检查权限:ls -l /dev/ttyACM0
  4. 将用户添加到 dialout 组:sudo usermod -a -G dialout $USER

4.2 控制器故障

问题:控制器启动失败

解决方案

  1. 检查硬件接口:ros2 control list_hardware_interfaces
  2. 检查控制器:ros2 control list_controllers
  3. 验证机械臂已连接并通电

4.3 运动执行问题

问题:规划成功但执行失败

解决方案

  1. 验证固件版本是否正确检测(查看日志)
  2. 确保夹爪类型与硬件匹配(50mm vs 100mm)
  3. 使用 debug_mode:=true 监控串口通信

5. 安全注意事项

⚠️ 重要的安全指南:

  1. 始终准备好紧急停止
  2. 在执行运动前清理工作区域
  3. 从慢速开始
  4. 首先在仿真中测试
  5. 在操作过程中监控机械臂

6. 支持

如有问题或疑问:

  1. 查看故障排除部分
  2. 查看 ROS 日志:~/.ros/log/
  3. 启用调试模式:debug_mode:=true
  4. 检查硬件连接和固件版本
  5. Github发布Issue