一、ROS是什么?

ROS=通信机制+开发工具+应用功能+生态系统

目的:提高机器人研发中的软件复用率。

1、ROS中的通信机制

松耦合分布式通信:

注意:什么是耦合、紧耦合、松耦合?

1.1 耦合

  耦合是两个或多个模块之间的相互关联。在软件工程中,两个模块之间的耦合度越高,维护成本越高。因此,在系统架构的设计过程中,应减少各个模块之间的耦合度,以提高应用的可维护性。

1.2 紧耦合

  紧耦合架构本质是Client/Server的模型,如下图所示:

优点是:架构简单、设计简单、开发周期短、能够快速的开发、投入、部署、应用。 但随着集群规模的扩大,系统的稳定性逐渐变差,主要原因如下: 1、同步操作导致对网络资源消耗大。同步操作在数据发送和数据返回之间,有很大一段是空闲的,这种空闲占用是对网络资源的极大浪费。 2、安全控制力度差,因为服务器直接暴露给客户机,容易引发网络攻击行为。 3、程序代码之间关联度过高,不利于模块化处理。

1.3 松耦合

  松耦合架构本质上是在client/server模型之间加入一个代理,把CS模型变成CAS模型。 在新的架构下,客户机的角色不变,代理服务器承担起与客户机的通信,和对客户机的识别判断工作,服务器位于代理服务器后面,对客户机来说不可见,它只负责数据处理工作,另外我们也把CS模型的同步操作改为CAS的代理处理。 如下图所示:

优点如下:

1、多任务并行处理能力获得极大提升。

2、实现负载自适应机制(根据当时运行环境,松耦合架构分配并行工作任务,避免超载现象)。

3、基本杜绝了对Server服务端的网络攻击行为,由于代理服务器的隔绝和筛查作用, 同时结合其它安全管理手段,外部攻击在代理服务器处就被识别和过滤掉了,这样就保护了后面的服务器不受影响。

4、异步操作减少了网络资源消耗和操作关联。

5、提高了系统的可维护性。

原文链接:https://blog.csdn.net/liguangyao213/article/details/123940756

2、ROS中的开发工具

2.1命令行&编译器

2.2 TF坐标变换

2.3 QT工具箱

2.4 Rviz

2.5 Gazebo

3、ROS中的应用功能

3.1 Navigation

3.2 SLAM

3.3 MoveIt

4、ROS 中的生态系统

二、ROS中的核心概念

1、通信机制

2、节点与节点管理器

3、话题通信

4、服务通信

5、话题VS服务

6、参数

7、文件系统

三、ROS命令行工具的使用

常用命令

rpt_graph
rostopic
rosservice
rosnode
rosparam
rosmsg
rossrv

以小海龟为例子:

首先启动 ROS Master:

roscore

然后启动小海龟仿真器:

rosrun turtlesim turtlesim_node

最后要启动小海龟控制节点:

rosrun tuetlesim turtle_teleop_key

注意:rosrun(运行对应节点) 用法:rosrun + 功能包 + 功能包结点

例如: rosrun turtlesim

其中,turtlesim是ros安装好后带的学习用的功能包,输入完代码以后双击tab键可以显示出其所有节点。

1、rpt_graph

命令:rpt_graph

功能:显示系统计算处理工具。

图示:

右边为仿真器节点 左边为键盘控制节点 中间turtle1为话题(数据)

2、rostopic

命令:rostopic list

功能:显示所有的话题列表

图示:

输入 rostopic pub /turtle1/cnd_vel geometry_msgs/Twist "linear: +两下tap显示海龟的位置、速度等信息

解析:pub是发布一个话题;/turtle1/cnd_vel是话题名;后面内容Tab键补全消息结构,双引号的内容为消息结构的具体数据,linear是线速度,angular是角速度

此时可以修改上方x y z改速度,修改下方x、y、z改角度(左右方向键选择对应数据更改)

    因为数据是发一次收一次,所以海龟只会短时间运动,如果要长时间运动,则需要给发送频率,

代码修改如下:

​             rostopic pub -r 10 /turtle1/cnd_vel geonetry_msgs/Twist "linear:

​            -r 10 表示修改发送频率。

3、rosservice

命令:rosservice list

功能:显示所有服务命令

图示:

    rosservice call + 调用list中的命令 发布服务请求

    例: rosservice call /spawn "x: 加一只小海龟 也可更改新出现小乌龟的速度、角度、名字等信息

下面的那个name是个反馈信息。

此后再输入rostopic list 效果如下:

4、rosnode

命令:rosnode

功能:显示所有节点信息

图示:

输入rosnode list 列出所有节点 可以看到小乌龟相关的所有节点

注意:rosout是启动roscore就会默认启动的一个节点,采集所有节点的日志信息 用于提交给上一层显示 (ros自带)

    输入rosnode info +节点名 用于显示节点的信息(包括发送的话题 订阅的话题 pid号等)

注意:PID是进程识别号(Process Identification)

5、rosparam

命令:rosparam

功能:param就是个中央注册表,可以进行参数的增删改查

参考链接https://www.jianshu.com/p/e4de8ba7ffb2

6、rosmsg

输入 rosmsg show + 话题信息 显示话题信息的类型

7、rossrv

命令:rossrv

功能:显示ros服务类型消息信息的相关命令

参考链接:https://blog.csdn.net/qq_43280851/article/details/125182206

