ROS入门21讲笔记(一)基本概念
一、核心概念
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讲笔记(一)基本概念相关推荐
- 古月居ROS入门21讲笔记
ROS入门21讲笔记--古月居 1 C++&Python极简基础 1.1 安装编译/解析器 1.2 for循环 1.3 while循环 1.4 面向对象 2. ROS基础 2.1 ROS概念 ...
- 古月居《ROS入门21讲》零基础学习笔记
文章目录 前言 1.课程简介 2.Linux系统介绍及安装 3.Linux基础操作(操作集) 命令结构 常用命令 快捷操作 4.cpp&python极简基础(操作集) 简单对比 安装编译器 编 ...
- 古月居ROS 入门21讲--PA5-PA8笔记
ROS 入门21讲--PA5-PA8笔记 一.PA5 ROS 安装 1.配置软件库 备注:上面的四个选项打上钩. 2.添加软件源 sudo sh -c 'echo "deb http://p ...
- 古月居 ROS 入门21讲--PA17 ROS中坐标系管理系统笔记
古月居 ROS 入门21讲--PA17 ROS中坐标系管理系统笔记 1.TF 功能包功能 ∙ \bullet ∙ 五秒钟之前,机器人头部坐标系相当于全局坐标系的关系是怎样的? ∙ \bullet ∙机 ...
- ROS入门21讲 | ROS机器人入门教程 【简明笔记】
古月·ROS入门21讲 | 一学就会的ROS机器人入门教程 文章目录 ROS核心概念 ROS命令行 工作空间与功能包 订阅与发布 发布者 Publisher 订阅者 Subscriber 话题消息的自 ...
- 古月ROS入门21讲学习笔记
古月ROS入门21讲学习笔记 1.VMware+Ubuntu18.04+ROS安装 2.Linux命令 3.ROS是什么 ROS中的通信机制 ROS的开发工具 ROS的应用功能 ROS中的生态系统 老 ...
- 古月居ROS入门21讲学习笔记P9
古月居ROS入门21讲学习笔记P9 工作空间(workspace) 创建工作空间 创建功能包 实操 创建工作空间 创建功能包 老师在B站的原视频 链接: [古月居]古月·ROS入门21讲 | 一学就会 ...
- 古月居 ROS 入门21讲--PA18 tf坐标系广播与监听的编程实现笔记
古月居 ROS 入门21讲--PA18 tf坐标系广播与监听的编程实现 1.创建功能包 cd ~/catkin_ws/src catkin_create_pkg learning_tf roscpp ...
- 【ROS入门21讲】发布者Publisher的编程使用
[ROS入门21讲]发布者Publisher的编程使用 本文章是针对bilibili古月居up的[ROS入门21讲]所作的笔记,笔记从第8讲开始,主要记录一些关键内容方便查阅. 视频连接:[ROS入门 ...
最新文章
- 数据结构(04)— 线性顺序表实战
- Java Socket 编程
- 皮一皮:浓浓的父爱...
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第33篇]Bellcore攻击是如何攻击使用CRT的RSA的?
- 设置servlet或action作为欢迎页面
- 【转】如何在Qt 4程序中优化布局结构-兼回答网友提问
- Python基础----Matplotlib_新增
- oracle index logging,index在logging什么?
- html添加在线音乐代码,给网页添加背景音乐的HTML代码
- SPSS入门教程—问卷的信度量化分析
- EI会议列表--IEEE主办的会议
- 单位dB和dBm的区别
- Adobe Premiere基础-介绍,配置,快捷键,创建项目,创建序列(一)
- ios本地文件内容读取,.json .plist 文件读写
- 玩安卓从 0 到 1 之列表一键置顶
- 软件测试面试题含答案
- PostgreSQL在Linux和Windows安装和入门基础教程
- 小米 微信:无法连接服务器,微信出现大规模故障 多地无法登录
- 哪个学校计算机最牛?全国计算机专业大学排名清单来了!
- SEO新手不知道每天做什么,看了你就知道