当前位置: 首页 > news >正文

【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 仓库:

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

注意:上面功能包的安装需要以下的环境条件:

  • Linux with SocketCAN support (Install Ubuntu →)
  • CMake 3.22+
  • C++17 compiler

二、ROS2控制代码设置

openarm_ros2 存储库包含用于 ros2_control 的包集合。

它抽象化了硬件控制,将手臂公开为接收位置、速度和扭矩命令并输出关节状态的接口。

若要开始,我们需要先克隆openarm_ros2存储库、生成包并获取工作区。

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依赖设为可选,大概如下:

// ... 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的控制器功能包:

sudo apt update
sudo apt install ros-humble-controller-manager ros-humble-ros2-control ros-humble-ros2-controllers

然后,使用 v1.0 配置和假硬件启动 OpenArm:

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

当您运行启动文件时,将启动机器人状态发布器、控制器管理器等。

成功启动控制器后,可以通过检查可用作来验证它们是否正常工作:

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 (夹爪关节)

控制命令如下:

控制左臂

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}}]}}'

控制右臂

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}}]}}'

控制左臂夹爪

ros2 action send_goal /left_gripper_controller/gripper_cmd control_msgs/action/GripperCommand '{command: {position: 0.05, max_effort: 1.0}}'

控制右臂夹爪

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 分支:
cd ~/ros2_ws/src/openarm_ros2
git checkout moveit2_experiment
cd ~/ros2_ws && colcon build
source ~/ros2_ws/install/setup.bash
  1. 启动 MoveIt2 demo演示:
ros2 launch openarm_bimanual_moveit_config demo.launch.py

第一次运行报错如下:

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
sudo apt update
sudo apt install ros-humble-moveit-configs-utils
  1. 安装moveit2
sudo apt install ros-humble-moveit

该包安装可能比较耗时,需要耐心等待。

安装完成后,再次运行:

ros2 launch openarm_bimanual_moveit_config demo.launch.py

在这里插入图片描述

4.2 运动规划

在这里插入图片描述
目标位置可以在左侧 MotionPlanning 面板的选项卡中设置。或者,可以拖动手臂上的目标并将其旋转到目标姿势,或者可以从下面的预设关键点列表中选择目标状态JointsPlanning > Goal State

该选项卡提供了一个 GUI 来生成到达目标位置的轨迹。建议单击以预览路径。PlanningPlan

http://www.dtcms.com/a/453493.html

相关文章:

  • 网站开发小组百度网页制作网站建设
  • 中小型项目组织架构和职能说明
  • wordpress发表文章更新失败网站标题优化工具
  • C++网络编程(五)socket编程---从socket()到connect()
  • 23-25年总结:23年因为大模型而转型科技,24年起发力具身,25年长沙具身开始一轮轮突飞猛进
  • AI智能体(Agent)大模型入门【7】--构建传统的RAG应用
  • 淮阴区建设局网站网站备案变更公司名称
  • Bittensor 中国巡回 Meetup|上海站
  • S11e Network 商业模型:AI × Web3 × RWA 驱动的实体经济新范式
  • 人脸跟随 ( Channel 实现(缓存5条数据 + 2度过滤 + 平滑移动))
  • 线性表——数组描述
  • 帮客户做网站 没签合同咋办重视网站阵地建设
  • Raven2
  • 面试陷阱:SQL 子查询 vs JOIN 的性能差异
  • 做蛋糕视频的网站非法网站开发
  • 设备管理平台项目部署文档(含自动化脚本)
  • 毕业设计除了网站还可以做啥外贸网站关键词
  • 前端内存泄漏:从原理到实践的全方位解析
  • app手机网站建设黄消防网站模板
  • 成品网站建设咨询怀化最新消息今天
  • 第八章 FPGA 片内 FIFO 读写测试实验
  • 2025年--Lc170--H289. 生命游戏(矩阵)--Java版
  • FC和SFC的原版说明书(扫描的PDF)
  • 网站建设方案文库我们是设计师 网站建设专家
  • 做网站自己买服务器好还是用别人的柳州企业网站建设
  • 震荡市中MACD-KDJ组合的动态参数优化思路
  • 一文了解解耦 Prefilling 与 Decoding(PD 分离)以及典型的 PD 分离方案
  • petri网自学(四)
  • 海思Hi3516CV610/Hi3516CV608开发笔记之环境搭建和固件编译
  • 学生化残差(Studentized Residual):概念、计算与应用