一、核心概念

1.1 节点(Node)和节点管理器(ROS Master)

节点是什么?

  • 完成某个任务的进程
  • 节点名具有唯一性

节点管理器可以做什么?

  • 节点的注册和命名
  • 完成、记录节点之间的通信
  • 参数服务器(运行时参数)

1.2 话题通信和服务通信

话题最常见的地方就是微博了吧,它是关于某件事情的讨论、关注的一种信息交流方式。你可以随时发布新的帖子,但是订阅者什么时候接收不是你控制的,订阅者都是在恰当的时候点击刷新还是什么的获取到这个信息。话题(Topic)是异步通信,采用发布/订阅模型;消息(Message),话题通信的消息类型由语言无关的.msg文件定义,对于一些常见的数据,ROS提供标准类型(std_msgs),当然你也可以自定数据类型。

服务(Service)是同步通信,客户端/服务器(C/S)模型,服务通信的消息类型由语言无关的.srv文件定义,ROS提供标准类型(std_msgs),当然你也可以自定数据类型。

两种类型对比:

对比项 话题 服务
同步性 异步 同步
通信模型 发布/订阅 服务器/客户端
底层协议 ROSTCP/ROSUDP ROSTCP/ROSUDP
反馈机制
缓冲区
实时性
节点关系 多对多 一对多
适用场景 数据传输 逻辑处理

参数是全局共享字典,由ROS Master上的参数服务器管理,节点可通过网络访问参数服务器,从而存储和检索运行时参数。参数适合存储静态、非二进制配置参数,不适合动态参数。

1.3 常用命令行工具

下面列举了21讲出现的所有命令行工具

命令 含义
roscore 启动ROS Master、参数服务器和rosout记录节点
rostopic 打印ROS话题信息
rosservice 打印ROS服务信息
rosnode 打印ROS节点信息
rosparam 获取设置和删除ROS参数服务器参数
rosrun 启动某个功能包中的某个节点(应用)
rosmsg 显示ROS消息类型
rossrv 显示ROS服务类型
ros_bag 记录、重放和操作bag文件(一种文件格式记录ROS消息类型)
rqt_graph 启动一个QT程序显示系统通信情况
catkin_make 编译功能包
catkin_create_pkg 创建功能包

其他没有出现但是很有用的命令:

命令 含义
roscd 跳转到目标package

例子:运行一个海龟仿真器

Step1:roscore 启动ROS Master
Step2:rosrun turtlesim turtlesim_node 启动turtlesim功能包中的turtlesim_node节点
Step3:rosrun turtlesim turtle_teleop_key 启动turtlesim中的turtle_teleop_key节点

其中,第一步是为了启动节点管理器(ROS Master),有了它节点之间才有可能相互通信;第二步是为了启动海龟可视化应用;第三步是为了启动键盘操作海龟的应用,用于控制我们海龟。

海龟可视化应用:

键盘操作海龟应用,没有GUI界面。

rqt_graph(ros qt graph) 查看节点及其通信方式。

从图上可以看出节点有名为/teleop_turtle/turtlesim两个节点,这里有几点需要注意:

  • 应用名不等于节点名,如海龟可视化应用,节点名为turtlesim_node而在graph中显示的是turtlesim
  • 无论是节点还是数据,都采用了文件夹形式的命名,如/turtle1/cmd_vel

rosnode list /rostopic list:列出所有节点/服务

rosnode info /turtlesim:查看某个节点详细信息

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist “linear”:以每秒10次的速度发送 话题类型为/turtle1/cmd_vel的数据,这个数据是后面的内容,一般用tab进行辅助。

junwu@Room:~$ rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:x: 1.0y: 0.0z: 0.0
angular:x: 0.0y: 0.0z: 0.0" 

rosmsg show + 信息类型:可以查看某个信息的数据结构

rosservice list:查看服务列表

rosservice call +服务:启动某个服务,如可以多弄一个海龟。
话题记录:rosbag record -a -O cmd_record 记录所有动作,目标文件为cmd_record。其实文件名字为cmd_record_2022-03-26-16-52-39.bag

话题复现:rosbag play +cmd_record_2022-03-26-16-52-39.bag

rosrun 功能包 节点 启动功能包中的某个节点。

二、ROS工作空间和功能包创建

工作空间是一个用来存放工程相关文件的文件夹,功能包则是最小的功能单元。

2.1 利用catkin_make 创建工作空间

在创建工作空间之前,我们先来看看工作空间都可能会有哪些内容。它主要包含以下几个部分:

  • src 代码空间
  • build 编译空间
  • devel 开发空间
  • install 安装空间

