目录
ROS通信编程
1. 话题编程
话题编程的流程:
- 创建发布者
- 创建订阅者
- 添加编译选项
- 运行可执行程序
1.1 如何实现一个发布者
流程:
初始化ROS节点
向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型
按照一定的频率循环发布消息
1.2 如何实现一个订阅者
流程:
初始化ROS节点
订阅需要的话题
循环等待话题消息,接收到消息后进入回调函数
在回调函数中完成消息处理
1.3 如何编译代码
流程:
设置需要编译的代码和生成的可执行文件
设置链接库
设置依赖
1.4 话题编程操作演示
1.4.1 创建工作空间
1.4.2 工程编译
使install空间出现:
1.4.3 创建功能包
创建功能包:
(要放在src
里面):
打开功能包:include
放置头文件src
放功能包的代码
后面两个文件是功能包一定有的,使其区别于普通文件夹的属性
1.4.4 设置环境变量
检查环境变量:
用echo
命令把环境变量打开
(ROS_PACKAGE_PATH
是ROS本身的一个环境变量,通过这个环境变量查找所有功能包的路径)
也是只有在前一步设置了工作空间的setup.bash
之后,path里面才会包含工作空间的路径
1.4.5 代码撰写
往功能包
下的 src
中添加的 cpp 文件,该文件实现了发布者:
publisher_cpp.cpp 代码如下:
#include <sstream>
#include "ros/ros.h"
#include "std_msgs/String.h"
int main(int argc,char **argv){
//ROS节点初始化
ros::init(argc,argv,"talker");
//创建节点句柄
ros::NodeHandle n;
//创建一个Publisher,发布名为chatter的topic,消息类型为std_msgs::String
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter",1000);
//设置循环的频率
ros::Rate loop_rate(10);
int count = 0;
while(ros::ok()){
//初始化std_msgs::String 类型的消息
std_msgs::String msg;
std::stringstream ss;
ss<<"hello worl