☰
ROS2 Lyrical实验6机械臂MoveIt2
2026/9/28 18:40:33 网站建设 项目流程

初段:

实验6 ROS2 Lyrical MoveIt Task Constructor(MTC) 机械臂抓取放置仿真实验

全程不手写一行代码,仅使用moveit_task_constructor_demo官方原生示例,仅执行终端命令,观察RViz可视化
执行命令:

ros2 launch moveit_task_constructor_demo demo.launch.py ros2 launch moveit_task_constructor_demo run.launch.py exe:=pick_place_demo

实验平台:Ubuntu 26.04 + ROS2 Lyrical + MoveIt2 + MoveIt Task Constructor
实验学时:2学时

一、实验目的

  1. 认识MoveIt Task Constructor(MTC),理解任务分阶段规划思想,对比传统MoveGroup的一体化Pick/Place。
  2. 掌握MTC官方示例的启动流程,学会使用RViz的MTC可视化面板观察任务执行。
  3. 直观观察完整抓取放置任务的全过程:场景添加物体→预抓取→生成抓取位姿→抓取→搬运→放置释放。
  4. 理解MTC的Stage(阶段)机制,能识别任务在哪一阶段成功/失败,掌握基础故障定位。
  5. 理解规划场景、碰撞检测、物体附着(attach/detach)在抓取任务中的作用。

二、实验原理

MoveIt Task Constructor(MTC)是MoveIt2官方推荐的复合任务规划框架,把机器人复杂任务拆成多个独立Stage(阶段)串行执行。
本实验直接使用官方预编译好的pick_place_demo,无需编写C++/Python代码。
任务内置阶段(源码已经写好,我们只看运行效果):

  1. ModifyPlanningSceneStage:在规划场景中添加待抓取方块物体
  2. MoveToStage:机械臂移动到预抓取安全关节位姿
  3. GenerateGraspStage:自动生成多组候选抓取姿态
  4. MoveRelativeStage:笛卡尔直线逼近物体
  5. AllowCollisionStage:临时允许夹爪与目标物体接触碰撞
  6. ModifyPlanningSceneStage(attach):将方块绑定到夹爪末端连杆,抓取后物体跟随机械臂运动
  7. MoveToStage:抬起物体,移动至放置目标位置
  8. MoveRelativeStage:下降到放置高度
  9. ModifyPlanningSceneStage(detach):解除物体绑定,释放方块
  10. MoveToStage:机械臂退回安全位姿

核心特点:某一阶段规划失败时,MTC会自动尝试下一个候选抓取姿态;所有阶段都做碰撞检测,MTC RViz面板实时展示每个stage的状态(绿色成功/红色失败)。

三、实验环境

  • 操作系统:Ubuntu 26.04
  • ROS版本:ROS2 Lyrical
  • 依赖软件包(一次性安装)
sudoaptinstallros-lyrical-moveit-task-constructor ros-lyrical-moveit-task-constructor-demo
  • 工具:RViz2 + MoveIt Task Constructor RViz插件
  • 机器人模型:demo内置Panda(Franka)七自由度机械臂+二指夹爪(官方自带模型,无需额外下载URDF)

四、实验步骤(全程不编写任何代码,只敲终端命令)

说明:所有程序、任务逻辑、机器人模型、配置文件均来自moveit_task_constructor_demo官方包,已经预编译完成。

步骤1:安装依赖包(只执行一次)

sudoaptinstallros-lyrical-moveit-task-constructor ros-lyrical-moveit-task-constructor-demo

步骤2:启动MTC Demo环境【终端1,保持打开】

ros2 launch moveit_task_constructor_demo demo.launch.py

执行后自动完成:

  1. 加载Panda机械臂URDF、SRDF、MoveIt配置
  2. 启动move_group节点、TF、joint_states
  3. 自动打开RViz2
    ✅ RViz操作:添加MoveItTaskConstructorPanel面板(如未自动加载,顶部Panel→Add New Panel选择),用于查看任务各个Stage状态。