工作空间像是满足一定要求的文件布局,catkin_make是用来创建catkin工作空间布局并且调用cmake和make命令的,其基本格式如下:

usage: catkin_make [-h] [-C DIRECTORY] [--source SOURCE] [--build BUILD] [--use-ninja] [--use-nmake] [--use-gmake] [--force-cmake] [--no-color][--pkg PKG [PKG ...]] [--only-pkg-with-deps ONLY_PKG_WITH_DEPS [ONLY_PKG_WITH_DEPS ...]] [--cmake-args [CMAKE_ARGS [CMAKE_ARGS ...]]][--make-args [MAKE_ARGS [MAKE_ARGS ...]]] [--override-build-tool-check]

默认情况下,catkin_make将会在当前文件夹寻找一个存放源文件代码的src的文件夹,如果没有找到这个文件夹,将会出现这样的错误:

junwu@Room:~/catkin_ws/DemoWorkSpace$ catkin_make
Base path: /home/junwu/catkin_ws/DemoWorkSpace
The specified source space "/home/junwu/catkin_ws/DemoWorkSpace/src" does not exist

使用catkin_make可以帮助你构建工作空间

mkdir src
catkin_make

工作空间结构变成了以下形式[1]:

junwu@Room:~/catkin_ws/DemoWorkSpace$ tree -L 1
.
├── build
├── devel
└── src3 directories, 0 files

在工作空间下src文件夹里有一个CMakeLists.txt,它用来指导整个工作空间文件的编译(也就是所有package的源代码编译),在CMake中叫做根CMakeLists.txt,表示编译的起点。

如果你需要安装install空间,手动调用catkin_make install即可。创建之后文件夹devel的内容如下:

.
├── cmake.lock
├── env.sh
├── lib
├── local_setup.bash
├── local_setup.sh
├── local_setup.zsh
├── setup.bash
├── setup.sh
├── _setup_util.py
└── setup.zsh1 directory, 9 files

其中setup.bash这个文件会将这个包纳入ROS管理,在使用这个功能包之前需要手动调用source setup.sh,如果你不想每次都输入的话,你可以考虑将这个命令写进放进~/.bashrc中:

source /home/junwu/catkin_ws/DemoWorkspace/devel/setup.bash

Tips:echo $ROS_PACKAGE_PATH可以查看当前环境变量都有哪些工作空间。

2.2 创建功能包

有了工作空间之后,我们就能够创建自己的功能包了。为了创建自己的功能包,需要用到以下命令:

usage: catkin_create_pkg [-h] [--meta] [-s [SYS_DEPS [SYS_DEPS ...]]] [-b [BOOST_COMPS [BOOST_COMPS ...]]] [-V PKG_VERSION] [-D DESCRIPTION] [-l LICENSE][-a AUTHOR] [-m MAINTAINER] [--rosdistro ROSDISTRO]name [dependencies [dependencies ...]]

这个命令使用来创建一个新的catkin包的。现阶段我们只关心必须的选项:

catkin_create_pkg name [dependencies [dependencies ...]]

其中name是这个包名字,后面是依赖项(如std_msg roscpp rospy之类的)

catkin_create_pkg test_pkg std_msgs rospy roscpp

执行之后可以看到工作空间src文件夹下多了一个名为test_pkg的文件夹,其结构如下:

.
├── CMakeLists.txt
├── include
├── package.xml
└── src2 directories, 2 files

在功能包文件夹中的CMakeLists.txt是子CMakeLists.txt,功能是指导如何编译这个文件夹下的源文件。Tips:包名字等于文件夹名字,这个非常重要,你rosrun的时候可以直接看这个名字来启动包。

2.3 catkin_make 编译功能包

编译的时候我们返回到工作空间根目录,执行catkin_make即可进行编译。整个过程,CMake首先进入src调用整个工程的CMakeLists.txt,然后在进入每个功能包中的CMakeLists.txt,完成编译任务,最终的可执行文件将会存放在工作空间/devel/lib/XXXpackage下。注意:同一个工作空间功能包必须唯一,不同工作空间则可以不唯一。


[1] 当然你也可以指定某个源文件夹名称用来创建工作空间:

catkin_make --source sss #源文件为sss创建一个工作空间

