阅读笔记(ROS书籍⑤)《ROS机器人开发:实用案例分析》卡罗尔·费尔柴尔德 托马斯·L.哈曼

这本书是在微信读书上发现的,它在语言描述上比较容易让人理解,同时也有与无人机相关的案例,这是我比较关注的。

以下摘自我的微信读书笔记。

◆ 1.6.1 ROS节点

>> 一般而言,节点就是执行某些动作的进程。ROS节点本身实际上就是一个软件模块,除了具体的软件功能之外,还具有注册连接到ROS节点服务器,并和ROS网络中的其他节点通信的功能。ROS节点的设计理念是每一个节点都是独立的模块,相互之间通过ROS的通信能力实现交互。

>> 对于节点而言,既可以独立地运行代码来完成其作业任务,也可以通过发送或接收消息来与其他节点进行通信。消息包含了数据、命令或者其他对于应用程序而言必要的信息。

◆ 1.6.2 ROS话题

>> 对于节点而言,有些节点主要为其他节点提供信息,例如为节点提供摄像机图像数据。这样的节点发布信息,并由其他节点接收。这些发布的信息,在ROS中称为话题。话题定义了将由该话题发送的消息的类型。传递数据的节点发布话题的名称以及将要发送的消息的类型。节点能够订阅话题,订阅了话题的节点将能够接收话题传递的消息。

>> 继续以摄像机为例,摄像机节点可以在camera/image_raw话题上发布图像数据。来自camera/image_raw话题的图像数据能够被在计算机屏幕上显示图像的节点使用。接收信息的节点称之为订阅了发布的话题,在上述例子中,发布的话题为camera/image_raw。在其他一些例子里,节点同时订阅和发布一个或多个话题。

◆ 1.6.4 ROS节点管理器

>> 在上述的屏幕输出中,读者能够看到计算机的相关信息列出了ROS发行版的名字(kinetic)和版本号的参数信息,以及其他一些信息。Master由统一资源标识符(Uniform Resource Identifier,URI)定义,它确定了Master的定位信息,在本例中,Master运行在便携式笔记本计算机上,用于执行roscore命令。

>> 前文所展示的roscore命令得到的屏幕输出中,与Master相关的参数如下所示:
 

/rosdistro:kinetic

/rosversion:1.12.7

Kinetic是本书中使用的ROS发行版。当Kinetic发生改变或者有新的功能包增加时,诸如1.12.7这样的版本号将会发布出来。可以通过输入roscore命令的方法来查看读者所使用的ROS的版本信息。

◆ 1.6.5 确定节点和话题的ROS命令

>> 执行roscore命令之后,用来执行roscore命令的终端窗口要保证一直处于运行之中(即不能关闭该窗口),但是可以最小化。在另外的终端窗口中,执行rosnode list命令,将会把处于运行中的节点显示于该窗口之中。

>> 需要注意的是,/rosout节点和/rosout话题名称相同。在ROS中,rosout节点订阅/rosout话题。所有运行中的节点都会将其调试信息发布给/rosout话题。这里不需要关心这些消息,但是这些消息对于调试一段程序而言将会十分有用。

>> 在系统之中,rosout节点与每一个运行中的节点都有联系。/rosout_agg话题也同样接收消息,但它仅从rosout节点接收,因此无须与其他所有节点建立联系,从而节省了系统的启动时间。

◆ 1.7.1 启动turtlesim节点

>> 待ROS节点管理器完成启动后,可以最小化这个窗口,但是不能关闭,因为要在节点间通信,ROS节点管理器必须处于运行状态。

◆ 1.7.2 turtlesim节点

>> 这里的/turtlesim就是我们要使用的节点。注意,节点的命名和功能包的命名是有区别的。/turtlesim是节点,turtlesim是功能包

>> 要查看关于turtlesim节点的发布话题、订阅话题和服务的相关内容,可输入以下命令:

$ rosnode info/turtlesim

>> 执行结果如下:

 

 >> 图1.6中显示了turtlesim节点和话题之间的关系。椭圆形的是节点,矩形框中的是话题。

