1.前言

本项目是松灵 PiPER 机械臂系列的MuJoCo仿真基座项目,旨在提供松灵PiPER机械臂系列的通用Mujoco仿真环境。目前项目完成c++版本的仿真环境启动,并基于测试版ros2控制插件完成ros2对仿真机械臂的控制测试。下面将逐步指导完成但前版本的Agilex机械臂Mujoco仿真环境构建,并利用测试版ros2插件完成ros2对仿真机械臂的控制。
请添加图片描述

2.项目结构

项目结构如下:

agilex@agilex-Bellator-N176B:~/project/agilex_arm_mujoco$ tree -L 3
├── agilex_arm
│   └── agilex_piper
│       ├── assets
│       ├── piper_body.xml
│       ├── piper.png
│       ├── piper.xml
│       └── scene.xml
├── images
│   ├── mujoco_piper.png
│   └── piper.png
├── README_EN.md
├── readme.md
└── simulate
    ├── CMakeLists.txt
    ├── config.yaml
    ├── mujoco
    │   ├── bin
    │   ├── include
    │   ├── lib
    │   ├── model
    │   ├── sample
    │   ├── simulate
    │   └── THIRD_PARTY_NOTICES
    └── src
        ├── lodepng
        ├── main.cc
        ├── param.h
        ├── plugin_manager.cc
        ├── plugin_manager.h
        ├── ros2_control_plugin.cc
        ├── ros2_control_plugin.h
        └── sim_plugin.h

3.项目构建

3.1 agilex_arm_mujoco项目构建

agilex_arm_mujoco项目的构建过程与unitree_mujoco项目构建过程一致,下面我们给出详细的构建步骤:

3.1.1. 获取agilex_arm_mujoco项目

mkdir agilex_arm && cd agilex_arm
git clone https://github.com/yanyuze1/agilex_arm_mujoco.git

在agilex_arm_mujoco项目中默认配备了一个3.3.0版本的mujoco来完成ros2控制器测试,如果要使用其他版本的mujoco,请自行下载并替换。

3.1.2. 构建agilex_arm_mujoco项目

在进行编译前须知,agilex_arm_mujoco项目有两种编译方式:一种是不开启ros2插件模式;另一种是开启ros2插件模式。

1. 不开启ros2插件模式

编辑agilex_mujoco/simulate/CMakeLists.txt,将默认开启的ros2插件模式改为OFF

option(AGILEX_ENABLE_ROS2_CONTROL "Build ROS2 control plugin" ON)
# 改为
option(AGILEX_ENABLE_ROS2_CONTROL "Build ROS2 control plugin" OFF)

完成文件编辑后,进行编译

cd agilex_arm_mujoco/simulate
mkdir build && cd build
cmake ..
make -j4
2. 开启ros2插件模式

默认情况下是开启ros2插件模式,无需进行任何文件编辑操作。但需完成ros2插件的依赖构建。

获取agilex_ws,完成依赖的获取

cd agilex_arm
git clone https://github.com/yanyuze1/agilex_ws.git

获取到依赖仓库后,进行依赖构建

cd agilex_ws
colcon build --symlink-install --packages-up-to mujoco_ros2_control agilex_piper_mujoco
source install/setup.bash

完成依赖构建后,进行仿真基座的编译

cd agilex_mujoco/simulate
mkdir build && cd build
cmake ..
make -j4

3.2 运行agilex_arm_mujoco项目

运行agilex_arm_mujoco当前提供两种方式:一种是仅启动仿真基座,一种是启动仿真基座并开启ros2插件模式。

3.2.1. 仅启动仿真基座

在仅启动仿真基座时,请使用如下命令:

./agilex_mujoco -h
./agilex_mujoco -r piper -s scene.xml
./agilex_mujoco -r piper -s scene.xml -p ros2_control

运行成功,会启动一个MuJoCo仿真环境,并显示Piper机械臂在mujoco仿真环境当中。

请添加图片描述

3.2.2. 启动仿真基座并开启ros2插件模式

在启动仿真基座并开启ros2插件模式时,请使用如下命令:

cd agilex_ws
source install/setup.bash
ros2 launch agilex_piper_mujoco bringup_agilex_mujoco_cartesian_motion_controller.launch.py   agilex_mujoco_exec:=/home/agilex/project/piper/agilex_mujoco/simulate/build/agilex_mujoco   #当前项目使用的是绝对路径,请根据自己的实际路径进行修改。

运行成功,会启动一个MuJoCo仿真环境,并显示Piper机械臂在mujoco仿真环境当中。在完成环境加载后就可以进行ros2控制了。

在这里插入图片描述

  • 发送末端位置
ros2 topic pub --once /agilex_piper_cartesian_motion_controller/target_frame \
  geometry_msgs/msg/PoseStamped "{
    header: {frame_id: 'base_link'},
    pose: {
      position: {x: 0.2, y: 0.0, z: 0.2},
      orientation: {x: 0.0, y: 1.0, z: 0.0, w: 0.0}
    }
  }"

  • 进行夹爪控制
# 开夹爪
ros2 topic pub --once /agilex_piper_gripper_position_controller/commands \
  std_msgs/msg/Float64MultiArray "{data: [0.035, -0.035]}"

# 关闭夹爪
ros2 topic pub --once /agilex_piper_gripper_position_controller/commands \
  std_msgs/msg/Float64MultiArray "{data: [0.0, 0.0]}"

在这里插入图片描述

  • 状态检测
ros2 topic echo /agilex_piper_cartesian_motion_controller/current_pose

在这里插入图片描述

4.后言

本项目基于多个优秀的开源项目进行学习、整合与实践,核心能力与技术成果均离不开原作者及开源社区的长期贡献。本文更多是在已有开源成果基础上的配置、适配与经验整理,希望能够为更多开发者提供一个更低门槛的学习与实践入口。也期待和大家在机械臂学习领域交流切磋、共同成长,有任何问题欢迎在评论区留言,一起探讨解惑、互助进步。

5.参考项目

  • https://github.com/unitreerobotics/unitree_mujoco
Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