ros2@ros2-cslg:~$ ros2 launch moveit_task_constructor_demo demo.launch.py package.xml panda_config.yaml run.launch.py ros2@ros2-cslg:~$ ros2 launch moveit_task_constructor_demo


步骤3:运行pick_place抓取放置任务【新开终端2】

ros2 launch moveit_task_constructor_demo run.launch.py exe:=pick_place_demo
ros2@ros2-cslg:~$ ros2 launch moveit_task_constructor_demo run.launch.py[INFO][launch]: All log files can be found below /home/ros2/.ros/log/2026-09-27-09-46-22-524335-ros2-cslg-8743[INFO][launch]: Default logging verbosity issetto INFO[ERROR][launch]: Caught exceptioninlaunch(see debugfortraceback): Included launch description missing required argument'exe'(description:'no description given'), given:[]
观察现象(重点记录)
  1. RViz场景出现红色方块(待抓取物体);
  2. MTC面板依次显示各个Stage,成功阶段变为绿色;
  3. 机械臂动作顺序:
    • 机械臂回到home安全位姿
    • 移动到物体上方预抓取位置
    • 末端沿直线向下逼近方块
    • 夹爪闭合,抓住方块,方块绑定到夹爪
    • 抬升方块,运动到放置位置上方
    • 向下移动,夹爪打开,方块脱离夹爪落到放置点
    • 机械臂抬起,回到安全姿态
  4. 终端打印日志,最终输出Task finished successfully。

步骤4:重复执行,观察任务重试机制(可选)

在终端2,重复多次执行同一条启动命令:

ros2 launch moveit_task_constructor_demo run.launch.py exe:=pick_place_demo

观察:MTC每次会生成不同候选抓取姿态;个别抓取姿态碰撞失败时,MTC自动切换下一组抓取方案,直到找到可行轨迹。

步骤5:人为制造任务失败(拓展选做,观察报错)

无需改代码,直接在RViz手动添加障碍物,观察MTC阶段变红。

  1. 在RViz MotionPlanning面板 → Scene Objects,添加立方体障碍物,放在机械臂运动路径中间;
  2. 再次执行pick_place_demo任务;
  3. 观察:MTC面板某Stage变红,终端提示规划失败,识别是哪个阶段发生碰撞。

五、实验现象记录(写进实验报告)

  1. RViz初始画面:Panda机械臂、MTC任务面板、场景红色方块;
  2. 抓取过程截图:预抓取位姿、夹爪夹持方块、搬运途中、放置释放后的画面;
  3. MTC面板截图:各Stage状态(绿色成功);
  4. 终端日志截图:任务成功提示;
  5. 【拓展】添加障碍物后的失败现象:某Stage变红,任务规划失败。

六、思考题

  1. MTC将抓取任务拆分为多个Stage,相比传统MoveGroup的Pickup Action,有什么优势?
  2. 抓取阶段attach物体、放置阶段detach物体的作用是什么?
  3. AllowCollisionStage为什么只临时允许夹爪和物体碰撞,而不是全局关闭碰撞检测?
  4. MTC任务执行中,如果其中一个Stage规划失败,MTC会如何处理?
  5. 在本实验中,没有编写任何代码,任务逻辑来自哪里?

七、实验报告要求

  1. 实验目的、实验原理;
  2. 写出两条核心启动命令;
  3. 插入RViz截图(MTC面板、机械臂抓取不同阶段);
  4. 描述完整抓取放置实验现象;
  5. 回答思考题;
  6. 记录实验中遇到的问题与解决办法。

八、常见故障排查

  1. RViz看不到MTC面板:在RViz顶部菜单Panels -> Add New Panel,选择MoveItTaskConstructorPanel
  2. 启动提示包找不到:确认包安装成功,ros2 pkg list | grep moveit_task_constructor_demo检查包存在
  3. 任务规划超时失败:可在RViz调整MoveIt规划时间,或者观察物体位置是否超出工作空间
  4. RViz机械臂不显示:检查demo.launch是否正常启动,TF、robot_state_publisher是否正常

