赞
踩
写在前面:小白在使用ROS的时候往往会出现各种各样的问题,回顾我自己的ROS学习之路,也是坎坎坷坷,各种报错让人怀疑人生。因此想写下一个系列的小教程,主要以ROS的通讯方式的实现为目的,穿插各种常见的操作,做到真正的保姆级教程,一步一步来实现,话不多说,正式开始!
关于ROS的学习我之前在这篇博客已经有所总结,ROS WiKi里的自然是最好的第一手教程,跟着wiki上的教程走一遍,基本就能学会ROS 的一些基本使用了,所以说学好英语很重要。众所周知,ROS中的通信方式有四种:主题、服务、参数服务器和动作库。这个系列的博客主要用来介绍ROS中的这几种通信方式,一共四篇,先以经典的小海龟为例,然后再自己动手写一个相关的实现,主要参考古月居大佬的视频教程。
ROS的通信方式是ROS最为核心的概念,ROS系统的精髓就在于它提供的通信架构。ROS的通信方式有以下四种:
ROS中的通信方式中,topic是常用的一种。对于实时性、周期性的消息,使用topic来传输是最佳的选择。topic是一种点对点的单向通信方式,这里的“点”指的是node,也就是说node之间可以通过topic方式来传递信息。topic要经历下面几步的初始化过程:首先,publisher节点和subscriber节点都要到节点管理器进行注册,然后publisher会发布topic,subscriber在master的指挥下会订阅该topic,从而建立起sub-pub之间的通信。注意整个过程是单向的。其结构示意图如下:
Subscriber接收消息会进行处理,一般这个过程叫做回调(Callback)。所谓回调就是提前定义好了一个处理函数(写在代码中),当有消息来就会触发这个处理函数,函数会对消息进行处理。
上图就是ROS的topic通信方式的流程示意图。topic通信属于一种异步的通信方式。下面我们通过一个示例来了解下如何使用topic通信。
上图就是一个完整的topic流程,我们今天就是要实现这个小海龟的话题通讯功能。
首先在终端新建catkin_ws并且在src中创建功能包,如下:
mkdir catkin_ws
cd catkin_ws
mkdir src
cd src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
这里解释一下catkin_create_pkg lesrning_topic roscpp rospy std_msgs geometry_msgs turtlesim
的意思,这就是一个标准的创建功能包的语句,catkin_create_pkg
是创建功能包,lesrning_topic
是自己起的功能包的名字,后面的则是依赖项,本篇博客主要依赖的就是roscpp rospy std_msgs geometry_msgs turtlesim
,具体的创建功能包的语法如下:
catkin_create_pkg [package name] [depend1] [depend2] ...
如果没有问题,那么出现以下提示则说明功能包创建成功:
在功能包文件夹中,ros为我们创建了以下东西:
之后,我们就可以着手编写publisher了。在上图中的src中新建velocity_publisher.cpp
文件,在文件中写下以下代码,这一段代码是本节的核心,主要就是要理解publisher的整个发布流程:
/** * 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist */ #include <ros/ros.h> #include <geometry_msgs/Twist.h> int main(int argc, char **argv) { // ROS节点初始化 ros::init(argc, argv, "velocity_publisher"); // 创建节点句柄 ros::NodeHandle n; // 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10 ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 10); // 设置循环的频率 ros::Rate loop_rate(10); int count = 0; while (ros::ok()) { // 初始化geometry_msgs::Twist类型的消息 geometry_msgs::Twist vel_msg; vel_msg.linear.x = 0.5; vel_msg.angular.z
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。