一、发布速度控制海龟画圆
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
