TurtleBot3在ROS2 humble中成功安装好了之后,我们就来解析一下其中的代码,首先是Fake Node。主要从如下几方面入手,进行讲解:
1. 目录结构
2. 启动Fake Node
3. 代码解析
TurtleBot3在ROS2 humble中安装,请参照下面文章:(29条消息) 基于Ubuntu22.04在ROS2 Humble中编译turtlebot3遇到的坑_数据绿洲的博客-CSDN博客
1. 目录结构
目录包含工程相关的CMakeList.txt,package.xml,部署文件,参数文件,urdf模型文件,源文件等。
2. 启动Fake Node
Fake Node启动命令:
键盘操作节点启动命令:
成功启动后,系统包括:3个节点(turtlebot3_fake_node,robot_state_publisher和teleop_keyboard),5个话题(/cmd_vel,/odom,/joint_states,/tf,和/robot_description)。
Fake Node节点:
==》订阅/cmd_vel话题,从其得到键盘操作节点来的操作命令
==》发布/odom,/joint_states,和/tf话题
下面来具体介绍一下个环节的关键信息:
a. TurtleBot3 Fake Node节点发布脚本:
~/tb3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_fake_node/launch/turtlebot3_fake_node.launch.py
其主要代码如下:
b. TurtleBot3 Fake Node节点的参数
TurtleBot3有三种model:burger,waffle_pi和waffle。
根据不同model类型,会有不同的参数文件(burger.yamal,waffle_pi.yaml,waffle.yaml),参数定义文件所在目录:
~/tb3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_fake_node/param
burger参数文件(burger.yaml)内容如下所示:
c. TurtleBot3 Fake Node的模型定义
根据不同model类型,会有不同的模型定义文件(turtlebot3_burger.urdf, turtlebot3_waffle_pi.urdf, turtlebot3_waffle.urdf),模型定义文件所在目录:
~/tb3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_gazebo/urdf
3. 代码解析
TurtleBot3 Fake Node的实现是用C++实现的,其类名为TurtleBot3Fake,其从rclcpp::Node类继承而来。TurtleBot3Fake实现代码为:
~/tb3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_fake_node/include/turtleblot3_fake_node/turtlebot3_fake_node.hpp
~/tb3_ws/src/turtlebot3/turtlebot3_simulations/turtlebot3_fake_node/src/turtlebot3_fake_node.cpp
I. 构造函数
在类的构造函数中主要实现:
a. 创建3个发布者和1个订阅者;
b. 创建发布定时器。
如下所示:
创建3个发布者,分别发布/odom, /joint_states, /tf话题:
创建1个订阅者,从/cmd_vel话题订阅消息:
创建10ms定时器,用于发布话题:
II. 订阅器回调函数
回调函数中,接受键盘发布的操作命令:目标线速度和目标角速度,并存储到成员变量中。如下所示:
III. 定时器回调函数
回调函数中,主要根据目标速度计算turtlebot的odometry信息,joint_state信息,和tf信息,并将上述信息通过3个话题发布出去。如下所示:
更新odometry信息:
==》计算步长
==》根据目标速度,计算左右轮的线速度和角速度,并更新速度和位置局部变量
==》计算odometry: 线速度,角速度和总转动角
==》更新关节状态
==》更新变换信息tf
4. 实现效果
命令启动后,rviz中会出现turtlebot3的样子,下图以burger为例。
你也可以通过键盘操作进行相应的移动。其中键盘操作提供机器人行走的目标线速度和角速度;
rviz提供机器人行走线路的可视化,实时显示机器人所在的位置和行走的方向。