前言
这里我们默认安装了RO2的Humble版本,安装方法可以看上一篇博客openarm仿真环境配置以及URDF导出。同时也要把上篇博客的功能包安装完整。
一、安装 OpenArmCAN 包
OpenArmCAN包是OpenArm机器人系统中的一个关键组件,主要负责:
-
CAN通信接口: 提供与OpenArm机器人硬件之间的CAN(Controller Area Network)总线通信功能。从代码中可以看出,它支持标准的CAN接口(如can0、can1等)以及CAN-FD(CAN with Flexible Data-rate)协议。
-
硬件抽象层: 作为底层硬件与上层ROS2控制系统之间的桥梁,封装了与机器人电机、传感器等硬件组件的直接通信细节。
-
电机控制: 从代码中可以看到,它包含对大苗电机(damiao_motor)的支持,提供了初始化电机、MIT控制模式等功能。
-
机器人组件管理: 提供了手臂组件(arm_component)和夹爪组件(gripper_component)的管理功能,用于控制OpenArm机器人的各个部分。
首先,需要克隆官方的OpenArmCAN 仓库:
python
git clone https://github.com/enactic/openarm_can.git
然后编译该功能包:
python
cd openarm_can
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build
如果您想在整个系统中使用该库:
那么用以下命令编译:
python
sudo cmake --install build
注意:上面功能包的安装需要以下的环境条件:
- Linux with SocketCAN support (Install Ubuntu →)
- CMake 3.22+
- C++17 compiler
二、ROS2控制代码设置
openarm_ros2 存储库包含用于 ros2_control 的包集合。
它抽象化了硬件控制,将手臂公开为接收位置、速度和扭矩命令并输出关节状态的接口。
若要开始,我们需要先克隆openarm_ros2存储库、生成包并获取工作区。
python
git clone https://github.com/enactic/openarm_ros2 ~/ros2_ws/src/openarm_ros2
cd ~/ros2_ws && colcon build
source ~/ros2_ws/install/setup.bash
这里我要详细说明下,如果我们只做仿真的话,第一步的OpenArmCAN包其实可以不必安装,但是如果我们想要编译openarm_ros2这个代码仓库里面的功能包,就必须安装和编译OpenArmCAN包,因为该openarm_ros2代码里的CMakeLists.txt文件里有关于OpenArmCAN的依赖查询,所以如果我们只是想做仿真,不想安装OpenArmCAN包的话,需要将CMakeLists.txt文件里的OpenArmCAN依赖设为可选,大概如下:
python
// ... existing code ...
# Find openarm_can library
find_package(OpenArmCAN QUIET) # 将REQUIRED改为QUIET
// ... existing code ...
# 在链接库的地方添加条件判断
if(OpenArmCAN_FOUND)
target_link_libraries(openarm_hardware
// ... existing code ...
OpenArmCAN::openarm_can
)
else()
target_link_libraries(openarm_hardware
// ... existing code ...
# 不添加OpenArmCAN::openarm_can
)
endif()
// ... existing code ...
三、ROS2 控制集成
openarm_ros2 代码里的openarm_bringup 包提供了通过包与 ROS2 控制框架集成的启动文件。该软件包提供启动文件和配置,用于启动硬件接口、加载控制器以及将物理臂连接到 ROS2 生态系统。启动后,您可以使用标准 ROS2 控制工具和接口来命令手臂并接收反馈。openarm_bringup
bringup 包支持模拟硬件(用于模拟/测试)和通过硬件插件的真实硬件。使用真实硬件时,您需要首先按照 CAN 设置指南构建 openarmcan 库。
注意:硬件桥接组件目前正在更新中,可能不稳定。夹持器桥接逻辑openarm官方正在积极开发中。
在启动之前,我们需要先安装下ROS2的控制器功能包:
python
sudo apt update
sudo apt install ros-humble-controller-manager ros-humble-ros2-control ros-humble-ros2-controllers
然后,使用 v1.0 配置和假硬件启动 OpenArm:
python
ros2 launch openarm_bringup openarm.bimanual.launch.py arm_type:=v10 use_fake_hardware:=true

启动文件
- openarm.launch.py- 单臂配置
- openarm.bimanual.launch.py- 双臂配置
这里我们使用的是双臂启动,如果用单臂记得修改参数。
关键参数
- arm_type- 手臂类型(默认:v10)
- use_fake_hardware- 使用假硬件而不是真硬件(默认:false)
- can_interface- 要使用的 CAN 接口(默认:can0)
- robot_controller- 控制器类型:joint_trajectory_controller 或 forward_position_controller
当您运行启动文件时,将启动机器人状态发布器、控制器管理器等。
成功启动控制器后,可以通过检查可用作来验证它们是否正常工作:
python
ros2 action list

