【OpenArm|Control】openarm机械臂ROS2仿真控制

前言

这里我们默认安装了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.xacroopenarm_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}}'

关键点总结

  1. 双臂配置中关节名称有前缀 :左臂使用openarm_left_jointX,右臂使用openarm_right_jointX
  2. 控制器名称也区分左右臂 :左臂使用left_joint_trajectory_controller,右臂使用right_joint_trajectory_controller
  3. 夹爪控制器同样区分左右 :左臂夹爪使用left_gripper_controller,右臂夹爪使用right_gripper_controller

四、MoveIt2 集成

MoveIt2 是一个强大的机器人机械手框架,它结合了逆运动学、感知、路径规划和控制功能。

OpenArm MoveIt2 集成目前正在积极开发中。如需最新的 MoveIt2 集成,包括运动规划和双手协调功能,需要使用 openarm_ros2 存储库的 moveit2 分支。

4.1 MoveIt2 入门

  1. 切换到 moveit2 分支:
python 复制代码
cd ~/ros2_ws/src/openarm_ros2
git checkout moveit2_experiment
cd ~/ros2_ws && colcon build
source ~/ros2_ws/install/setup.bash
  1. 启动 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的配置过程。

解决方法如下:

  1. 安装moveit_configs_utils
python 复制代码
sudo apt update
sudo apt install ros-humble-moveit-configs-utils
  1. 安装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

相关推荐
i爱校对3 小时前
爱校对团队服务全新升级
人工智能
KL132881526933 小时前
AI 介绍的东西大概率是不会错的,包括这款酷铂达 VGS耳机
人工智能
vigel19903 小时前
人工智能的7大应用领域
人工智能
人工智能训练3 小时前
windows系统中的docker,xinference直接运行在容器目录和持载在宿主机目录中的区别
linux·服务器·人工智能·windows·ubuntu·docker·容器
南蓝3 小时前
【AI 日记】调用大模型的时候如何按照 sse 格式输出
前端·人工智能
robot_learner3 小时前
11 月 AI 动态:多模态突破・智能体模型・开源浪潮・机器人仿真・AI 安全与主权 AI
人工智能·机器人·开源
Mintopia4 小时前
🌐 动态网络环境中 WebAIGC 的断点续传与容错技术
人工智能·aigc·trae
后端小张4 小时前
【AI 学习】从0到1深入理解Agent AI智能体:理论与实践融合指南
人工智能·学习·搜索引擎·ai·agent·agi·ai agent
Mintopia4 小时前
🧩 Claude Code Hooks 最佳实践指南
人工智能·claude·全栈
星空的资源小屋4 小时前
极速精准!XSearch本地文件搜索神器
javascript·人工智能·django·电脑