◆ 1.7.3 turtlesim话题与消息

>> 查看每个话题的话题类型,输入以下命令(以/turtle1/color_sensor话题为例):

$ rostopic type /turtle1/color_sensor

执行输出为:

turtlesim/Color
turtlesim/Pose

>> 表示/turtle1/color_sensor话题的消息类型是turtlesim/Color。可参考ROS消息类型命名格式:

[package name]/[message type]

>> 综上所述,/turtlesim节点的话题和消息的关系,如表1.1所示。

表1.1 话题和消息

>> 表中显示的是/turtlesim节点的两个话题的话题、话题类型、消息格式和数据值以及使用的命令等相关信息。

◆ 1.7.4 通过发布/turtle1/cmd_vel话题控制乌龟运动

>> 可以通过以下命令,控制乌龟做圆周运动:

$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

上述命令控制乌龟以2m/s的线速度以及1.8弧度/秒的角速度做圆周运动。命令指定了话题、消息类型、重复选项(-r)以及速度的数值。

>> ROS和Ubuntu的命令行具有tab补全功能,输入命令到数据值并按Tab键,将会显示出数据值的格式,可以通过退格键删掉数据值格式并根据提示输入对应的数值。

◆ 1.7.6 turtlesim的参数服务器

>> 比如要将乌龟的背景颜色改为红色,就使用rosparam set命令将蓝色和绿色的数据值设为0,将红色的数据值设为最大值255。需要注意的是在改变颜色之前要执行rosservice的clear选项。1.rosparam get命令

默认的乌龟背景颜色是蓝色的。你可以使用rosparam get/命令获得整个参数服务器上所有参数的数值。如下所示:

$ rosparam get /

执行输出为:

2.rosparam set命令

如前所述,要将乌龟背景的颜色改为红色,需要执行rosparam set命令:

你会看到背景颜色变成了红色。还可以通过rosparam get/命令来确定参数设置的结果。

◆ 1.7.7 控制乌龟移动的ROS服务

>> 我们可以使用rosservice远程控制端口选项来移动乌龟。命令的格式是:rosservice call<service name><service arguments>,其中service arguments包含乌龟的位置坐标x、y和方位角度。比如,将乌龟移动到坐标[1,1],方位角为0,需要输入以下命令:

$ rosservice call /turtle1/teleport_absolute 1 1 0

◆ 1.9 本章小结

>> Gazebo,该模拟工具能够模拟可供机器人移动的外部环境,同时能够模拟机器人的物理学特性。

◆ 7.1 四旋翼飞行器简介

>> 四旋翼飞行器(四轴飞行器)是广义概念无人驾驶飞行器(Unmanned Aerial Vehicle,UAV)的一种,它用四个发动机和螺旋桨来提供上升动力。

>> 可以看到Crazyflie有四个螺旋桨(旋翼),用来给飞行器起飞和定高时提供竖直方向上的上升动力。首先我们应该有这样一个概念,这种飞行器属于旋翼飞行器,因为它的上升力由旋翼产生(如图7.1所示)而不是飞机的机翼。其次,四旋翼飞行器不属于直升机,因为直升机是由主螺旋桨和尾桨来控制飞行的,其中尾桨的作用是使飞行器随着主水平桨的旋转角度来旋转,以此来维持飞行器的平衡,这和四旋翼飞行器是不相同的。

四旋翼飞行器的飞行操纵是通过改变一个或者多个螺旋桨的转速来实现的。它的螺旋桨是定距螺旋桨,这是指相对飞行器机身的角度不能改变。

◆ 9.4 Crazyflie控制

>> 正如你在这本书中看到的,cmd_vel话题(geometry_msgs/Twist消息)是ROS机器人的常用控制方法,无论是地面机器人还是空中机器人。对于TurtleBot,它是使用mobile_base_commands/velocity和cmd_vel_mux/input/navi来进行移动的。而对于Crazyflie,它是通过发布crazyflie/cmd_vel话题来控制四旋翼飞行器飞行的。

猜你喜欢

转载自blog.csdn.net/qq_38250687/article/details/122542379