TurtleBot3在ROS2 humble中的仿真解析之Fake Node

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模型文件,源文件等。

TurtleBot3在ROS2 humble中的仿真解析之Fake Node_第1张图片

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

其主要代码如下:

 TurtleBot3在ROS2 humble中的仿真解析之Fake Node_第2张图片

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)内容如下所示:

 TurtleBot3在ROS2 humble中的仿真解析之Fake Node_第3张图片

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. 创建发布定时器。

如下所示:

TurtleBot3在ROS2 humble中的仿真解析之Fake Node_第4张图片

创建3个发布者,分别发布/odom, /joint_states, /tf话题:

创建1个订阅者,从/cmd_vel话题订阅消息:

TurtleBot3在ROS2 humble中的仿真解析之Fake Node_第5张图片

创建10ms定时器,用于发布话题:

II. 订阅器回调函数

回调函数中,接受键盘发布的操作命令:目标线速度和目标角速度,并存储到成员变量中。如下所示:

TurtleBot3在ROS2 humble中的仿真解析之Fake Node_第6张图片

III. 定时器回调函数

回调函数中,主要根据目标速度计算turtlebot的odometry信息,joint_state信息,和tf信息,并将上述信息通过3个话题发布出去。如下所示:

TurtleBot3在ROS2 humble中的仿真解析之Fake Node_第7张图片

更新odometry信息:

 

==》计算步长

==》根据目标速度,计算左右轮的线速度和角速度,并更新速度和位置局部变量

TurtleBot3在ROS2 humble中的仿真解析之Fake Node_第8张图片

==》计算odometry: 线速度,角速度和总转动角

TurtleBot3在ROS2 humble中的仿真解析之Fake Node_第9张图片

==》更新关节状态

TurtleBot3在ROS2 humble中的仿真解析之Fake Node_第10张图片

==》更新变换信息tf

TurtleBot3在ROS2 humble中的仿真解析之Fake Node_第11张图片

4. 实现效果

命令启动后,rviz中会出现turtlebot3的样子,下图以burger为例。

TurtleBot3在ROS2 humble中的仿真解析之Fake Node_第12张图片

你也可以通过键盘操作进行相应的移动。其中键盘操作提供机器人行走的目标线速度和角速度;

rviz提供机器人行走线路的可视化,实时显示机器人所在的位置和行走的方向。

TurtleBot3在ROS2 humble中的仿真解析之Fake Node_第13张图片

你可能感兴趣的:(自动驾驶,机器人)