跳到主要内容

机械臂抓取与放置

在 Gazebo 中仿真 RML-63 机械臂的 pick-and-place 操作。使用 MoveIt2 进行运动规划,OMPL 生成关节轨迹,gz_ros2_control 驱动仿真中的机械臂和夹爪。

前提条件

  • 已完成 QIR SDK 安装
  • 已安装 MoveIt2:
    sudo apt install -y ros-jazzy-moveit
  • 已连接显示器(GUI 模式)

源码构建

步骤 1:克隆仓库

radxa@airbox$
# 仿真环境(如已构建可跳过)
git clone https://github.com/qualcomm-qrb-ros/qrb_ros_simulation.git

# Pick-and-place 示例
git clone -b jazzy-rel https://github.com/qualcomm-qrb-ros/qrb_ros_samples.git

步骤 2:构建

radxa@airbox$
# 构建仿真环境
cd qrb_ros_simulation
source /opt/ros/jazzy/setup.bash
colcon build

# 构建 pick-and-place 示例
cd ../qrb_ros_samples/robotics/simulation_sample_pick_and_place
source install/setup.bash
colcon build

运行

所有终端使用相同的 ROS 环境:

radxa@airbox$
source /opt/ros/jazzy/setup.bash
export ROS_DOMAIN_ID=55
export ROS_LOCALHOST_ONLY=1
source qrb_ros_simulation/install/setup.bash
source qrb_ros_samples/robotics/simulation_sample_pick_and_place/install/setup.bash

按顺序在四个独立终端中执行。

终端 1 — 在桌面终端中启动 Gazebo:

radxa@airbox$
ros2 launch qrb_ros_sim_gazebo gazebo_rml_63_gripper.launch.py \
robot_entity_name:=rml_63 \
world_model:=warehouse \
initial_x:=2.2 initial_y:=-2 initial_z:=1.025 \
initial_yaw:=3.14159 initial_pitch:=0.0 initial_roll:=0.0

RML-63 pick-and-place simulation

Gazebo 窗口打开后,点击左下角播放按钮启动仿真。

robot_entity_name:=rml_63 必须显式指定。官方默认值 rml_63_arm_robot 与示例的 MoveIt URDF/SRDF 名称不匹配。

终端 2 — 等待控制器管理器就绪后加载控制器:

radxa@airbox$
# 等待控制器管理器
until ros2 service list | grep -qx '/controller_manager/list_controllers'; do
sleep 1
done

# 加载控制器
ros2 launch qrb_ros_sim_gazebo gazebo_rml_63_gripper_load_controller.launch.py

终端 3 — 启动 MoveIt2:

radxa@airbox$
ros2 launch simulation_sample_pick_and_place simulation_sample_pick_and_place.launch.py

终端 4 — 等待 MoveIt 就绪后执行抓取序列:

radxa@airbox$
# 等待 move_action 出现
until ros2 action list -t | grep -q '^/move_action '; do
sleep 1
done

ros2 run simulation_sample_pick_and_place qrb_ros_arm_pick_place

官方 launch 仅启动 move_group,不会自动执行 pick-and-place。需手动运行 ros2 run 命令。

执行流程

示例按以下顺序执行 9 个规划与执行步骤:

  1. 归位(ready pose)
  2. 打开夹爪
  3. 移动至抓取位置
  4. 闭合夹爪
  5. 抬起物体
  6. 移动至放置位置
  7. 释放物体(打开夹爪)
  8. 再次抬起
  9. 回到 ready 位姿

终端 4 输出 Pick and place task completed!,退出码 0 即为成功。

可用接口

话题 / 动作 / 服务类型
/joint_statesJointState
/rm_group_controller/follow_joint_trajectoryFollowJointTrajectory
/hand_controller/follow_joint_trajectoryFollowJointTrajectory
/move_actionMoveGroup action

限制

  • 示例使用固定关节角度目标,不包含物体生成、附着或抓取验证。
  • 未配置 Octomap 三维传感器插件,不支持动态避障。
  • MoveIt 日志中的 No kinematics plugins defined 警告不影响关节目标规划,但 Cartesian IK 扩展需额外配置。

    您需要登录 GitHub 才能发表评论。如果您已登录,请忽略此消息。

    Radxa-docs © 2026 by Radxa Computer (Shenzhen) Co.,Ltd. is licensed under CC BY 4.0