思考题参考答案(可直接粘贴报告)

  1. MTC把任务拆成独立Stage,可视化每个阶段的成功/失败,方便定位故障;支持候选方案自动重试,可灵活增删任务步骤,适合工业复杂抓取装配任务;传统Pickup是封装好的黑盒,很难调试内部过程。
  2. attach:抓取时将目标物体绑定到夹爪连杆,让MTC规划场景认为物体属于夹爪,机械臂移动时物体跟随夹爪一起运动;detach放置完成后解除绑定,物体独立留在场景中。
  3. 只临时局部允许碰撞:仅允许夹爪与被抓物体接触,其余连杆仍然保持碰撞检测。如果全局关闭碰撞,机械臂会和环境障碍物相撞,存在安全风险。
  4. MTC会尝试当前Stage下其他候选方案(如其他抓取姿态),如果全部候选方案都失败,则整个任务终止,该Stage标记红色失败。
  5. 任务逻辑全部写在moveit_task_constructor_demo官方源码中,已经提前编译成可执行文件,我们只通过launch命令直接运行,不需要手动编写代码。

中段:

实验6 ROS2‑Lyrical MoveIt Task Constructor机械臂抓取放置实验

基于官方moveit_task_constructor_demo案例,启动命令:
ros2 launch moveit_task_constructor_demo demo.launch.py
ros2 launch moveit_task_constructor_demo run.launch.py exe:=pick_place_demo
实验环境:Ubuntu26.04 + ROS2‑Lyrical + MoveIt2 + MoveIt Task Constructor(MTC) + RViz2
学时:2学时

一、实验目的

  1. 理解MoveIt Task Constructor(MTC)框架思想:任务由多个阶段(stage)组合而成,替代传统单一Pickup/Place Action。
  2. 掌握MTC基本组件:Task、Stage、Property、MoveToStage、GenerateGraspStage、ModifyPlanningSceneStage等。
  3. 运行官方pick_place_demo示例,观察完整抓取‑放置任务的规划、碰撞检测、场景更新。
  4. 读懂MTC C++源码,理解抓取任务拆解:移动到预抓取→生成抓取姿态→接近物体→闭合夹爪→搬运→放置→释放。
  5. 学会修改参数(抓取距离、规划时间、目标位置),观察任务成功/失败现象,掌握简单调试方法。

二、实验原理

1.MTC简介

MoveIt Task Constructor(MTC)把复杂机器人任务拆分为一系列可配置的阶段(Stage),阶段可以串行、并行、支持失败回退,适合抓取、装配等复合任务。

  • Task:顶层容器,管理全部stage,执行整体规划。
  • MoveToStage:关节空间/笛卡尔空间运动。
  • GenerateGraspStage:自动生成多组抓取姿态。
  • ModifyPlanningSceneStage:附加/分离物体(抓取时把物体绑定到夹爪)。
  • AllowCollisionStage:临时允许部分碰撞(夹爪接触物体)。

传统MoveGroupInterface的Pick‑Place Action封装度高,黑盒;MTC显式定义每一步任务,方便调试、修改流程,是ROS2工业抓取主流方案。

2.pick_place_demo任务流程

  1. 规划场景添加待抓取方块物体;
  2. 机械臂运动到预抓取安全位置;
  3. 自动生成一组候选抓取姿态;
  4. 笛卡尔逼近运动到物体上方;
  5. 允许夹爪与物体碰撞,闭合夹爪;
  6. 将物体附加到末端夹爪连杆;
  7. 抬升物体,运动到放置目标点;
  8. 下降,打开夹爪,物体从夹爪分离;
  9. 机械臂退回安全姿态,任务结束。

全部阶段会做碰撞检测;某一stage失败会自动尝试下一个候选抓取姿态。

三、实验环境

  • OS:Ubuntu26.04
  • ROS2:Lyrical
  • 依赖包:moveit-task-constructor、moveit-full
  • 示例包:moveit_task_constructor_demo,内置pick_place_demo可执行文件
  • 可视化工具:RViz2(MTC插件用于观察任务阶段、轨迹、规划失败原因)

环境安装

sudo apt install ros-lyrical-moveit-task-constructor ros-lyrical-moveit-task-constructor-demo

四、实验步骤

