XMLRPC
XMLRPC(XML远程过程调用)是一种RPC协议,其编码形式采用XML编码格式,而传输方式采用HTTP协议,支持多种编程语言,但比较简单,仅用于小数据类型或命令。
主节点
主节点负责节点之间的连接和通信,运行roscore命令即可启动主节点,之后就可注册其他节点的名字,并可建立节点间的通信。主节点使用XMLRPC与其他节点进行通信,通常不保持连接,即其他节点只有在进行注册或请求信息时才与主节点建立连接。当启动ROS时,主节点将获取用户设置的ROS_MASTER_URI变量中列出的URI地址和端口号(默认为当前的本地IP和11311端口号)。
节点
节点是指在ROS中运行的最小处理单元,通常是一个可执行程序(基于c++或python语言编写的)。节点在运行的同时,向主节点注册其名称,并且还注册发布者/订阅者或服务服务器/客户端的名称,还有消息、URI地址和端口号。基于这些信息,每个节点可使用话题或服务与其他节点进行通信。
节点使用XMLRPC与主节点进行通信,而使用TCP/IP通信系列的XMLRPC或TCPROS进行节点之间的通信。节点之间的连接请求和响应使用XMLRPC,而消息通信使用TCPROS(这与主节点无关,是建立在节点之间的直接通信)。URI地址则使用ROS_HOSTNAME的环境变量的值,而端口号可设置为任意的固有值。
rosrun 功能包名称 节点名称(可执行文件名) #启动节点
功能包
功能包是构成ROS的基本单元,其中包括至少一个以上的节点或拥有用于运行其他功能包的节点的配置文件,以及用于运行各种进程的ROS依赖库、数据集和配置文件等。通常使用catkin_create_pkg命令创建:
catkin_create_pkg 功能包名 依赖项(roscpp rospy std_msgs)
元功能包
元功能包是一个具有共同目的的功能包的集合。
消息
消息是诸如int、float和boolean等类型的变量。节点之间通过消息来互传数据,其通信方法包括TCPROS和UDPROS等。通常在功能包目录下建立一个msg文件夹,以存放自定义的消息文件。
mkdir msg
vim msg/custommsg.msg
//custommsg.msg
float32 a
float32 b
话题
话题是一种单向的异步通信机制,通常被用于连续发送消息。在某个发布者节点关于某个话题向主节点注册后,希望接收该话题的订阅者节点可在主节点获取该发布者节点的信息,然后与该发布者节点建立直接连接,之后即可用该话题进行通信。
发布与发布者
发布是指以与话题的内容对应的消息的形式发送数据。发布者即是在节点中声明自己是执行发布的个体,单个节点可以成为发布多种话题的发布者。
ros::Publisher pub;
ros::NodeHandle nh;
pub = nh.advertise<消息类型>("话题名称",缓冲区大小);
消息类型 消息;
pub.publish(消息);
订阅与订阅者
订阅是指以与话题内容对应的消息的形式接收数据。同发布者一样,订阅者可在节点中声明自己是执行订阅的个体,单个节点也可成为订阅多种话题的订阅者。
void callback(消息类型 消息){}
ros::Subscriber sub;
sub = nh.subscribe("话题名称",size,callback);
ros::spin();//循环监听
服务
服务是一种双向的同步通信机制,与话题不同,只有在服务客户端节点发送数据请求时才与服务服务器节点建立连接,当服务客户端接收到响应后就断开连接,即是一种一次性的消息通信。通常也在功能包的目录下创建一个srv文件夹存放自定义的服务消息文件。
mkdir srv
vim srv/customsrv.srv
//customsrv.srv
float32 a //请求(Request)
float32 b
---
float32 c //响应(Response)
服务服务器
服务服务器是以请求为输入,以响应(请求和响应都是消息)作为输出的节点。服务服务器收到服务客户端的请求后,执行指定的服务,并将结果作为响应发送给服务客户端。
bool callback(服务消息类型::Request &请求,服务消息类型::Response &响应){}
ros::ServiceServer server = nh.advertiseService("服务名称",callback);
ros::spin();
服务客户端
服务客户端是以请求作为输出并以响应作为输入的节点。
ros::ServiceClient client = nh.serviceClient<服务消息类型>("服务名称");
服务消息类型 消息;
消息.request.变量名称 = value;//填充请求数据
client.call(消息);
cout << 消息.response.变量名称; //输出响应数据
动作
动作是一种异步的双向通信机制,与服务类似,不同的是,在处理请求之后需要很长的响应,并且中途需要有反馈数据。一个动作文件中,包括目标、结果和反馈,其中,目标和结果对应于请求和响应。
动作服务器
动作服务器是以目标作为输入并以结果和反馈作为输出的节点。
动作客户端
动作客户端是以目标作为输出并以结果和反馈作为输入的节点。
CMakeLists.txt
ROS构建系统的catkin基本上使用了CMake,因此在功能包目录下的CMakeLists.txt文件用于描述构建环境。
package.xml
以XML编码格式编写的文件,其中,包括功能包名称、作者、许可证和依赖包等消息。