补充:

    输入 $ rosbag record -a -O cmd_record 话题记录 记录小乌龟的运动轨迹

    输入 $ rosbag play cmd_record.bag 话题复现 按小乌龟的运动轨迹复现一次

 解析:-a 是all的意思,保存所有的信息;-o是保存成一个压缩包,后面是压缩包的名字

Ros入门21讲的更多相关文章

  1. ros系统21讲—前六讲

    课程介绍(第一讲) linux介绍安装(第二讲) linux的基础操作(第三讲) ROS中语言c++与python介绍(第四讲) 安装ROS系统(第五讲) 第一个: sudo sh -c echo d ...

  2. SLAM+语音机器人DIY系列:(二)ROS入门——5.编写简单的消息发布器和订阅器

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  3. SLAM+语音机器人DIY系列:(二)ROS入门——6.编写简单的service和client

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  4. SLAM+语音机器人DIY系列:(二)ROS入门——10.在实际机器人上运行ROS高级功能预览

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  5. ROS入门学习

    ROS学习笔记 ROS入门网站; ROS入门书籍 ROS主要包含包括功能包.节点.话题.消息类型和服务; ROS功能包/软件包(Packages) ROS软件包是一组用于实现特定功能的相关文件的集合, ...

  6. 《VC++ 6简明教程》即VC++ 6.0入门精讲 学习进度及笔记

    VC++6.0入门→精讲 2013.06.09,目前,每一章的“自测题”和“小结”三个板块还没有看(备注:第一章的“实验”已经看完). 2013.06.16 第三章的“实验”.“自测题”.“小结”和“ ...

  7. c#委托事件入门--第二讲:事件入门

    上文 c#委托事件入门--第一讲:委托入门 中和大家介绍了委托,学习委托必不可少的就要说下事件.以下思明仍然从事件是什么.为什么用事件.怎么实现事件和总结介绍一下事件 1.事件是什么:. 1.1 NE ...

  8. ROS_Kinetic_03 ROS入门向导

    ROS_Kinetic_03 ROS入门向导 每个人都有不同的学习习惯和爱好并针对不同的应用进行ROS相关设计与开发, 没有固定不变的学习模式,但以下的内容是通常都会用到的. 1. ROS基础教程 1 ...

  9. SLAM+语音机器人DIY系列:(二)ROS入门——1.ROS是什么

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

随机推荐

  1. 《Java编程思想》学习笔记_多态

    多态 多态指一个行为产生多种状态,针对父类类型可接收其子类类型,最终执行的状态由具体子类确定,其不同子类可呈现出不同状态.例如人[父类]都会跑步[行为],但小孩[子类]跑步.成年人[子类]跑步.运动员 ...

  2. MarkDown语法——更好地写博客

    MarkDown语法--更好地写博客 我们在学习过程中要尽量养成编写博客的 好习惯:一方面方便自己在学习之后进行一次汇总,其次自己书写的文章可以在以后的时间里反复查看以便于巩固,在找工作时博客也是被招 ...

  3. nw.js的cookie操作

    在实战中,我遇到nw.js cookie一个奇怪的现象. 当我写入cookie(非httponly)后,关闭nw.js.然后再打开nw.js发现cookie没有写入成功.经过摸索,发现 nw.js的c ...

  4. cup缓存基础知识

    目录 cup缓存 缓存结构 直接映射缓存 cup缓存 CPU缓存(CPU Cache)的目的是为了提高访问内存(RAM)的效率,这虽然已经涉及到硬件的领域,但它仍然与我们息息相关,了解了它的一些原理, ...

  5. Java8 函数式【1】:一文读懂逆变

    Java8 函数式[1]:一文读懂逆变 禁止转载 pure function 协变 逆变 Java8 引入了函数式接口,从此方法传参可以传递函数了,有人说: 不就是传一个方法吗,语法糖! lambda ...

  6. Deep Learning-深度学习(一)

    深度学习入门 1.人工智能.机器学习.深度学习 1.1 人工智能(AI) 一个比较宽泛的概念.即用来模拟人的智能的理论,并对这个模拟出来的智能进行延伸和开拓.通俗来讲就是要达到用机器模拟人类的聪慧来处 ...

  7. 发现Mapstruct的一个bug

    前言 在一次需求的开发过程中,发现一个对象插入数据库时某个字段总是为空.简化后的代码如下: @Autowired private PersonService personService; public ...

  8. DNS 系列(三):如何免受 DNS 欺骗的侵害

    互联网上每一台设备都会有一个 IP 地址,我们在访问网站或发送信息时,其实都是通过 IP 地址达成准确请求的.但是这个 IP 地址由很长一串数字组成,记忆起来相当困难,所以我们创造了更实用的域名来代替 ...

  9. APISpace 绕口令API接口 免费好用

    绕口令又称急口令.吃口令.拗口令等.是一种民间传统的语言游戏 ,由于它是将若干双声.叠韵词或发音相同.相近的语.词有意集中在一起,组成简单.有趣的语韵,要求快速念出,所以读起来使人感到节奏感强,妙趣横 ...

  10. 二分法求最长子序列长度(STL)(nlogn)

    声明: 正如标题所说,只是求长度,应对题目要求,请自行判断,用错代码概不负责! 本蒟蒻的代码可能有错,有错误还请各位dalao请指出 运用了upper_bound()和lower_bound()函数 ...