ROS入门21讲笔记(一)基本概念相关推荐

  1. 古月居ROS入门21讲笔记

    ROS入门21讲笔记--古月居 1 C++&Python极简基础 1.1 安装编译/解析器 1.2 for循环 1.3 while循环 1.4 面向对象 2. ROS基础 2.1 ROS概念 ...

  2. 古月居《ROS入门21讲》零基础学习笔记

    文章目录 前言 1.课程简介 2.Linux系统介绍及安装 3.Linux基础操作(操作集) 命令结构 常用命令 快捷操作 4.cpp&python极简基础(操作集) 简单对比 安装编译器 编 ...

  3. 古月居ROS 入门21讲--PA5-PA8笔记

    ROS 入门21讲--PA5-PA8笔记 一.PA5 ROS 安装 1.配置软件库 备注:上面的四个选项打上钩. 2.添加软件源 sudo sh -c 'echo "deb http://p ...

  4. 古月居 ROS 入门21讲--PA17 ROS中坐标系管理系统笔记

    古月居 ROS 入门21讲--PA17 ROS中坐标系管理系统笔记 1.TF 功能包功能 ∙ \bullet ∙ 五秒钟之前,机器人头部坐标系相当于全局坐标系的关系是怎样的? ∙ \bullet ∙机 ...

  5. ROS入门21讲 | ROS机器人入门教程 【简明笔记】

    古月·ROS入门21讲 | 一学就会的ROS机器人入门教程 文章目录 ROS核心概念 ROS命令行 工作空间与功能包 订阅与发布 发布者 Publisher 订阅者 Subscriber 话题消息的自 ...

  6. 古月ROS入门21讲学习笔记

    古月ROS入门21讲学习笔记 1.VMware+Ubuntu18.04+ROS安装 2.Linux命令 3.ROS是什么 ROS中的通信机制 ROS的开发工具 ROS的应用功能 ROS中的生态系统 老 ...

  7. 古月居ROS入门21讲学习笔记P9

    古月居ROS入门21讲学习笔记P9 工作空间(workspace) 创建工作空间 创建功能包 实操 创建工作空间 创建功能包 老师在B站的原视频 链接: [古月居]古月·ROS入门21讲 | 一学就会 ...

  8. 古月居 ROS 入门21讲--PA18 tf坐标系广播与监听的编程实现笔记

    古月居 ROS 入门21讲--PA18 tf坐标系广播与监听的编程实现 1.创建功能包 cd ~/catkin_ws/src catkin_create_pkg learning_tf roscpp ...

  9. 【ROS入门21讲】发布者Publisher的编程使用

    [ROS入门21讲]发布者Publisher的编程使用 本文章是针对bilibili古月居up的[ROS入门21讲]所作的笔记,笔记从第8讲开始,主要记录一些关键内容方便查阅. 视频连接:[ROS入门 ...

最新文章

  1. 数据结构(04)— 线性顺序表实战
  2. Java Socket 编程
  3. 皮一皮:浓浓的父爱...
  4. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第33篇]Bellcore攻击是如何攻击使用CRT的RSA的?
  5. 设置servlet或action作为欢迎页面
  6. 【转】如何在Qt 4程序中优化布局结构-兼回答网友提问
  7. Python基础----Matplotlib_新增
  8. oracle index logging,index在logging什么?
  9. html添加在线音乐代码,给网页添加背景音乐的HTML代码
  10. SPSS入门教程—问卷的信度量化分析
  11. EI会议列表--IEEE主办的会议
  12. 单位dB和dBm的区别
  13. Adobe Premiere基础-介绍,配置,快捷键,创建项目,创建序列(一)
  14. ios本地文件内容读取,.json .plist 文件读写
  15. 玩安卓从 0 到 1 之列表一键置顶
  16. 软件测试面试题含答案
  17. PostgreSQL在Linux和Windows安装和入门基础教程
  18. 小米 微信:无法连接服务器,微信出现大规模故障 多地无法登录
  19. 哪个学校计算机最牛?全国计算机专业大学排名清单来了!
  20. SEO新手不知道每天做什么,看了你就知道

热门文章

  1. 华硕B460m plus+Intel 10400+AMD 5500xt黑苹果EFI引导文件
  2. 计算机毕业设计(附源码)python银行服务评价系统
  3. Python 文件处理 open()函数
  4. Android 面试指南
  5. cesium模型不遮挡点线面_cesium 学习(八) 基础绘制(点线面)
  6. 无边落木萧萧下,不尽长江滚滚来。
  7. 栈内存和堆内存的区别
  8. 2022年全国大学生数学建模竞赛赛题B组解题参考+代码
  9. mac播客播放器:Moon FM for Mac
  10. ArcGIS Pro_地理配准