【古月21讲】ROS入门系列(1)——ROS命令工具的使用及创建工作空间和功能包
1、运行海龟仿真器证明ROS安装成功
运行海龟仿真器共分为三步,如下:
-
启动ROS Master
roscore -
启动小海龟仿真器
rosrun turtlesim turtlesim_node -
启动海龟控制节点
rosrun turtlesim turtle_teleop_key
注:这三行代码需要在三个终端中分别输入,若ROS安装成功,则可以通过键盘的方向键控制小海龟的运动。另外需要注意的是,在控制海龟运动时要保证自己在启动海龟控制节点(即第三步)这个终端,否则是无法控制的(自己吃过这个亏)。现把控制海龟运动的结果展示,如下图所示:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j2zoJNHr-1637671177244)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20211121120647589.png)]](https://img-blog.csdnimg.cn/3412acd7cc184456a16229322d0d3088.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA56eD5aS05bCP6IuP,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
2、ROS命令行工具的使用
看到这里,那么你的ROS肯定是安装成功了。我们可以通过键盘控制小海龟上下左右的移动了!!!感觉有点神奇,但是不是也存在一些疑惑呢,这几行命令怎么就能控制海龟了呢,ROS系统到底是怎么实现这一个效果的呢?下面就利用一些ROS的命令解释海龟仿真器的具体实现。
首先还是先来介绍一些ROS中相关的一些概念:
-
[x] 节点(Node)——执行单元
-
执行具体任务的进程、独立运行的可执行文件
-
不同节点可使用不同的编程语言、可分布式运行在不同的主机上
-
节点在系统中的名称必须是唯一的
-
-
[x] 节点管理器(ROS Master)——控制中心
- 为节点提供命名和注册服务
- 跟踪和记录话题/服务通信,辅助节点互相查找、建立连接
- 提供参数服务器,节点使用此服务器存储和检索运行时的参数
-
[x] 话题(Topic)——异步通信机制
- 节点间用来传输数据的重要总线
- 使用发布/订阅模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以不唯一
-
[x] 消息(Message)——话题数据
- 具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义类型
- 使用编程语言无关的.msg文件定义,编译过程生成对应的代码文件
-
[x] 服务(Service)——同步通信机制
- 使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后返回应答数据
- 使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程中生成对应的代码文件
第一次看这些概念肯定不能完全看懂,后面通过一步步的实践慢慢理解!!!下面正式通过一些命令来解释海龟仿真器的实现过程。
rqt_graph
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eqQqzmyj-1637671470932)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20211121154913834.png)]](https://img-blog.csdnimg.cn/5eefd5a5c35044428e98ce33f67deb24.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA56eD5aS05bCP6IuP,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
可以看出现在系统中有两个运行的节点(/teleop_turtle【键盘控制节点】和/turtlesim【仿真器节点】)和一个话题(/turtle1/cmd_vel)。
-
rosnode list查看节点列表这行代码可以查看系统中的节点,运行上述代码结果如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tQJGySJt-1637671177253)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20211121160033498.png)]](https://res-hd.hc-cdn.cn/ecology/9.3.196/v2_resources/ydcomm/libs/images/loading.gif)
可以看出,运行上述代码后会显示两个和运行rqt_graph一样的节点,但是还多出一个节点,这个节点是默认启动roscore就会存在的,这里可以不予理会。
-
rostopic list查看话题列表这行代码可以查看系统中的话题,运行上述代码结果如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-alld2T4B-1637671177259)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20211121160809519.png)]](https://res-hd.hc-cdn.cn/ecology/9.3.196/v2_resources/ydcomm/libs/images/loading.gif)
可以看出系统订阅了上图中话题,其中/turtle1/cmd_vel话题就是控制小海龟运动的。之前我们是通过键盘控制海龟运动,现在可以通过发布话题实现小海龟的运动,命令如下:
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear: x: 1.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 1.0"上述命令中-r 10表示以每秒10次的频率发布话题,(若无-r 10,则小海龟运动一段距离后就会停下)geometry_msgs/Twist表示消息结构,其后面的内容是具体数据(包括角速度、线速度)。运行上述代码的结果如下:小海龟做圆周运动。

-
rosservice list查看服务列表![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dth3obYS-1637671177260)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20211121162541643.png)]](https://res-hd.hc-cdn.cn/ecology/9.3.196/v2_resources/ydcomm/libs/images/loading.gif)
-
rosservice call /spawn "x: 3.0 y: 3.0 theta: 0.0 name: 'turtle2'"上述代码发布服务请求,生成一个坐标在(3,3)位置的海龟turtle2,运行结果如下:

产生turtle2后,我们可以再次使用rostopic list 来查看话题列表,会发现话题变多了,同样我们也可以发布话题来控制海龟2的运动。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xBwgWfVf-1637671177263)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20211121163624922.png)]](https://img-blog.csdnimg.cn/c8cdb3ed213b4fc0a4a428bceeaad3b5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA56eD5aS05bCP6IuP,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
rosmsg show +消息类型显示消息结构
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ekB64ybh-1637671177265)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20211123151809880.png)]](https://img-blog.csdnimg.cn/f11b06cc4fd340a0b77652a1ea0c1171.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA56eD5aS05bCP6IuP,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
3、创建工作空间和功能包
工作空间是一个存放工程开发相关文件的文件夹,其下有四个文件夹,如下:
-
src: 代码空间(Source Space)
-
build: 编译空间(Build Space)
-
devel: 开发空间(Development Space)
-
install:安装空间(Install Space)
创建工作空间步骤
-
创建工作空间
mkdir ~/catkin_ws cd catkin_ws mkdir src cd src catkin_init_workspace -
编译工作空间
cd ~/catkin_ws catkin_make catkin_make install -
设置环境变量
source devel/setup.bash**注:**若不想每次都设置环境变量,可将下面代码复制到.bashrc文件中,该文件为主目录下的隐藏文件(显示隐藏文件:ctrl+H)
source /home/wsj/catkin_ws/devel/setup.bash
-
检查环境变量
echo $ROS_PACKAGE_PATH![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3T9bWAhG-1637671177267)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20211121171707818.png)]](https://res-hd.hc-cdn.cn/ecology/9.3.196/v2_resources/ydcomm/libs/images/loading.gif)
-
创建功能包步骤:
-
创建功能包
cd ~/catkin_ws/src catkin_create_pkg test_pkg std_msgs rospy roscpp //test_pkg为功能包名,std_msgs rospy roscpp为三个依赖 -
编译功能包
cd ~/catkin_ws catkin_make source ~/catkin_ws/devel/setup.bash
咻咻咻咻~~duang~~点个赞呗
- 点赞
- 收藏
- 关注作者
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tQJGySJt-1637671177253)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20211121160033498.png)]](https://img-blog.csdnimg.cn/cb5c5bb741cc4e54a687993de73b2ce3.png#pic_center)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-alld2T4B-1637671177259)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20211121160809519.png)]](https://img-blog.csdnimg.cn/eb9ed96035d14343a81cdb9ab286fa30.png#pic_center)

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dth3obYS-1637671177260)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20211121162541643.png)]](https://img-blog.csdnimg.cn/d6db8ea887c74791811e9f05cab90316.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA56eD5aS05bCP6IuP,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)


![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3T9bWAhG-1637671177267)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20211121171707818.png)]](https://img-blog.csdnimg.cn/7e3cca44ba9f4c8cbe51f1415dbf4128.png#pic_center)
评论(0)