鱼香ros2(十二)C++话题订阅与发布

一、发布速度控制海龟画圆

1、需求:

控制海龟模拟器中对的小海龟转指定半径的圆

2、核心问题:

1)小海龟凭什么听我的?话题

2)前进后退我知道,画圆?线速度/角速度=半径

3)发一下就停了,如何循环发?定时器

3、实现

1)启动海龟模拟器

ros2 run turtlesim turtlesim_node

2)查看小海龟话题列表

ros2 topic list -t

/turtle1/cmd_vel geometry_msgs/msg/Twist:用于接收控制命令,被小海龟模拟器所订阅的(也就是小海龟模拟器是订阅者,订阅谁,就听谁的,订阅后可以控制小海龟)。geometry_msgs/msg/Twist------为消息接口。

/turtle1/pose turtlesim/msg/Pose:小海龟当前的坐标位置(小海龟模拟器是话题发布者,谁想要知道小海龟实时位置信息,谁就订阅,订阅者可以获取)。

无论是订阅还是发布话题,我们都需要传递话题的消息接口。

3)创建功能包

进入src目录下,使用命令:

ros2 pkg create demo_cpp_topic --build-type ament_cmake --dependencies rclcpp geometry_msgs turtlesim --license Apache-2.0

--build-type ament_cmake:cpp功能包类型,默认也是这个值。

--dependencies:功能包依赖,rclcpp(ros2的基础库),geometry_msgs(小海龟模拟器订阅需要的功能包),turtlesim(小海龟模拟器发布话题需要的功能包)

4)编写turtle_circle.cpp

找不不到rrclcpp问题:点击小灯泡,选择修改路径,在以下位置添加

/opt/ros/humble/include/**

explicit:c++中有显示转换和隐式转换,不加explicit之前,我们可以这样改TurtleCircleNode t="node_name",这个就叫隐式转换,就是如果这个类的构造函数只有一个参数,那么就可以通过------类 变量名="参数值"来构造对应类型的变量t。为了防止这种书写会加上explicit关键词,就不允许直接这样赋值。

在c++中如果我们要创建定时器,或者发布者,都需要先声明。

字面量:使用时间单位的字面量,即在代码中使用s或ms代表时间。

5)启动:

A、修改CMakeLists.txt

详情见鱼《香ros2(七)......》

添加可执行文件 → 链接依赖 → 安装(拷贝)到install目录

B、ros2 run

构建 → 加载环境变量 →ros2 run

6)查看信息

使用命令查看话题:

二、订阅pose实现闭环控制

1、需求:

告诉小海龟到指定位置,自己滚过去

2、核心问题:

1)小海龟凭什么听我的?发布话题

2)小海龟现在在哪里?订阅话题

3)怎么根据当前位置和目标位置计算角速度和线速度?两点之间距离->线速度 当前朝向和目标朝向差->角速度

3、实现

1)查看当前信息

2)代码编写

3)启动:

A、修改CMakeLists.txt

添加可执行文件 → 链接依赖 → 安装(拷贝)到install目录

B、ros2 run

构建 → 加载环境变量 →ros2 run

相关推荐
脉动数据行情11 小时前
Go 语言实战|对接美股英伟达 NVDA 实时行情 生产级 WebSocket 方案
开发语言·websocket·golang
FLJwu1 小时前
运动相机按键与连接器硬件选型实战02:USB‑C接口选型|防水失效、虚接断连、腐蚀烧口量产大坑
c语言·开发语言·经验分享·数码相机·相机·运动相机·oem 量产
Do_It_Today2 小时前
php xml 入门学习资料
开发语言·php
熊猫钓鱼>_>2 小时前
Kotlin Multiplatform for OpenHarmony 实战:为 Landscapist 实现图片加载适配
开发语言·kotlin·华为云·ai编程·harmonyos·鸿蒙·openharmony
汉克老师2 小时前
GESP2026年9月认证C++八级( 第三部分编程题(2、末班车))精讲
c++·gesp·小学生·学c++编程
Nebula_g2 小时前
JavaSE加强:Commons-io框架
java·开发语言·算法·javase
Do_It_Today3 小时前
php url路由入门实例
开发语言·php
小羊没烦恼!3 小时前
关于大型asp.net应用系统的架构-架构的选择
java·服务器·开发语言·前端·c#
夏幻灵3 小时前
前端八股:JavaScript 深拷贝详解:实现方式、递归原理与循环引用
开发语言·前端·javascript