2.8.1. MTC 基础
MTC(MoveIt Task Constructor)适合把“到达预抓取位 → 接近目标 → 闭合夹爪 → 抬升 → 放置”这类多阶段任务拆成若干 Stage,并为每个 Stage 定义不同的约束、采样方法和连接策略
它和前面 MoveGroupInterface 的关系可以简单理解为:
MoveGroupInterface更适合单段运动,例如“从当前位置移动到某个位姿”MTC更适合完整作业流程,例如“抓取一个番茄”这种包含多个步骤、多个状态切换的任务
2.8.2. Stage
- CurrentState:读取当前机器人状态,作为任务起点
- MoveTo:移动到命名姿态、关节目标或末端目标
- Connect:将两个阶段之间用规划器自动连接起来
- GeneratePose / GenerateGraspPose:生成候选抓取姿态或放置姿态
- ComputeIK:对候选位姿做逆运动学求解,变成可执行解
- ModifyPlanningScene:添加/移除碰撞体,附着/分离物体
- SerialContainer / Alternatives / Fallbacks:用于组织多阶段流程、备选方案和失败回退逻辑
2.8.3. 编译与调用
编译 MTC: 将 MTC 功能包克隆到
src/后用rosdep安装缺失的功能包,再编译bashcd src/ git clone -b humble https://github.com/moveit/moveit_task_constructor.git rosdep install --from-paths . --ignore-src --rosdistro $ROS_DISTRO cd .. colcon build依赖:
xml<depend>moveit_task_constructor_core</depend> <depend>moveit_task_constructor_msgs</depend> <depend>moveit_ros_planning_interface</depend>CMakeLists.txt:
find_package(moveit_task_constructor_core REQUIRED)
find_package(moveit_ros_planning_interface REQUIRED)
add_executable(mtc_pick_demo src/mtc_pick_demo.cpp)
ament_target_dependencies(mtc_pick_demo
rclcpp
moveit_task_constructor_core
moveit_ros_planning_interface
)2.8.4. 示例
cpp
moveit::task_constructor::Task task;
task.stages()->setName("pick_demo");
task.loadRobotModel(node_);
// 当前状态
auto current = std::make_unique<stages::CurrentState>("current state");
task.add(std::move(current));
// 打开夹爪
auto open = std::make_unique<stages::MoveTo>("open gripper", interpolation_planner);
open->setGroup("gripper");
open->setGoal("open");
task.add(std::move(open));
// 机械臂移动到预抓取位
auto move_to_pregrasp = std::make_unique<stages::MoveTo>("move to pregrasp", pipeline_planner);
move_to_pregrasp->setGroup("arm");
move_to_pregrasp->setGoal(target_pose);
task.add(std::move(move_to_pregrasp));这是关于赞助的一些描述
- 本文链接:https://kaede-rei.github.io/learning-path/arm-motion-control/phase-2/2-8
- 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 许可协议。