步骤1:启动MTC Demo可视化环境

终端1,启动demo环境(加载机器人模型、MoveGroup、RViz2、MTC可视化插件)

ros2 launch moveit_task_constructor_demo demo.launch.py

RViz配置:确认加载MoveItTaskConstructorPanel面板,可以看到各个任务阶段、成功/失败状态。

步骤2:运行pick_place_demo抓取放置任务

新开终端2,运行官方pick‑place示例:

ros2 launch moveit_task_constructor_demo run.launch.py exe:=pick_place_demo
观察现象:
  1. RViz规划场景中出现红色方块待抓取物体;
  2. MTC面板看到各个stage依次变为绿色(成功);
  3. 机械臂运动:预抓取→接近→闭合夹爪抓取→搬运到放置点→释放物体;
  4. 终端输出任务规划耗时、抓取姿态尝试次数、任务结果Task finished successfully。

如果任务失败,MTC面板可以看到哪一个stage变红,定位失败环节。

步骤3:研读pick_place_demo核心源码

源码路径:/opt/ros/lyrical/src/moveit_task_constructor/moveit_task_constructor_demo/src/pick_place_demo.cpp

关键代码片段:

// 创建任务对象 mtc::Task task; task.setProperty("name", "pick_place_task"); // 1.添加物体到规划场景 auto add_object = std::make_unique<mtc::ModifyPlanningSceneStage>("add object"); // 2.移动到预抓取位姿 auto move_pre_pick = std::make_unique<mtc::MoveToStage>("move pre pick"); // 3.生成抓取姿态 auto generate_grasp = std::make_unique<mtc::GenerateGraspStage>("generate grasps"); // 4.笛卡尔逼近,靠近物体 auto approach = std::make_unique<mtc::MoveRelativeStage>("approach"); // 5.允许夹爪与物体碰撞,闭合夹爪 auto allow_collision = std::make_unique<mtc::AllowCollisionStage>("allow gripper collision"); // 6.把物体附加到夹爪连杆 auto attach_object = std::make_unique<mtc::ModifyPlanningSceneStage>("attach object"); // 7.抬升物体,搬运到放置位置 auto move_to_place = std::make_unique<mtc::MoveToStage>("move to place"); // 8.释放物体,打开夹爪,分离物体 auto detach_object = std::make_unique<mtc::ModifyPlanningSceneStage>("detach object"); // 将stage依次加入task task.add(std::move(add_object)); task.add(std::move(move_pre_pick)); //……加入其余stage // 执行任务规划 task.plan(); if (task.execute()) RCLCPP_INFO(rclcpp::get_logger("mtc_demo"),"任务执行成功");

步骤4:修改参数,对比实验(选做)

复制demo源码到自己工作空间,修改参数重新编译,观察任务结果。

  1. 修改GenerateGraspStage抓取距离;
  2. 修改物体放置目标pose;
  3. 缩短planning_time规划时间,制造规划失败场景;
  4. 在场景添加障碍物,观察MTC碰撞检测与候选姿态重试。

重新编译后运行:

colcon build --packages-select my_mtc_demo source install/setup.bash ros2 run my_mtc_demo pick_place_demo

步骤5:故障观察

人为制造失败场景,记录现象:

  1. 目标物体位置超出机械臂工作空间;
  2. 没有可用抓取姿态;
  3. 路径存在碰撞。>

在MTC面板观察哪个stage变红,理解失败属于哪一类问题。

五、实验记录

  1. 记录任务正常执行完整现象:RViz截图,MTC面板各stage状态截图;
  2. 记录终端输出:规划时间、尝试抓取姿态数量、任务返回结果;
  3. 修改参数后的现象对比(成功/失败);
  4. 记录1次任务失败案例:失败stage、报错信息,分析原因。

六、思考题

  1. MTC中Stage和Task是什么关系?对比传统MoveGroup Pickup Action,MTC有什么优势?
  2. ModifyPlanningSceneStage在抓取、释放时分别做了什么操作?为什么抓取时要attach物体?
  3. AllowCollisionStage作用是什么,为什么抓取物体时需要允许夹爪和物体发生碰撞?
  4. 如果任务某一个stage失败,MTC会如何处理?
  5. 结合本次实验,简单描述一个工业抓取任务如何拆分为MTC多个stage。

