1. 首先Ros2的安装参考步骤,可以参考本人的这一篇博客:对于ROS2的学习日记
  2. 仿真安装的学习文章参考的是这一篇文章【机器人】ROS2机械臂控制(MoveIt2)从入门到实战需要注意的是,要根据自己linux系统版本去下载对应的Gazebo,尽量选择unbutun22.04的版本比较好一些
  3. 参考机械臂JAKA ROS 2 说明手册对于使用节卡机器人来说,按照这里面的手册去安装Gazebo和 MoveIt2
http://packages.osrfoundation.org/gazebo/ubuntu-stable
Clearsigned file isn't valid, got 'NOSPLIT'
repository is not signed
这个问题是很容易遇到的


验证 MoveIt2 安装:终端输入 ros2 launch moveit2_tutorials demo.launch.py rviz_tutorial:=true,能启动 RViz 并显示机械臂模型,即视为安装成功。
问题一: 运行会出错Package ‘moveit2_tutorials’ not found: "package ‘moveit2_tutorials’ not found, searching: [‘/opt/ros/humble’]"这是因为你只 source 了 /opt/ros/humble,但 MoveIt2 tutorials 没有安装/没有在工作空间里编译。

先运行一下这两行代码
sudo apt update
sudo apt install ros-humble-moveit ros-humble-moveit-resources-panda-moveit-config

这时候先不要跑:ros2 launch moveit2_tutorials demo.launch.py可以直接用已安装的 Panda 配置测试 MoveIt:ros2 launch moveit_resources_panda_moveit_config demo.launch.py

问题二 rviz2 打开就是黑屏然后就关掉了,是怎么回事

  • 按这个顺序试:
    export LIBGL_ALWAYS_SOFTWARE=1
    rviz2
  • 如果能打开,再运行:
    export LIBGL_ALWAYS_SOFTWARE=1
    ros2 launch moveit_resources_panda_moveit_config demo.launch.py
  • 建议永久写入: echo ‘export LIBGL_ALWAYS_SOFTWARE=1’ >> ~/.bashrc
    source ~/.bashrc
RViz 是一个通用的三维可视化工具,而 MoveIt2 是负责运动规划、碰撞检测和轨迹生成的核心框架。两者必须协同工作才能实现完整的机器人操作功能。
简单来说:
RViz 是“眼睛”:它负责显示机器人的模型、环境、路径和状态,但它本身不具备计算能力。
MoveIt2 是“大脑”:它负责接收目标位姿、规划无碰撞路径、生成关节轨迹,并将结果发送给控制器或可视化到 RViz 中。

测试 ROS2 + Gazebo 联动

安装 Gazebo ROS 包:
sudo apt install ros-humble-gazebo-ros-pkgs
测试:ros2 launch gazebo_ros gazebo.launch.py
另开终端:ros2 topic list

如果能看到 Gazebo 相关话题,例如:
/clock
/gazebo/...
说明 ROS2 和 Gazebo 通了。

仿真节卡 C12 + ROS2 + MoveIt2 + Gazebo 全链路机械臂控制(这一部分就是对JAKA ROS 2 说明手册部分说明)jaka_ros2 = 节卡官方给 ROS2 做的一整套“机械臂软件接口包(Software Stack)

这一部分主要是安装jaka_ros2
1.安装依赖
sudo apt update
sudo apt install -y \
  git python3-colcon-common-extensions python3-rosdep \
  ros-humble-moveit \
  ros-humble-ros-gz \
  ros-humble-ros2-control \
  ros-humble-ros2-controllers

2. 下载并编译 jaka_ros2
mkdir -p ~/jaka_ws/src
cd ~/jaka_ws/src
git clone https://github.com/JAKARobotics/jaka_ros2.git
cd ~/jaka_ws
sudo apt update
sudo apt install -y \
  python3-colcon-common-extensions \
  python3-vcstool \
  ros-humble-xacro \
  ros-humble-joint-state-publisher \
  ros-humble-joint-state-publisher-gui \
  ros-humble-robot-state-publisher \
  ros-humble-rviz2 \
  ros-humble-moveit \
  ros-humble-ros2-control \
  ros-humble-ros2-controllers \
  ros-humble-controller-manager \
  ros-humble-gazebo-ros-pkgs \
  ros-humble-gazebo-ros2-control
source /opt/ros/humble/setup.bash
colcon build --symlink-install

3编译成功后:
source install/setup.bash
ros2 pkg list | grep jaka

第一步:先启动 MoveIt2(只验证模型 + 规划)先开一个新终端:

cd ~/jaka_ws
source /opt/ros/humble/setup.bash
source install/setup.bash
ros2 launch jaka_c12_moveit_config demo.launch.py

在这里插入图片描述

1.测试 MoveIt2 是否正常
在 RViz右侧:Motion Planning,然后:Planning Group → jaka_c12,拖动末端(会有一个彩色小球/坐标轴)
点击:Plan,如果机械臂出现绿色轨迹说明:
URDF ✓
MoveIt2 ✓
IK逆解 ✓
路径规划 ✓

第二步:准备进入 Gazebo,执行一下:

#确认节卡官方到底把 Gazebo 启动文件放在哪。
find ~/jaka_ws/src/jaka_ros2-main -name "*.launch.py"

安装了Gazebo,为什么还要用这个find ~/jaka_ws/src/jaka_ros2 -name "*.launch.py"找一下?:Gazebo是基本的环境,jaka_ros是基于仿真物理环境gazebo写的

几个关键文件
jaka_c12_moveit_config/launch/gazebo.launch.py#只启动 RViz + MoveIt2
jaka_c12_moveit_config/launch/demo_gazebo.launch.py #只启动 Gazebo
并加载 C12 模型
jaka_c12_moveit_config/launch/spawn_controllers.launch.py #同时启动:Gazebo、MoveIt2、RViz、控制器

