玩转PiPER|MuJoCo仿真环境搭建,ROS2控制一步到位
1.前言本项目是松灵 PiPER 机械臂系列的MuJoCo仿真基座项目旨在提供松灵PiPER机械臂系列的通用Mujoco仿真环境。目前项目完成c版本的仿真环境启动并基于测试版ros2控制插件完成ros2对仿真机械臂的控制测试。下面将逐步指导完成但前版本的Agilex机械臂Mujoco仿真环境构建并利用测试版ros2插件完成ros2对仿真机械臂的控制。2.项目结构项目结构如下agilexagilex-Bellator-N176B:~/project/agilex_arm_mujoco$ tree-L3├── 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.h3.项目构建3.1 agilex_arm_mujoco项目构建agilex_arm_mujoco项目的构建过程与unitree_mujoco项目构建过程一致下面我们给出详细的构建步骤3.1.1. 获取agilex_arm_mujoco项目mkdiragilex_armcdagilex_armgitclone 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插件模式改为OFFoption(AGILEX_ENABLE_ROS2_CONTROLBuild ROS2 control pluginON)# 改为option(AGILEX_ENABLE_ROS2_CONTROLBuild ROS2 control pluginOFF)完成文件编辑后进行编译cdagilex_arm_mujoco/simulatemkdirbuildcdbuild cmake..make-j42. 开启ros2插件模式默认情况下是开启ros2插件模式无需进行任何文件编辑操作。但需完成ros2插件的依赖构建。获取agilex_ws完成依赖的获取cdagilex_armgitclone https://github.com/yanyuze1/agilex_ws.git获取到依赖仓库后进行依赖构建cdagilex_ws colcon build --symlink-install --packages-up-to mujoco_ros2_control agilex_piper_mujocosourceinstall/setup.bash完成依赖构建后进行仿真基座的编译cdagilex_mujoco/simulatemkdirbuildcdbuild cmake..make-j43.2 运行agilex_arm_mujoco项目运行agilex_arm_mujoco当前提供两种方式:一种是仅启动仿真基座一种是启动仿真基座并开启ros2插件模式。3.2.1. 仅启动仿真基座在仅启动仿真基座时请使用如下命令./agilex_mujoco-h./agilex_mujoco-rpiper-sscene.xml ./agilex_mujoco-rpiper-sscene.xml-pros2_control运行成功会启动一个MuJoCo仿真环境并显示Piper机械臂在mujoco仿真环境当中。3.2.2. 启动仿真基座并开启ros2插件模式在启动仿真基座并开启ros2插件模式时请使用如下命令cdagilex_wssourceinstall/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 topicecho/agilex_piper_cartesian_motion_controller/current_pose4.后言本项目基于多个优秀的开源项目进行学习、整合与实践核心能力与技术成果均离不开原作者及开源社区的长期贡献。本文更多是在已有开源成果基础上的配置、适配与经验整理希望能够为更多开发者提供一个更低门槛的学习与实践入口。也期待和大家在机械臂学习领域交流切磋、共同成长有任何问题欢迎在评论区留言一起探讨解惑、互助进步。5.参考项目https://github.com/unitreerobotics/unitree_mujoco