当前位置: 首页 > news >正文

trajectory_msgs::msg::JointTrajectory 消息完整结构详解

这是ROS2 官方标准轨迹消息servo_moveit2ros2_controlMoveIt全部通用。


一、完整消息类型(C++)

cpp

运行

trajectory_msgs::msg::JointTrajectory

你代码里写的:

cpp

运行

const trajectory_msgs::msg::JointTrajectory::SharedPtr msg

意思是:指向一条关节轨迹消息的共享指针


二、消息内部全部字段(超级详细)

1. 消息头(必须)

cpp

运行

std_msgs::msg::Header header;
  • header.stamp:时间戳
  • header.frame_id:一般填base_link或空

2. 关节名称列表(必须!)

cpp

运行

std::vector<std::string> joint_names;

必须和你的 URDF 完全一致例如你的:

plaintext

JM0, JM1-2, JM4-3, JM4, JM5, YB

3. 轨迹点序列(必须)

cpp

运行

std::vector<trajectory_msgs::msg::JointTrajectoryPoint> points;

每个点包含:

cpp

运行

// 位置 (rad) std::vector<double> positions; // 速度 (rad/s) std::vector<double> velocities; // 加速度 (rad/s²) std::vector<double> accelerations; // 从轨迹开始到该点的时间 builtin_interfaces::msg::Duration time_from_start;

三、一条真实可发送的轨迹消息例子(你能直接用)

yaml

header: stamp: sec: 1740000000 nanosec: 0 frame_id: "base_link" joint_names: - JM0 - JM1-2 - JM4-3 - JM4 - JM5 - YB points: - positions: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] velocities: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] accelerations: [] time_from_start: {sec: 0, nanosec: 0} - positions: [0.1, 0.2, 0.0, 0.0, 0.15, 0.0] velocities: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] accelerations: [] time_from_start: {sec: 3, nanosec: 0}

四、最重要规则(必须遵守)

1.joint_names 的数量 = 每个 point 中 positions 的数量

比如 6 个关节 → 每个点必须给6 个位置

2.时间必须递增

  • 第 1 点:0s
  • 第 2 点:2s
  • 第 3 点:5s

3. 单位

  • positions:rad(弧度)
  • velocities:rad/s
  • accelerations:rad/s²

4. 可以只发 positions

速度 / 加速度可以为空,控制器会自动插值。


五、你代码里的SharedPtr是什么?

cpp

运行

const trajectory_msgs::msg::JointTrajectory::SharedPtr msg

等于:

cpp

运行

std::shared_ptr<const trajectory_msgs::msg::JointTrajectory> msg

意思:

  • 这是智能指针
  • 指向一条轨迹消息
  • 常用于回调函数参数

例如:

cpp

运行

void topicCallback(const trajectory_msgs::msg::JointTrajectory::SharedPtr msg) { // 收到了一条轨迹 }

六、我用一句话总结

JointTrajectory = 一组关节名称 + 一组带时间的点位

机械臂会按点、按时平滑运动

http://www.jsqmd.com/news/843374/

相关文章:

  • 大图变清晰 API 完整教程:大图放大4倍不失真,AI超分辨率原理与多语言接入(附 Python/Java/JS 示例)
  • 冥想第一千八百八十四天(1884)
  • 工业组态画面‘开口说话’实战:在WinCC/力控里集成TTS语音告警,5步搞定远程声光联动
  • pycharm接入AI大模型测试脚本费用说明
  • 【网络安全】圈内热门逆向工具 TOP9 合集
  • 日本租房成本核算沙盘
  • 黑马SpringBoot3+Vue3(实战篇)学习记录三:SpringBoot注册参数校验框架Validation、登入、JWT、拦截器、拦截器配置
  • CodeWF Toolbox:一个用 Avalonia + Prism 做出来的开发者工具箱
  • 掌握RAG大模型开发:小白程序员必备的AI学习指南,收藏提升技能!
  • Arduino电池电压监测:从ADC采样到低功耗设计的完整方案
  • 2026年5款录音转文字:适配性、准确率、稳定性等比对
  • 东森茂环保哪家好?产品口碑与服务解析 - mypinpai
  • 2026年DevSecOps工具选型推荐:如何构建安全高效的研运体系
  • Linux文本管道效率稳定性治理方法
  • 甲骨文云 ARM 实例安装 CentOS 7 出现内核 Panic 怎么修?
  • Adobe Substance 3D Stager 中文破解版
  • 节能门窗十大口碑品牌推荐,星佰汇门窗上榜 - mypinpai
  • 底盘异响≠要大修!这些常见误区和正确检修流程,一次说清
  • 选型避坑指南:W25Q64JVSIQ vs GD25Q128CYSIG,你的项目到底该用哪颗SPI Flash?
  • A-29P深度解析:100dB回音消除与AI降噪的硬件设计实战
  • SC4541SKTRT 2MHz 2.9V~22V升/降压单线LED驱动器Semtech电子元器件IC芯片
  • Claude code和Codex多维度对比和使用教程
  • 多店铺场景下如何通过快手订单接口实现订单数据的统一聚合管理?
  • NotebookLM溯源能力颠覆性评测(谷歌内部技术白皮书级解析):支持跨文档语义回溯的7层验证机制首次公开
  • 装修公司性价比哪家高?八马空间设计告诉你 - mypinpai
  • AI 挖洞新思路、深度解析两大间接提示词注入漏洞攻防思路,注入也能获得上万美金
  • 2026年知网AIGC检测必备指南:10款降AI率工具亲测,AI率压至5%以内! - 降AI实验室
  • vue基于springboot框架的校园人脸识别的失物招领平台的设计与实现
  • 当我们谈论“防治养”时,我们谈论的是一种生活方式的重构
  • Linux文本管道效率异常定位实战