安装

git clone https://github.com/enactic/openarm_ros2 ~/ros2_ws/src/openarm_ros2
cd ~/openarm_ros2 && colcon build
source ~/ros2_ws/install/setup.bash

出错

CMake Error at CMakeLists.txt:24 (find_package):

  By not providing "Findhardware_interface.cmake" in CMAKE_MODULE_PATH this

  project has asked CMake to find a package configuration file provided by

  "hardware_interface", but CMake did not find one.

  Could not find a package configuration file provided by

  "hardware_interface" with any of the following names

    hardware_interfaceConfig.cmake

    hardware_interface-config.cmake

问题:找不到hardware_interface包

# 解决方案
sudo apt install ros-humble-hardware-interface ros-humble-controller-interface
cd src
git clone https://github.com/enactic/openarm_can.git
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

如果要在系统范围内使用库(openarmcan注意安装位置)

sudo cmake --install build
source ~/ros2_ws/install/setup.bash

安装xacro

sudo apt install ros-humble-xacro

安装description

git clone https://github.com/enactic/openarm_description.git
source ~/ros2_ws/install/setup.bash
cd ..
colcon build

找不到 controller_manager 包

openarm@openarm:~/ros2_ws$ ros2 launch openarm_bringup openarm.launch.py arm_type:=v10 use_fake_hardware:=true

[INFO] [launch]: All log files can be found below /home/openarm/.ros/log/2025-11-03-14-54-39-652631-openarm-12907

[INFO] [launch]: Default logging verbosity is set to INFO

[ERROR] [launch]: Caught exception in launch (see debug for traceback): "package 'controller_manager' not found, searching: ['/home/openarm/ros2_ws/install/openarm_description', '/home/openarm/ros2_ws/install/openarm', '/home/openarm/ros2_ws/install/openarm_hardware', '/home/openarm/ros2_ws/install/openarm_bringup', '/home/openarm/ros2_ws/install/openarm_bimanual_moveit_config', '/opt/ros/humble']"

安装

sudo apt install ros-humble-ros2-control ros-humble-ros2-controllers

运行虚拟臂测试

ros2 launch openarm_bringup openarm.launch.py arm_type:=v10 use_fake_hardware:=true

电机通信调试

设置接口波特率
选项 1:手动设置

CAN 2.0 模式

sudo ip link set can0 down
# configure CAN 2.0 with 1mbps
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up

CAN FD 模式

ip link set can0 down
# configure CAN FD with 5mbps
sudo ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on
sudo ip link set can0 up
选项 2:使用安装脚本

OpenArm CAN 库包括方便的设置脚本,示例用法:

# Navigate to openarm_can directory
git clone https://github.com/enactic/openarm_can.git
cd openarm_can/setup

# For CAN 2.0
./configure_socketcan.sh can0

# For CAN FD at 5mbps (recommended)
./configure_socketcan.sh can0 -fd -b 1000000 -d 5000000

sudo ./src/openarm_can/setup/configure_socketcan.sh can0 -fd
验证配置

检查您的 CAN 接口是否配置正确:

# Verify interface is up and running
ip link show can0

# Monitor CAN traffic (optional)
candump can0

# Test monitoring
cansend can0 ...
电机测试

该测试将使用简单的 CAN 命令验证与电机 #1 的基本通信。 打开两个终端窗口:

1 号 - 监控 CAN 流量:

candump can0

保持此运行以观察所有 CAN 消息。

第 **2 号- 发送命令:**在终端 2 中,

# 向电机 #1 发送电机启用命令:
cansend can0 001#FFFFFFFFFFFFFFFC
# 向电机 #1 发送电机失能命令
cansend can0 001#FFFFFFFFFFFFFFFD

命令分解:

  • 001= 电机 #1 CAN ID (0x01)
  • FFFFFFFFFFFFFFFC= 电机使能命令
CAN库安装
git clone https://github.com/enactic/openarm_can.git

编译库

cd openarm_can
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

如果要在系统范围内使用库:

sudo cmake --install build
设置电机波特率
  • 无论您的目标波特率如何,请务必在波特率设置期间使用 2.0 上的 CAN 接口。完成此步骤后,将其配置回目标波特率
  • 电机参数有 10000 次写入时间限制,不应在脚本中频繁运行。

设置每个电机的波特率(替换为您的电机 CAN ID 和所需的波特率):1 5000000

临时设置:

python3 change_baudrate.py --baudrate 5000000 --canid 1 --socketcan can0

永久保存:

python3 change_baudrate.py --baudrate 5000000 --canid 1 --socketcan can0 --flash

**重要:**完成波特率配置后,重新配置 CAN 接口以匹配电机的新波特率设置,以便在必要时进行适当的通信。

设置零位
  • 警告:在设置电机之前,请将电机物理定位到所需的零位置,尤其是在您已经组装了手臂的情况下!对于夹持器,默认情况下,闭合位置用作零。

设置特定电机的零位:

./set_zero.sh can0 001

或为所有电机设置零位(ID 001-008):

./set_zero.sh can0 --all
验证电机通信

运行电机检查可执行文件,用电机的发送和接收 CAN ID 替换 和。 可执行文件应该在库编译的构建目录中可用。 如果缺少,请重新生成项目。

  • 注意:CAN ID 17 是 0x11 的十进制表示形式1``17``motor-check
  • 一定注意使用对应的模式测试

对于 CAN 2.0

cd openarm_can/build
./motor-check 1 17 can0