七、实验报告要求

  1. 实验目的、原理;
  2. 关键启动命令,摘抄核心MTC代码片段;
  3. RViz截图(MTC面板、机械臂抓取各阶段画面);
  4. 实验现象记录,回答思考题;
  5. 故障分析:记录遇到的问题、原因、解决方法。

八、常见问题排查

  1. RViz看不到MTC面板:确认moveit_task_constructor_rviz_plugin已安装,在面板中手动添加MoveItTaskConstructorPanel。
  2. 任务一直规划不结束:增大规划时间,检查物体是否超出机械臂工作范围。
  3. 抓取阶段失败:GenerateGraspStage没有生成有效抓取姿态,调整物体位置、抓取深度。
  4. 物体不会跟随夹爪运动:确认attach_objectstage执行成功。

高段:

实验6 ROS2‑Lyrical工业机械臂MoveIt2运动规划与抓取放置仿真实验

参考文档:ROS2 Lyrical第7章 MoveIt2机械臂运动规划与抓取仿真实操(CSDN‑ZhangRelay)
实验环境:Ubuntu26.04 + ROS2‑Lyrical + MoveIt2 + Gazebo Garden + ros2_control
实验类型:综合验证实验,2学时

一、实验目的

  1. 理解MoveIt2三层架构(用户接口层、核心算法层、硬件适配层),掌握move_group节点工作原理与数据流。
  2. 掌握MoveIt Setup Assistant配置助手,完成机械臂MoveIt全套配置包生成(SRDF、规划群组、控制器、启动文件)。
  3. 使用RViz2 MotionPlanning插件完成可视化交互规划:拖拽目标、轨迹规划、碰撞检测可视化。
  4. 理解ros2_control+JointTrajectoryController,实现MoveIt2与Gazebo物理仿真闭环对接。
  5. 掌握MoveGroupInterface C++ API实现点位运动;掌握PlanningSceneInterface添加障碍物实现避障。
  6. 完成Pick‑Place抓取放置完整任务仿真,理解抓取任务流程:场景建模→抓取位姿→接近‑抓取‑抬起‑移动‑放置‑退回。

二、实验原理

1.MoveIt2三层架构

1)用户接口层:C++ MoveGroupInterface、Python moveit_commander、RViz2插件、Pickup/Place Action;
2)核心算法层(move_group):OMPL运动规划器、KDL逆运动学求解、FCL碰撞检测、规划场景管理;
3)硬件适配层:ros2_control、JointTrajectoryController、TF2、joint_states关节状态反馈。

数据流:用户下发目标位姿→运动学校验→碰撞检测→无碰轨迹规划→时间参数化→下发轨迹控制器→Gazebo/硬件执行→关节状态回传更新规划场景。

2.MoveIt Setup Assistant

图形化工具导入URDF/Xacro,生成SRDF语义机器人描述、规划群组、自碰撞矩阵、控制器yaml、Python launch全套文件,共7步配置流程。

3.规划场景与避障

PlanningSceneInterface可以编程添加立方体、球体等碰撞物体;Octomap插件将RGBD点云转为三维占用网格,实现动态障碍物避障。

4.Pick&Place任务流程

场景建模(桌子+待抓取物体)→生成多组候选抓取姿态→接近物体→闭合夹爪→抬升物体→运动至放置点→下降、张开夹爪→机械臂退回安全位置。MoveIt2通过Pickup、PlaceAction封装整套逻辑。

三、实验设备与软件

  1. 软件环境:Ubuntu26.04,ROS2 Lyrical,MoveIt‑full,Gazebo Garden,ros2_control
  2. 仿真对象:rosbook_arm六自由度机械臂+二指夹爪
  3. 功能包集合:| 功能包 | 功能说明 |
    | — | — |
    | rosbook_arm_description | URDF/Xacro机器人模型 |
    | rosbook_arm_moveit_config | Setup Assistant生成MoveIt配置包 |
    | rosbook_arm_controllers | ros2_control控制器配置yaml |
    | rosbook_arm_gazebo | Gazebo世界与仿真启动脚本 |
    | rosbook_arm_pick_and_place | 用户编写运动规划、抓取放置代码 |

