Openarm复现调试
本文介绍了OpenArm机器人系统的安装与调试流程。首先通过git克隆ROS2工作空间并编译,遇到缺少hardware_interface包的问题,通过apt安装解决。接着配置CAN接口通信,电机通信调试设置接口波特率选项 1:手动设置选项 2:使用安装脚本验证配置电机测试CAN库安装设置电机波特率设置零位验证电机通信MoveIt2重力补偿启动双臂力反馈启动websocket启动双臂启外骨骼参考
目录
安装
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 集成:
- 切换到 moveit2 分支:
cd ~/ros2_ws/src/openarm_ros2
git checkout moveit2_experiment
cd ~/ros2_ws && colcon build
source ~/ros2_ws/install/setup.bash
- 启动 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
-
主程序openarm_bilateral_control.cpp
- 初始化主从两个OpenArm实例
- 加载配置文件参数(leader.yaml/follower.yaml)
- 创建多个线程:
- LeaderArmThread:控制主臂
- FollowerArmThread:控制从臂
- AdminThread:管理主从臂状态同步
-
控制线程
- LeaderArmThread和FollowerArmThread执行控制逻辑
- AdminThread:同步主从臂状态
-
核心控制逻辑
Control::bilateral_step()
- 获取电机状态并转换为关节状态
- 计算重力、科里奥利力和摩擦力补偿
- 根据主从关系计算控制扭矩
- 发送MIT控制指令
两个控制模式都使用YAML配置文件:
- leader.yaml:主臂控制参数
- follower.yaml:从臂控制参数
配置包括:
- Kp/Kd:位置和速度控制增益
- 摩擦模型参数(Fc、k、Fv、Fo)
核心类和组件
- [Control]:主要控制类,实现重力补偿和双边控制逻辑
- [Dynamics]:动力学计算类,使用KDL库计算重力、科里奥利力等
- [RobotSystemState]:机器人状态管理类
- [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
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐



所有评论(0)