ros2手动发消息

张开发
2026/4/10 12:11:05 15 分钟阅读

分享文章

ros2手动发消息
目录 1️⃣ ros2 topic pub 2️⃣ /test 3️⃣ std_msgs/String 4️⃣ data: hello, xxx 整句话的完整意思 默认行为 如何验证 底层发生了什么 总结记住这一句就够这条命令是 ROS 2 里最常用的“手动发消息”命令我们一行一行拆开讲 ros2 topic pub /test std_msgs/Stringdata: hello, xxx 1️⃣ros2 topic pubros2→ ROS 2 命令行工具topic→ 操作“话题”pub→ publish发布消息意思是向某个 topic 手动发布一条消息注意是发送一条消息而是持续发送 2️⃣/test这是话题名topic name等价于代码里create_publisherstd_msgs::msg::String(/test,10);它表示把消息发到/test这个话题上你可以用ros2 topic list查看当前系统中有哪些 topic。 3️⃣std_msgs/String这是消息类型它来自Open Robotics 提供的标准消息包ROS 2 自带的std_msgs完整类型名是std_msgs/msg/String这个消息结构长这样string data只有一个字段data 4️⃣data: hello, xxx这是 YAML 格式的消息内容。等价于 Cstd_msgs::msg::String msg;msg.datahello, xxx;publisher-publish(msg);等价于 PythonmsgString()msg.datahello, xxxpub.publish(msg) 整句话的完整意思向/test这个 topic 发布一条std_msgs/String类型的消息内容是hello, xxx 默认行为默认它会每秒发 1 次一直循环发送按 CtrlC 停止如果你只想发 1 次ros2 topic pub-1/test std_msgs/Stringdata: hello 如何验证开一个新终端ros2 topicecho/test你会看到data: hello, xxx --- 底层发生了什么在你之前修 Cyclone DDS 的背景下这条命令实际上做了创建一个 ROS 2 节点初始化 RMW比如rmw_cyclonedds_cpp创建 publisher通过 DDS 发送数据包如果 DDS 配置错误比如之前的 wlo1 问题这条命令会直接报failed to create domain所以它也是一个很好的 DDS 测试命令 总结记住这一句就够ros2 topic pub话题名消息类型消息内容等价于用命令行代替代码发布一条 ROS 消息如果你愿意我可以再给你画一张ROS 2→ Topic→ DDS→ 网络→ 另一台机器的完整通信流程图非常清晰那种。

更多文章