ROS学习笔记(一) : 入门之基本概念
基本概念
1. Package
程序包,里面包含节点Node、ROS程序库、数据集、配置文件
Package Manefist
程序包的配置文件,即描述程序包的相关信息,包括其名字、版本、功能简述、依赖关系
2. Repositories
代码仓库
3. Computation Graph
计算图,ROS在点对点网络里整合并处理数据的过程。图中包含的基本概念:节点、主机、参数服务器、消息、服务、话题、数据包。
4. Node
节点,一个机器人控制系统由多个节点组成,每个节点控制不同的部分。比如一个机器人有两个节点,一个是传感器节点,专门负责接收传感器数据,另一个是控制节点,专门负责控制机器人作出某些动作。
5. Master
主机,节点管理器,功能是对于计算图中各个元素进行名字注册(register)和检索,没有主机,节点之间就不能找到彼此则无法进行通信。
Parameter Service
参数服务器,是主机的一部分,允许数据通过键的方式存储
6. Message
消息,节点之间通过传递消息交流,消息是一种数据结构
7. Topic
话题,消息的传输使用的是发布\订阅的机制。一个话题可理解为只针对某种消息,节点发送消息则是将该消息发布到其对应的话题上,只有那些订阅该话题的节点才能接收到这个消息。一个话题可能有多个订阅者和发布者,一般他们互相是不知道(也不需知道)对方的存在,以达到解耦(decouple)的效果。
【配图,节点发送消息的过程】
8. Service
服务,尽管"发布\订阅"模型非常灵活,但它是多对多、单向传输的,不适用于"发出请求\返回响应"方式的交互,然而这种交互在分布式系统中十分常见。因此 "请求\响应"通过服务来实现。节点需要提供的信息有:所使用服务的名字以及使用服务的客户,将这些信息打包成请求,发送出去之后等待答复。
9. Bag
数据包,存储一段时间内ROS的消息数据
10. Rosout
相当于ROS中的stdout/stderr
11. Roscore
主机+Rosout+参数服务器
实践操作
1. workspace 工作空间
catkin工作空间:
创建catkin工作空间,在需要创建的目录下输入命令:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
- 最后一个命令是使用catkin工作空间时很方便的工具,在工作空间中第一次执行该命令时,会自动在~/catkin_ws/src文件夹中创建CMakeList,同时在工作空间目录中创建build和devel文件夹
- 在devel文件夹中有几个setup.*sh 文件,source其中的任一文件可将工作空间路径包含到环境变量中
source devel/setup.bash
- 为了确认是否包含,检查ROS_PACKAGE _PATH这个环境变量的值:
echo $ROS_PACKAGE_PATH
可以看到当前工作空间的路径在最前面
【注:roscd, rospack等ROS工具只能针对那些路径已包含在环境变量ROS_PACKAGE _PATH中的程序包】
2. package 程序包
2.1 最简单的程序包 其文件结构看起来如下:
- my_package
- CMakeLists.txt
- package.xml
2.2 在catkin工作空间中的程序包
- workspace_folder
- src
- CMakeLists.txt
- pkg_1
- CMakeLists.txt
- package.xml
- ...
- pkg_n
- CMakeLists.txt
- package.xml
2.3 在工作空间中创建程序包
cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
- 最后一个命令用于创建名为beginner_tutorials的新程序包,这个程序包依赖于std _msgs、roscpp和rospy这几个程序包
- 执行后在src目录下看到beginner_tutorials文件夹,里面包含一个package.xml文件和一个CMakeList,这两个文件已自动包含了之前在命令中规定的依赖关系
- catkin_create_pkg 格式:
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
2.4 程序包的依赖关系
- 一级依赖
(注意要先将当前工作空间的路径添加到环境变量中,即前面提到的source命令,这样之后执行rospack命令才不会报错提示找不到beginner_tutorials这个包)
rospack depends1 beginner_tutorials
输出结果
std_msgs
rospy
roscpp
- 间接依赖
对于程序包A的一级依赖程序包B,其自身也依赖一些其它的程序包C,这些程序包C是A的间接依赖
rospack depends1 rospy
可看到rospy的一级依赖
rospack depend beginner_tutorials
递归检测出A的所有的依赖包(包括一级和间接)
2.5 编译程序包
用catkin_make,可认为是在CMake标准工作流程中依次调用了cmake和make
在工作空间中使用catkin_make
在工作空间的根目录下,输入
catkin_make
该命令会编译位于目录 catkin_ws/src 中的所有程序包
更多关于catkin_ make的资料: http://wiki.ros.org/catkin/commands/catkin_make
3. 用实际例子理解节点和话题
每个节点是一个可执行文件
节点之间通过话题来通信
- 比如一个遥控器节点和一个机器人节点,二者通过话题command来通信,遥控器节点发布信息到command话题中,机器人节点订阅command话题从而接收到遥控器节点发布的信息
使用rosrun
rosrun ros_pkg ros_pkg_node
- 该命令用于运行某个ros程序包中的某个节点
使用rosnode list
rosnode list
- 该命令可以列出当前活跃的所有节点
- rosnode help 列出可选的命令参数
使用rostopic echo
rostopic echo [topic]
- 该命令可以显示在某个话题上发布的信息
- rostopic help 列出可选的命令参数
使用rqt_graph
rosrun rqt_graph rqt_graph
- 打开rqt_graph 可以观察到目前有哪些节点在通过什么话题来通信
使用rqt_plot
rosrun rqt_plot rqt_plot
- 可以实时显示一个发布到某个话题上的数据变化图形
turtlesim模拟器的使用
首先运行turtlesim包中的turtlesim_node节点[海龟本体]
rosrun turtlesim turtlesim_node
另外打开一个终端
- 可以通过键盘来控制turtle [运行一个控制海龟的节点]
rosrun turtlesim turtle_teleop_key
在新终端中打开rqt_graph,可观察到这两个节点通过话题cmmd _vel来通信
rosrun rqt_graph rqt_graph
- 也可以通过手动发布消息到话题上来控制turtle
在新终端中, 列出当前的topic
rostopic list
列出该话题的消息类型
rostopic type /turtle1/cmd_vel
列出该消息类型的详细数据类型
rosmsg show geometry_msgs/Twist
发布消息到话题cmd_vel,告诉turtlesim _node,使其以2.0大小的线速度和1.8大小的角速度移动
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
命令中的-1表示rostopic发布一条信息后马上退出,也可以设置为循环发送:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
该信息以1Hz的稳定频率来发送,使turtle保持移动状态
这时可以观察rqt_graph
发现多了一个节点:rostopic发布器节点,同样地,该节点与turtlesim_node节点[海龟本体] 通过话题cmd _vel通信
roslaunch的使用
使用roslaunch同时运行多个节点,通过编写launch文件来配置各个节点
以turtlesim为例
首先保证环境变量中是否有catkin_ws工作空间的路径
echo $ROS_PACKAGE_PATH
若无,则进入该工作空间的根目录,执行
source devel/setup.bash
之后在任意目录下都可以进入之前创建的程序包
roscd beginner_tutorials
新建launch文件夹,在里面创建launch文件
mkdir launch
gedit turtlemimic.launch
拷贝以下launch文件的内容:
http://wiki.ros.org/cn/ROS/Tutorials/UsingRqtconsoleRoslaunch
ROSCPP
ROS编写消息发布器和订阅器
相关API格式
https://blog.csdn.net/junshen1314/article/details/44701693 更详细的解释
[http://wiki.ros.org/cn/ROS/Tutorials/WritingPublisherSubscriber(c%2B%2B)]
ROS学习笔记(一) : 入门之基本概念的更多相关文章
- 机器学习框架ML.NET学习笔记【1】基本概念与系列文章目录
一.序言 微软的机器学习框架于2018年5月出了0.1版本,2019年5月发布1.0版本.期间各版本之间差异(包括命名空间.方法等)还是比较大的,随着1.0版发布,应该是趋于稳定了.之前在园子里也看到 ...
- Java学习笔记之---入门
Java学习笔记之---入门 一. 为什么要在众多的编程语言中选择Java? java是一种纯面向对象的编程语言 java学习起来比较简单,适合初学者使用 java可以跨平台,即在Windows操作系 ...
- MongoDB学习笔记:快速入门
MongoDB学习笔记:快速入门 一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- WebSocket学习笔记——无痛入门
WebSocket学习笔记——无痛入门 标签: websocket 2014-04-09 22:05 4987人阅读 评论(1) 收藏 举报 分类: 物联网学习笔记(37) 版权声明:本文为博主原 ...
- ROS学习笔记七:在ROS中使用USB摄像头
下面是一些USB摄像头的驱动(大多数摄像头都支持uvc标准): 1 使用软件库里的uvc-camera功能包 1.1 检查摄像头 lsusb ----------------------------- ...
- DBFlow框架的学习笔记之入门
什么是DBFlow? dbflow是一款android高性的ORM数据库.可以使用在进行项目中有关数据库的操作.github下载源码 1.环境配置 先导入 apt plugin库到你的classpat ...
- 学习笔记_J2EE_SpringMVC_01_入门
1. 概述 笔者作为一个不太正经的不专业佛教信仰者,习惯了解事物的因果关系,所以概述就有点BBB...了.如果不喜欢这些的,请自行跳过概述章节,直接进入第二章的操作实践:2 入门示例. 1.1. ...
- dubbo入门学习笔记之入门demo(基于普通maven项目)
注:本笔记接dubbo入门学习笔记之环境准备继续记录; (四)开发服务提供者和消费者并让他们在启动时分别向注册中心注册和订阅服务 需求:订单服务中初始化订单功能需要调用用户服务的获取用户信息的接口(订 ...
- SpringBoot学习笔记<一>入门与基本配置
毕业实习项目技术学习笔记 参考文献 学习视频 2小时学会Spring Boot:https://www.imooc.com/learn/767 学习资料 SpringBoot入门:https://bl ...
随机推荐
- Day08 - Ruby比一比:String的+=与concat串接
前情提要: 在第七天我们透过比较Symbol和String,发现字串比符号多了更多方法!为了活用string method,今天我们接续前文,来探讨一题跟字串有关的题目: Ruby经典面试题目#08( ...
- js判断访问浏览器是安卓还是ios还是微信浏览器还是微博
var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = u.indexOf('Android') > - ...
- Unix/Linux系统的发展史
Unix/Linux系统相信是学编程的人都认识这两个系统.我们知道Unix要钱,而Linux免费,而且这两者之间的发展史是什么样的,是不是两者就是同一个东西呢? 我将会以时间的发展过程来一步步的给大家 ...
- SpringCloud-day09-Feign与Hystrix整合
8.5.Feign 与 Hystrix整合 服务熔断服务降级彻底解耦 前面的代码,用@HystrixCommand fallbackMethod是很不好的,因为和业务代码耦合度太高,不利于维护,所以需 ...
- nginx+ flume
nginx 作用: 做负载均衡 nginx和lvs的区别:nginx可以做反向代理 1.上传nginx安装包 tar -zxvf tengine-2.1.02.安装环境 依赖 gcc opens ...
- 《Orange‘s》Loader
Loader 作用 引导扇区只有512个字节,能做的事情很少,局限性太大.所以需要一个程序,通过引导扇区加载入内存,然后将控制权交给它,这样就突破了512字节的限制.这个程序便是loader. 加载过 ...
- paloalto防火墙激活许可证和订阅
1.您必须激活购买的每项服务的许可证,然后才能开始使用防火墙保护网络通信.可用许可证和订阅服务包括 • 威胁阻止 — 提供防病毒.防间谍软件和漏洞保护. • URL 筛选 — 可以创建安全策略,以便根 ...
- mysql 中启动服务的命令 、登录命令、退出命令 mysql 的常用命令
1.cmd 以管理员执行 下面命令 启动服务 :net start mysql57 关闭 服务:net stop mysql57 查看mysql 的版本信息 : mysql -V 指定主机地址登录: ...
- [原]Webpack 3 + AngularJS1.* + Bootstrap 4 + Mapbox-gl
直接上步骤 一.创建项目 1. 使用VSCode建立项目目录结构如下: 文档结构 wabg ├── http │ ├── app.js │ ├── controllers │ │ └── index. ...
- VS2015一新建项目就出现未将对象引用设置到对象的实例怎么办?[z]
https://blog.csdn.net/tiandyoin/article/details/79722800 在控制面板-卸载或修复程序太麻烦,而且不一定保证解决,可以这样------打开--C: ...