moveitcpp 没办法执行的问题

moveit_cpp::PlanningComponent 默认只做规划,不执行轨迹 ------ 因为它没有对接控制器 。要让机械臂真的动起来 ,必须使用 TrajectoryExecutionComponent 轨迹执行组件。

我会给你最简可运行修复版代码 + 原理一句话说明


🔥 核心问题(一句话)

planning_components->execute() 不是执行到真实机械臂 / 控制器,它只是在内部模拟播放,不会发指令给硬件。

真正执行必须用:

cpp

运行

复制代码
moveit_cpp::TrajectoryExecutionComponent execution_component(PLANNING_GROUP, moveit_cpp_ptr);
execution_component.execute(plan_solution.trajectory);

✅ 修复后完整可执行代码(关键部分)

我只改执行部分,其他不变,你直接替换即可。

1. 增加头文件

cpp

运行

复制代码
#include <moveit/moveit_cpp/trajectory_execution_component.h>  // <-- 加这个

2. 声明执行器(在 planning_components 下面加)

cpp

运行

复制代码
auto planning_components = std::make_shared<moveit_cpp::PlanningComponent>(PLANNING_GROUP, moveit_cpp_ptr);
auto execution_components = std::make_shared<moveit_cpp::TrajectoryExecutionComponent>(PLANNING_GROUP, moveit_cpp_ptr); // <-- 加这行

3. 把所有

cpp

运行

复制代码
planning_components->execute();

替换成:

cpp

运行

复制代码
if (!execution_components->execute(plan_solution1.trajectory))
{
  RCLCPP_ERROR(LOGGER, "Execution failed!");
}

✔ 示例(Plan #1 修复后)

cpp

运行

复制代码
if (plan_solution1)
{
  visual_tools.publishAxisLabeled(robot_start_state->getGlobalLinkTransform("panda_link8"), "start_pose");
  visual_tools.publishAxisLabeled(target_pose1.pose, "target_pose");
  visual_tools.publishText(text_pose, "setStartStateToCurrentState", rvt::WHITE, rvt::XLARGE);
  visual_tools.publishTrajectoryLine(plan_solution1.trajectory, joint_model_group_ptr);
  visual_tools.trigger();

  // ---------------- 真正执行 ----------------
  execution_components->execute(plan_solution1.trajectory);
}

所有 5 个 plan 都这样改,机械臂就会真的动了。


🧠 为什么 moveit_cpp 要分两个组件?

  • PlanningComponent :只负责算路径
  • TrajectoryExecutionComponent :负责把路径发给控制器

MoveItCpp 架构就是这样设计的:规划 / 执行分离


🚀 最快可运行修复总结

  1. 加头文件: cpp

    运行

    复制代码
    #include <moveit/moveit_cpp/trajectory_execution_component.h>
  2. 创建执行器: cpp

    运行

    复制代码
    auto execution_components = std::make_shared<moveit_cpp::TrajectoryExecutionComponent>(PLANNING_GROUP, moveit_cpp_ptr);
  3. 执行轨迹: cpp

    运行

    复制代码
    execution_components->execute(plan_solution1.trajectory);

相关推荐
CeshirenTester3 分钟前
计算机专业找工作别再乱投:100家常见目标公司,先按赛道分清楚,然后闭眼冲!
大数据·人工智能
A7bert7774 分钟前
【YOLOv8部署至RDK X5】模型训练→转换bin→Sunrise 5部署
c++·人工智能·python·深度学习·yolo·机器学习
墨心@5 分钟前
多Agent系统的编排
人工智能·语言模型·自然语言处理·agent·datawhale·agent设计模式·组队学习
向量引擎7 分钟前
AI要干掉全公司只剩老板一人这事到底靠不靠谱
人工智能·aigc·agi·api调用
这儿有一堆花9 分钟前
实用CLI工具:命令行下的高效选择
人工智能
Jeremy_Lee12310 分钟前
Claude Code + OpenSpec + Everything Claude Code AI 协同开发实战指南
人工智能·elasticsearch·everything
扶苏xw10 分钟前
【分组背包】
算法·动态规划
Rubin智造社12 分钟前
OpenClaw实操指南20|记忆系统实战:别让你的AI用完就忘,短期+长期记忆配置指南
大数据·人工智能·用户画像·长期记忆·记忆系统·memory.md·openclaw实操
Jay-r14 分钟前
当“同事.skill”刷爆GitHub:AI正把职场经验变成可复制的“技能包”
人工智能·职场和发展·生活·技术美术·程序员创富
李兆龙的博客15 分钟前
从一到无穷大 #68 Agent Memory 全景:大模型智能体记忆机制的形态、动态与前沿
大数据·人工智能·算法