对ROS相关基础概念的一些代码的记录、消息的补充知识
指令篇
I、基础的命令
1. 安装功能包:
sudo apt-get install ros-版本号-包名
sudo apt-get install ros-melodic-turtlesim
2. 运行节点:
rosrun 包名 可执行文件
rosrun turtlesim turtlesim_node
II、关于packages的命令
1. 查看软件包列表:
rospack list
- 会列出很多软件包,每个包由package.xml定义,包括其名称、版本、维护者和依赖关系。包含这个xml文件的目录被称为软件包目录。
- 通过catkin编译系统产生的可执行文件并未存放在功能包目录下
-
- 通过apt-get命令安装的功能包,其所在的根目录为/opt/ros/melodic,可执行文件储存在include子目录下。
2. 定位软件包:
rospack find 包名
rospack find turtlesim
3. 查看某package里的文件
rosls 包名
rosls turtlesim
4. 打开某个package
roscd turtlesim
III、关于node指令
1. 启动node
rosrun 包名 可执行文件名
注意要开启the master
rosrun turtlesim turtlesim_node
甚至可以直接这样执行
/opt/ros/melodic/lib/turtlesim/turtlesim_node
2. 查看node列表
rosnode list
/rosout前边的反斜杠表明该节点属于全局命名空间。
4. 为节点命名
rosrun 包名 可执行文件名 __name:=新的名字
rosrun turtlesim turtlesim_node __name:=aa
节点名不一定和可执行文件名相同名
此时再查看rosnodelist会看到 /aa节点
5. 查看节点信息
rosnode info 节点名
rosnode info turtlesim_node
- 会打印出话题列表,发布者,订阅者,PID等等信息。
6. 终止节点
rosnode kill turtlesim_node
- 此外,还可以通过Ctrl-C命令终止节点,但这种使用方法可能不会再the master中注销该节点,没有坏处,但会影响开发者的观测。
此时可以通过如下命令将节点从列表中删除
rosnode cleanup
IV、话题和消息的命令
1. 查看计算图
rqt_graph
2. 查看活跃的所有话题:
rostopic list
3. 实时打印某话题上发布的消息内容
rostopic echo 话题名
rostopic echo /turtle1/color_sensor
则会输出速度信息,实时变化的。如下,且每个—代表了消息的结束和另一个消息的开始
r : 179
g : 184
b : 255
---
r : 179
g : 184
b : 255
4. 查看话题
rostopic info 话题名
rostopic info /turtle1/color_sensor
输出如下:
Type: turtlesim/Color
Publishers:
*/turtlesim (http://donatello:46397/)
Subscribers: None
- type表示该话题的消息类型
承接上文
5. 查看消息类型
rosmsg show 消息名
rosmsg show turtlesim/Color
即查看消息的数据结构,输出如下:
uint8 r
uint8 g
uint8 b
- 关于消息的内容,后边会给出更详细的理解
6. 查看消息发布的频率
rostopic hz 话题名
rostopic hz /turtle1/color_sensor
7. 查看消息发布的带宽
rostopic bw 话题名
rostopic bw /turtle1/color_sensor
8. 用命令行发布消息:
rostopic pub -r 消息发布频率 话题名 消息类型 message-content
rostopic pub -r 1 /turtle1/cmd_vel geometry_msgs/Twist '[2,0,0]' '[2,0,0]'
- 这里的消息类型参考msgshow命令的类型格式按顺序分别给出 [第一个域的消息参数] [第二个域里的参数]。
V、对消息更深入的了解
基于小乌龟的例子可以看到
在/turtle1/color_sensor话题上的turtlesim_Color消息内容如下:
uint8 r
uint8 g
uint8 b
- 上述输出的格式是域(field)的列表,每行一个元素,每一个域由基本数据类型(int8,bool,string)以及域名称定义。
- 这条消息告诉我们,它包含三个无符号8位整型变量r,g,b。任何话题的消息只要是turtlesim/Color类型,都由上述三个域的值定义。
多看一点
再来看在/turtle1/cmd_vel话题上发布的geometry_msgs/Twist消息内容,如下:
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
- 不难看出:linear和angular都是复合域,其数据类型为geometry_msgs/Vector3。
- 从缩进格式可以看出x,y,z的域是上级两个域的成员。
- 即geometry_msgs/Twist消息包含六个成员,被组织成两个向量的形式。所以在我们前文用命令行发消息时赋值的时候才会以为[]0,0,0,[1,0,0]的2X3的形式赋值。
值得注意的是:复合域本身也可以作为消息类型。例如,一个具有消息类型geometry_msgs/Vector3的话题是符合语法的