教学来源及参考文档
创建ROS工作空间
工作空间(workspace)是一个存放工程开发相关文件的文件夹。
src:代码空间(Source Space)
build:编译空间(Build Space)
devel:开发空间(Development Space)
install:安装空间(Install Space)
vscode相关基础操作
cd到工作空间目录下
cd catkin_ws
终端输入
code .
启动vscode。
编译
crtl shift B
直接将文档中的代码copy过来
{
// 有关 tasks.json 格式的文档,请参见
// https://go.microsoft.com/fwlink/?LinkId=733558
"version": "2.0.0",
"tasks": [
{
"label": "catkin_make:debug", //代表提示的描述性信息
"type": "shell", //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
"command": "catkin_make",//这个是我们需要运行的命令
"args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
"group": {"kind":"build","isDefault":true},
"presentation": {
"reveal": "always"//可选always或者silence,代表是否输出信息
},
"problemMatcher": "$msCompile"
}
]
}
ROS通讯机制
话题通信(发布订阅模式)
服务通信(请求响应模式)
参数服务器(参数共享模式)
话题的发布与订阅
ROS master 相当于“媒婆”,将发布方(Publisher)与接收方/订阅方(Subscriber)连接起来,牵完线后,ROS master 就可以关了。
话题的发布
1.创建功能包
vscode 中实现:src目录下鼠标右键选择(Create catkin package)创建
终端中实现:在src目录下
catkin_create_pkg 名字 依赖(roscpp rospy std_msgs…)
src: 源码
|-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成
|-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件
|-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)
|-- scripts 存储python文件
|-- src 存储C++源文件
|-- include 头文件
|-- msg 消息通信格式文件
|-- srv 服务通信格式文件
|-- action 动作格式文件
|-- launch 可一次性运行多个节点
|-- config 配置信息
|-- CMakeLists.txt: 编译的基本配置
2.编写源码(这里演示C++)
源码存放在创建的功能包下的src目录下。
实现流程:
1.包含头文件
2.初始化 ROS 节点:命名(唯一)
3.实例化 ROS 句柄
4.实例化 发布者 对象
5.组织被发布的数据,并编写逻辑发布数据
模版:
#include "ros/ros.h"
#include "std_msgs/String.h"
int main(int argc, char **argv)
{
//ros节点初始化,这里的talker是节点名称(名字唯一)
ros::init(argc, argv, "talker");
//创建ros句柄,管理节点资源
ros::NodeHandle n;
/*
官方注释:NodeHandle 是与 ROS 系统通信的主要接入点。
构造的第一个 NodeHandle 将完全初始化这个节点,最后一个
NodeHandle 被破坏将关闭节点。
*/
//创建一个发布者对象,<..>是指消息类型,"chat..."是话题名,
//1000是设置的队列长度,果消息发布的速度比我们发送的快,
//这里的数字指定在丢弃一些消息之前要缓冲多少消息
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
//设置循环频率
ros::Rate loop_rate(10);
int count = 0;
//ok函数:节点是否还活着
while (ros::ok())
{
//初始化
//消息发布
//按照循环频率延时
loop_rate.sleep();
}
return 0;
}
3.配置CMakeList.text文件(功能包目录下的)
add_executable(${PROJECT_NANE}_node src/plumbing_pub_sub_node.cpp)
第一个参数:映射源文件节点名称
第二个参数: 对应cpp文件名字
target_ link libraries( $ {PROJECT NAME} node $ {catkin_LIBRARIES)
参数:和前面映射名称一致
编译:
vscode中 快捷键 ctrl + shift + B
终端中 catkin_make
运行之前在工作空间的根目录下执行环境变量的配置
source ./devel/setup.bash
利用rostopic echo打印消息到屏幕
至此,创建结点发布消息的基础模版教程演示完毕。
Launch 文件
官方文档定义:roslaunch is a tool for easily launching multiple ROS nodes locally and remotely via SSH, as well as setting parameters on the Parameter Server. (roslaunch 是一个工具,可以通过 SSH 在本地和远程轻松启动多个 ROS 节点,以及在参数服务器上设置参数。)
实现功能:一次性启动多个节点
$ roslaunch package_name file.launch
为避免每次运行前都要输入此语句,
source ./devel/setup.bash
在文件夹中 ctrl+H显示隐藏文件,
打开 .bashrc文件,在文件末尾添加语句
source /home/username/catkin_ws/devel/setup.bash
运行命令
rosrun + 文件名(功能包)+ 节点名