鱼香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

相关推荐
蘑菇小白2 小时前
Linux多线程开发
linux·开发语言·线程
青少儿编程课堂2 小时前
蓝桥杯青少组 + 全国青少年信息素养大赛 + 电子学会图形化考级|校园推箱子大挑战解析
c++·python·算法·bfs·信息学竞赛
2601_966949652 小时前
Python 实战:如何统计五档盘口买卖盘总挂单量?附计算公式与代码
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
全栈陈序员3 小时前
【Python】基础语法入门(二十九)—— 正则表达式实战:文本处理利器
开发语言·人工智能·python·正则表达式
Wang's Blog3 小时前
Java 项目实战: 交友项目 - 发布评论
java·开发语言·交友
屈冠成3 小时前
ShopXO商城系统测试报告
开发语言·spring·maven·lua
多弗朗皮卡丘3 小时前
C++STL之空间配置器
开发语言·c++·内存池·空间配置器
tommyjiatong3 小时前
什么是PHP漏洞
开发语言·php
牵猫散步的鱼儿3 小时前
Demosaic 和 Remosaic
c++
CodeYp20193 小时前
第19讲:封装红黑树实现 mymap 和 myset
开发语言·c++·红黑树