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);

相关推荐
Hi202402173 小时前
Vortex CUDA 生态适配:让 CUDA C、CUTLASS 与 Triton 在 RISC-V GPGPU 上运行
人工智能·risc-v·gpgpu
龙腾AI白云6 小时前
AI检索增强生成(RAG):解决大模型幻觉的核心落地技术
数据库·人工智能·机器学习·知识图谱
云票6 小时前
企业对接AI合同审查系统的工程实践
人工智能
admin and root6 小时前
「AI安全篇」实战AntiDebug自动化JS逆向加解密MCP
javascript·人工智能·网络安全·自动化·漏洞挖掘·cnvd·src赏金
智能RPA6 小时前
智能体自动化平台与主数据管理平台(MDM)对比评测
人工智能·自动化·agent·rpa
longlongzihan7 小时前
LeetCode 17电话号码的字母组合:回溯算法(DFS)详解
c++·算法·leetcode·深度优先
跨境小彭7 小时前
Temu拉美站点铺货实操复盘:手动复制痛点与批量自动化解决方案
服务器·人工智能·搜索引擎·自动化·temu电商运营
封印师请假去地球钓鱼7 小时前
边解边变的问题:从“决策依赖“一词出发
人工智能·算法
AI搅拌机7 小时前
ComfyUI管理大师:安全稳定升级+切换指定版本!
人工智能
浅安的邂逅7 小时前
20929-OpenAI 一天踩三脚急刹:暂停前沿训练、叫停 Astra、披露越权访问澳政府网站
人工智能·大模型·ai编程·行业动态·ai日报