【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

相关推荐
程序员陆业聪3 小时前
AI智能体的未来:从语言泛化到交互革命
人工智能
小小程序媛(*^▽^*)3 小时前
第十二届全国社会媒体处理大会笔记
人工智能·笔记·学习·ai
却道天凉_好个秋3 小时前
OpenCV(二):加载图片
人工智能·opencv·计算机视觉
音视频牛哥3 小时前
系统级超低延迟音视频直播模块时代:如何构建可控、可扩展的实时媒体底座
人工智能·音视频·大牛直播sdk·rtsp播放器·rtmp播放器·rtsp服务器·rtmp同屏推流
学無芷境3 小时前
VOCO摘要
人工智能
格林威4 小时前
机器视觉的工业镜头有哪些?能做什么?
人工智能·深度学习·数码相机·算法·计算机视觉·视觉检测·工业镜头
Jolie_Liang4 小时前
保险业多模态数据融合与智能化运营架构:技术演进、应用实践与发展趋势
大数据·人工智能·架构
烽火连城诀4 小时前
人工智能在工程项目进度预测与风险识别中的应用
人工智能·文献综述·如何写文献综述·文献综述模板·文献综述怎么写
程序员陆通4 小时前
OpenAI 2025年度发布会(Dev Day 2025)主要内容
人工智能