第三步:现在下一步(开始真正仿真),先把刚才 RViz 关掉。然后新开终端:
RViz和gazebo会一起启动,gazebo会模拟真实世界

cd ~/jaka_ws
source /opt/ros/humble/setup.bash
source install/setup.bash
ros2 launch jaka_c12_moveit_config demo_gazebo.launch.py

遇到的错误我是用智能体解决的
问题一:

ros2 launch jaka_c12_moveit_config demo_gazebo.launch.py
ImportError: cannot import name 'generate_demo_gazebo_launch'
from 'moveit_configs_utils.launches'
机器人配置包(jaka_c12_moveit_config)和 MoveIt2 版本不兼容

解决办法
cd ~/jaka_ws/src/jaka_ros2-main/src/jaka_c12_moveit_config/launch
ls
你会看到demo_gazebo.launch.py
nano demo_gazebo.launch.py

将里面的内容换成:
from moveit_configs_utils import MoveItConfigsBuilder
from moveit_configs_utils.launches import generate_demo_launch
def generate_launch_description():
    moveit_config = MoveItConfigsBuilder("jaka_c12").to_moveit_configs()
    return generate_demo_launch(moveit_config)

问题二:
plugin标签用于指定底层的硬件接口实现,它必须与你实际运行的仿真器或真实硬件相匹配。你当前使用的是 Gazebo 进行仿真,但配置文件 jaka_c12.ros2_control.xacro 中却声明了 ign_ros2_control/IgnitionSystem。这是 Ignition Gazebo(现更名为 Gz Sim)专用的插件,因此会导致你运行的经典版 Gazebo 无法正确识别和加载硬件接口,从而引发控制节点报错或机械臂无法运动。

terminate called after throwing:Missing <plugin> tag of <hardware> element in your URDF#URDF / xacro 里 没有正确配置 ros2_control 硬件插件
ros2 launch jaka_c12_moveit_config demo_gazebo.launch.py --debug
#把输出结果给AI
nano ~/jaka_ws/src/jaka_ros2-main/src/jaka_c12_moveit_config/config/jaka_c12.ros2_control.xacro
<plugin>ign_ros2_control/IgnitionSystem</plugin>
<plugin>mock_components/GenericSystem</plugin>
现在用的是:ign_ros2_control/IgnitionSystem,但我运行的是:Gazebo (ros2_control_node)
必须改成:<plugin>gazebo_ros2_control/GazeboSystem</plugin>
<plugin>mock_components/GenericSystem</plugin>同时也要删除掉
且在代码里面
use_gazebo:=False
use_rviz_sim:=False都改为true

● 问题总结

  1. gazebo_ros2_control 插件注册失败(核心问题)

  现象:ros2_control_node 崩溃 / Gazebo 中硬件接口加载失败

  原因:gazebo_hardware_plugins.xml 的 pluginlib 资源未被正确注册。package.xml 缺少 <pluginlib> export,CMakeLists.txt 的 pluginlib_export_plugin_description_file() 参数也写错了。

  修复:
  - gazebo_system.cpp 添加第二个注册宏(关键一行代码):
  PLUGINLIB_EXPORT_CLASS(gazebo_ros2_control::GazeboSystem, gazebo_ros2_control::GazeboSystemInterface)
  - package.xml 添加 <pluginlib plugin="${prefix}/gazebo_hardware_plugins.xml"/>
  - CMakeLists.txt 修正为 pluginlib_export_plugin_description_file(gazebo_ros2_control gazebo_hardware_plugins.xml)

  2. move_group 没有使用仿真时钟

  现象:RViz 里动了,Gazebo 不动

  原因:move_group 的 use_sim_time: False,而 Gazebo 的 controller_manager 用 use_sim_time: True。MoveIt 发送的轨迹时间戳和 Gazebo 期望的不一致,导致执行失败。

  修复:重写 move_group.launch.py 加入 use_sim_time 参数支持,demo_gazebo.launch.py 中传递 use_sim_time: true

  3. demo_gazebo.launch.py 原文件架构错误

  现象:直接调用系统的 generate_demo_launch,会启动独立的 ros2_control_node 而不是使用 Gazebo 内置的 controller_manager

  修复:重写 launch 文件,正确启动 Gazebo → 生成机器人 → Gazebo 内部提供 controller_manager → 启动 MoveGroup + RViz

改完一定要做:

cd ~/jaka_ws
colcon build
source install/setup.bash
ros2 launch jaka_c12_moveit_config demo_gazebo.launch.py

在这里插入图片描述
ROS2 和 MoveIt2到真实机械臂

  • 不需要 Gazebo,因为有真实的机械臂数据

  • 要看一下机械臂控制器版本(在jaka zu APP中右下角可以看到)和jaca_ros2要求的控制器版本是否匹配,在APP当中的设置里面可以更改
    在这里插入图片描述

  • 伺服模式(Servo Mode)” 指的是一种高频、连续、实时流式的运动控制方式。像“握着手推车”。你没有给最终目的地,而是每秒发1000 次微小的指令(“向左挪 0.1 毫米”、“再向左挪 0.1毫米”)。你的手推到哪里,车子就实时跟到哪里,完全听候外部的即时指令。

和真实机械臂连接注意的事项

  • 电脑IP地址要和机械臂IP地址一样,要改电脑IP地址
  • 插上网线和控制柜
  • 要下载JAKA zu APP一同,操作就会很方便,更新控制器的时候要联系客服让他们更新比较好
  • 建议用智能体去改错误,真的很方便,很快
  • joint操作机械臂很方便,通过调节joint六个关节比较好一些在这里插入图片描述
Logo

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

更多推荐