四、实验步骤

步骤1:环境安装与工作空间准备

1.安装MoveIt2完整包

sudo apt install ros‑lyrical‑moveit‑full ros‑lyrical‑moveit‑setup‑assistant

2.创建colcon工作空间,下载机械臂源码,安装全部依赖

mkdir -p ~/ws_arm/src # 将机械臂源码放置src目录 cd ~/ws_arm rosdep install --from-paths src --ignore-src -r -y colcon build source install/setup.bash

步骤2:MoveIt Setup Assistant生成配置包(7步配置)

启动配置助手:

ros2 launch moveit_setup_assistant setup_assistant.launch.py

1.新建配置包Create New MoveIt Configuration Package,导入rosbook_arm_base.urdf.xacro;
2.Self‑Collisions自碰撞矩阵:采样10000次,自动生成连杆禁用碰撞对,输出SRDF;
3.Virtual Joints虚拟关节:固定底座机械臂无需配置;移动底盘才添加;
4.Planning Groups规划群组,创建2个群组:

  • arm:机械臂本体关节,运动学求解器KDL;
  • gripper:夹爪开合关节;
    5.Robot Poses预定义位姿:添加home(回零)、grasp_prepare抓取预备位姿;
    6.End Effectors末端执行器:指定gripper群组,父连杆tool_link;
    7.生成输出配置包,得到config、launch目录、package.xml。

输出内容:SRDF、OMPL规划参数、控制器配置、demo.launch.py等全套启动脚本。

步骤3:RViz2可视化交互规划(Demo演示模式,无物理仿真)

启动demo演示,使用内置虚拟控制器:

ros2 launch rosbook_arm_moveit_config demo.launch.py

1.在RViz2打开MotionPlanning面板;
2.Query标签:拖拽6D交互标记设置末端目标位姿;
3.点击Plan仅规划轨迹;Plan and Execute规划+执行;
4.观察颜色状态:白色=当前状态,橙色=目标位姿,绿色=规划轨迹,红色=碰撞/越界;
5.Scene Objects选项卡手动添加立方体障碍物,再次规划观察避障效果。

步骤4:Gazebo+ros2_control物理仿真集成

1.关键配置说明

  • URDF/Xacro中嵌入gazebo_ros2_control插件,加载controllers.yaml;
  • JointTrajectoryController分别配置arm_controller、gripper_controller;
    2.启动Gazebo完整仿真环境
ros2 launch rosbook_arm_gazebo rosbook_arm_empty_world.launch.py

自动拉起Gazebo、controller_manager、move_group节点、RViz2;此时MoveIt轨迹下发到Gazebo物理引擎执行,实现闭环仿真。

步骤5:C++ MoveGroupInterface API编程实验

编写节点,实现:①回home预定义位姿;②指定末端目标位姿规划运动;③编程添加碰撞障碍物。

核心代码片段:

#include <rclcpp/rclcpp.hpp> #include <moveit/move_group_interface/move_group_interface.h> #include <moveit/planning_scene_interface/planning_scene_interface.h> int main(int argc,char** argv) { rclcpp::init(argc,argv); auto node = std::make_shared<rclcpp::Node>("moveit_api_demo"); moveit::planning_interface::MoveGroupInterface arm_group(node,"arm"); arm_group.setPlanningTime(5.0); //1.回到预定义home位姿 arm_group.setNamedTarget("home"); arm_group.move(); //2.设置末端目标位姿规划 geometry_msgs::msg::Pose target_pose; target_pose.position.x=0.776; target_pose.position.y=0.432; target_pose.position.z=2.718; target_pose.orientation.w=0.9993; arm_group.setPoseTarget(target_pose); moveit::planning_interface::MoveGroupInterface::Plan plan; bool ok = (arm_group.plan(plan)==moveit::core::MoveItErrorCode::SUCCESS); if(ok) arm_group.execute(plan); //3.PlanningSceneInterface添加立方体障碍物 moveit::planning_interface::PlanningSceneInterface scene; moveit_msgs::msg::CollisionObject box; box.id="obstacle_box"; box.header.frame_id="base_link"; shape_msgs::msg::SolidPrimitive prim; prim.type=prim.BOX; prim.dimensions={0.2,0.2,0.2}; geometry_msgs::msg::Pose box_pose; box_pose.orientation.w=1.0; box_pose.position.x=0.7;box_pose.position.y=-0.5;box_pose.position.z=1.0; box.primitives.push_back(prim); box.primitive_poses.push_back(box_pose); box.operation=box.ADD; std::vector<moveit_msgs::msg::CollisionObject> objs{box}; scene.addCollisionObjects(objs); rclcpp::shutdown(); return 0; }