对于 CAN FD 模式:

./motor-check 1 17 can0 -fd

输出应显示电机的接收器 ID、波特率和状态信息。

MoveIt2

要使用 MoveIt2 集成:

  1. 切换到 moveit2 分支:
cd ~/ros2_ws/src/openarm_ros2
git checkout moveit2_experiment
cd ~/ros2_ws && colcon build
source ~/ros2_ws/install/setup.bash
  1. 启动 MoveIt2 演示:
ros2 launch openarm_bimanual_moveit_config demo.launch.py

操作

git clone https://github.com/enactic/openarm_teleop.git
cd openarm_teleop

安装依赖

sudo apt update && sudo apt install -y \
  liborocos-kdl-dev \
  libeigen3-dev \
  liburdfdom-dev \
  liburdfdom-headers-dev \
  libyaml-cpp-dev

构建 teleop 库

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

重力补偿启动

./script/launch_grav_comp.sh <arm_side> <can_interface> <urdf_path>
默认参数:
arm_side: right_arm
can_interface: can0
arm_type: v10
./script/launch_grav_comp.sh left_arm can1 v10

双臂力反馈启动

right_arm(默认 CAN 总线为 can0 can2)

cd openarm_teleop
./script/launch_unilateral.sh right_arm can0 can2

left_arm(默认 CAN 总线为 can1 can3)

cd openarm_teleop
./script/launch_bilateral.sh left_arm can1 can3
  1. 主程序openarm_bilateral_control.cpp

    • 初始化主从两个OpenArm实例
    • 加载配置文件参数(leader.yaml/follower.yaml)
    • 创建多个线程:
      • LeaderArmThread:控制主臂
      • FollowerArmThread:控制从臂
      • AdminThread:管理主从臂状态同步
  2. 控制线程

    • LeaderArmThread和FollowerArmThread执行控制逻辑
    • AdminThread:同步主从臂状态
  3. 核心控制逻辑

    Control::bilateral_step()

    • 获取电机状态并转换为关节状态
    • 计算重力、科里奥利力和摩擦力补偿
    • 根据主从关系计算控制扭矩
    • 发送MIT控制指令

两个控制模式都使用YAML配置文件:

  • leader.yaml:主臂控制参数
  • follower.yaml:从臂控制参数

配置包括:

  • Kp/Kd:位置和速度控制增益
  • 摩擦模型参数(Fc、k、Fv、Fo)

核心类和组件

  1. [Control]:主要控制类,实现重力补偿和双边控制逻辑
  2. [Dynamics]:动力学计算类,使用KDL库计算重力、科里奥利力等
  3. [RobotSystemState]:机器人状态管理类
  4. [PeriodicTimerThread]:定时控制线程基类

外骨骼启动依赖

sudo apt install python3-websockets
sudo apt install ros-humble-joint-state-publisher-gui
sudo apt install ros-humble-tf-transformations

启动流程

sudo apt install can-utils iproute2
pip3 install python-can

websocket启动

ros2 launch rosbridge_server rosbridge_websocket_launch.xml

双臂启动

# 轨迹控制
ros2 launch openarm_bringup openarm.bimanual.launch.py arm_type:=v10
  • arm_type- 手臂类型(默认:v10)
  • use_fake_hardware- 使用假硬件而不是真硬件(默认:false)
  • can_interface- 要使用的 CAN 接口(默认:can0)
  • robot_controller- 控制器类型:joint_trajectory_controller 或 forward_position_controller
# 启动位置控制
ros2 launch openarm_bringup openarm.bimanual.launch.py arm_type:=v10 robot_controller:=forward_position_controller launch_rviz:=false

# 夹爪
ros2 action send_goal /left_gripper_controller/gripper_cmd control_msgs/action/GripperCommand "{command: {position: 0.02, max_effort: 10.0}}"
# 双臂
ros2 topic pub /left_forward_position_controller/commands std_msgs/msg/Float64MultiArray "{data: [0.0, 0.5, -0.3, 1.0, 0.2, -0.5, 0.0]}"

#外骨骼夹爪
ros2 launch qnbot_teleoperator exoskeleton_bridge.launch.py gripper_threshold:=0.01

web模拟时防止甩飞,默认参数

left_arm_joint_1  1.50
left_arm_joint_2  1.50
left_arm_joint_3  0
left_arm_joint_4  -1.50
left_arm_joint_5  -1.50
left_arm_joint_6  0
left_arm_joint_7  0
right_arm_joint_1  -1.50
right_arm_joint_2  -1.50
right_arm_joint_3  0
right_arm_joint_4  -1.50
right_arm_joint_5  1.50
right_arm_joint_6  0
right_arm_joint_7  0

桥接节点间隔一段终端打印一下转发的信息,包括关节和夹爪。

外骨骼

ros2 launch qnbot_teleoperator websocket_teleoperator.launch.py

ros2 launch qnbot_teleoperator exoskeleton_display.launch.py source:=exo_command

ros2 launch qnbot_teleoperator openarm_display.launch.py use_exoskeleton:=true

ros2 launch qnbot_teleoperator exo_retargeting.launch.py robot_type:=OpenArm

ros2 launch openarm_bringup openarm.bimanual.launch.py arm_type:=v10 robot_controller:=forward_position_controller launch_rviz:=false 

ros2 launch qnbot_teleoperator exoskeleton_bridge.launch.py gripper_scaling_factor:=0.04
Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