在控制之前,需要分析下机器人描述文件里面关于各个关节的名称。
双臂关节名称分析
从openarm.bimanual.ros2_control.xacro
和openarm_v10_bimanual_controllers.yaml
文件中可以看出,双臂仿真中的关节名称如下:
左臂关节名称
openarm_left_joint1
openarm_left_joint2
openarm_left_joint3
openarm_left_joint4
openarm_left_joint5
openarm_left_joint6
openarm_left_joint7
openarm_left_finger_joint1
(夹爪关节)
右臂关节名称
openarm_right_joint1
openarm_right_joint2
openarm_right_joint3
openarm_right_joint4
openarm_right_joint5
openarm_right_joint6
openarm_right_joint7
openarm_right_finger_joint1
(夹爪关节)
控制命令如下:
控制左臂
bash
ros2 action send_goal /left_joint_trajectory_controller/follow_joint_trajectory control_msgs/action/FollowJointTrajectory '{trajectory: {joint_names: ["openarm_left_joint1", "openarm_left_joint2", "openarm_left_joint3", "openarm_left_joint4", "openarm_left_joint5", "openarm_left_joint6", "openarm_left_joint7"], points: [{positions: [0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15], time_from_start: {sec: 3, nanosec: 0}}]}}'
控制右臂
bash
ros2 action send_goal /right_joint_trajectory_controller/follow_joint_trajectory control_msgs/action/FollowJointTrajectory '{trajectory: {joint_names: ["openarm_right_joint1", "openarm_right_joint2", "openarm_right_joint3", "openarm_right_joint4", "openarm_right_joint5", "openarm_right_joint6", "openarm_right_joint7"], points: [{positions: [0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15], time_from_start: {sec: 3, nanosec: 0}}]}}'
控制左臂夹爪
bash
ros2 action send_goal /left_gripper_controller/gripper_cmd control_msgs/action/GripperCommand '{command: {position: 0.05, max_effort: 1.0}}'
控制右臂夹爪
bash
ros2 action send_goal /right_gripper_controller/gripper_cmd control_msgs/action/GripperCommand '{command: {position: 0.05, max_effort: 1.0}}'
关键点总结
- 双臂配置中关节名称有前缀 :左臂使用
openarm_left_jointX
,右臂使用openarm_right_jointX
- 控制器名称也区分左右臂 :左臂使用
left_joint_trajectory_controller
,右臂使用right_joint_trajectory_controller
- 夹爪控制器同样区分左右 :左臂夹爪使用
left_gripper_controller
,右臂夹爪使用right_gripper_controller
四、MoveIt2 集成
MoveIt2 是一个强大的机器人机械手框架,它结合了逆运动学、感知、路径规划和控制功能。
OpenArm MoveIt2 集成目前正在积极开发中。如需最新的 MoveIt2 集成,包括运动规划和双手协调功能,需要使用 openarm_ros2 存储库的 moveit2 分支。
4.1 MoveIt2 入门
- 切换到 moveit2 分支:
python
cd ~/ros2_ws/src/openarm_ros2
git checkout moveit2_experiment
cd ~/ros2_ws && colcon build
source ~/ros2_ws/install/setup.bash
- 启动 MoveIt2 demo演示:
python
ros2 launch openarm_bimanual_moveit_config demo.launch.py
第一次运行报错如下:
python
jikangyi@jikangyi-virtual-machine:~/ros2_ws$ ros2 launch openarm_bimanual_moveit_config demo.launch.py
[INFO] [launch]: All log files can be found below /home/jikangyi/.ros/log/2025-10-07-17-19-10-149285-jikangyi-virtual-machine-4665
[INFO] [launch]: Default logging verbosity is set to INFO
[ERROR] [launch]: Caught exception in launch (see debug for traceback): Caught multiple exceptions when trying to load file of format [py]:
- ModuleNotFoundError: No module named 'moveit_configs_utils'
- InvalidFrontendLaunchFileError: The launch file may have a syntax error, or its format is unknown
这表明缺少moveit_configs_utils模块。这个模块是MoveIt 2配置工具的一部分,用于简化MoveIt的配置过程。
解决方法如下:
- 安装moveit_configs_utils
python
sudo apt update
sudo apt install ros-humble-moveit-configs-utils
- 安装moveit2
python
sudo apt install ros-humble-moveit
该包安装可能比较耗时,需要耐心等待。
安装完成后,再次运行:
python
ros2 launch openarm_bimanual_moveit_config demo.launch.py

4.2 运动规划

目标位置可以在左侧 MotionPlanning 面板的选项卡中设置。或者,可以拖动手臂上的目标并将其旋转到目标姿势,或者可以从下面的预设关键点列表中选择目标状态JointsPlanning > Goal State
该选项卡提供了一个 GUI 来生成到达目标位置的轨迹。建议单击以预览路径。PlanningPlan