CMakeLists.txt关键配置:

find_package(moveit_ros_planning_interface REQUIRED) ament_target_dependencies(demo_node rclcpp moveit_ros_planning_interface geometry_msgs)

编译运行:

colcon build && source install/setup.bash ros2 run rosbook_arm_pick_and_place demo_node

观察RViz2,机械臂运动,场景出现障碍物,再次规划,观察避障。

步骤6:Pick‑Place抓取放置全流程仿真

两种模式:demo虚拟模式 / Gazebo物理仿真模式

1)演示模式(仅运动学可视化)
终端1:

ros2 launch rosbook_arm_moveit_config demo.launch.py

终端2运行pick_and_place程序:

ros2 run rosbook_arm_pick_and_place pick_and_place.py

2)Gazebo物理仿真模式
终端1启动Gazebo抓取世界:

ros2 launch rosbook_arm_gazebo rosbook_arm_grasping_world.launch.py

终端2运行抓取程序:

ros2 run rosbook_arm_pick_and_place pick_and_place.py

任务现象:程序自动添加桌子、待抓取方块物体;机械臂运动至预抓取点,接近物体,夹爪闭合,抬起物体;运动至放置位置,下降,夹爪打开,退回安全位姿。

原理:使用Pickup、PlaceAction,多候选抓取姿态,碰撞检测,抓取时物体附加到夹爪连杆上。

拓展选做:Octomap点云避障

配置sensors_rgbd.yaml,订阅深度相机点云话题/rgbd_camera/depth/points,PointCloudOctomapUpdater插件生成八叉树碰撞地图,实现动态未知障碍物避障。

五、实验现象记录

1.记录Setup Assistant生成的SRDF中自碰撞矩阵;
2.记录RViz交互规划截图:目标位姿、绿色无碰轨迹、红色碰撞提示;
3.记录C++ API运行输出,障碍物添加后规划路径变化;
4.记录Pick‑Place仿真全过程:预抓取→闭合夹爪→抬升→放置退回;
5.记录规划失败现象:目标不可达、路径发生碰撞,思考失败原因。

六、思考题

  1. 简述MoveIt2的move_group三层架构与完整数据流。
  2. Setup Assistant中Self‑Collision采样的作用是什么?采样次数对规划效率的影响?
  3. demo.launch.py与Gazebo仿真启动区别?虚拟控制器与真实ros2_control控制器差异。
  4. Pick任务时,物体如何跟随夹爪运动?规划场景发生什么变化?
  5. 规划时出现红色碰撞,有哪些排查思路?

七、实验报告要求

  1. 写出实验目的、原理;
  2. 关键命令、关键代码片段,附上RViz/Gazebo截图;
  3. 记录实验现象,回答思考题;
  4. 分析遇到问题:如规划失败、轨迹抖动、夹爪不动作,写出原因与解决方法。

八、常见故障排查

  1. move_group启动失败:检查SRDF、规划群组关节名称是否和URDF一致;
  2. Gazebo中机械臂不运动:确认controller_manager正常加载JointTrajectoryController,joint_states话题有输出;
  3. Pick抓取失败:抓取姿态不合适,物体与夹爪碰撞,需要调整pre‑grasp预备距离。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询