Ros入门21讲

时间:2022-09-09 10:24:33

一、ROS是什么?

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

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

1、ROS中的通信机制

松耦合分布式通信:

Ros入门21讲

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

1.1 耦合

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

1.2 紧耦合

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

Ros入门21讲

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

1.3 松耦合

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

 

 Ros入门21讲

优点如下:

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

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

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

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

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

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

2、ROS中的开发工具

2.1命令行&编译器

Ros入门21讲

2.2 TF坐标变换

Ros入门21讲

 2.3 QT工具箱

Ros入门21讲

2.4 Rviz

Ros入门21讲

 2.5 Gazebo

Ros入门21讲

 3、ROS中的应用功能

3.1 Navigation

Ros入门21讲

 3.2 SLAM

Ros入门21讲

 

 3.3 MoveIt

Ros入门21讲

4、ROS 中的生态系统

Ros入门21讲

二、ROS中的核心概念

1、通信机制

Ros入门21讲

 

2、节点与节点管理器

 

Ros入门21讲

 

 

 3、话题通信

Ros入门21讲

 

 

 4、服务通信

Ros入门21讲

 

 

 5、话题VS服务

Ros入门21讲

 

 

 6、参数

Ros入门21讲

 

 

7、文件系统

 

Ros入门21讲

 

 

 三、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

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

图示:

Ros入门21讲

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

2、rostopic

命令:rostopic list

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

图示:

Ros入门21讲

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

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

 

Ros入门21讲

 

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

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

代码修改如下:

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

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

Ros入门21讲

 

 Ros入门21讲

 

 


3、rosservice

命令:rosservice list

功能:显示所有服务命令

图示:

Ros入门21讲

 

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

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

Ros入门21讲

 

Ros入门21讲

 

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

 

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

Ros入门21讲

 4、rosnode

命令:rosnode

功能:显示所有节点信息

图示:

Ros入门21讲

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

Ros入门21讲

 

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

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

 Ros入门21讲

 

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

 5、rosparam

 命令:rosparam

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

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

 

6、rosmsg

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

Ros入门21讲

 

 

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讲

 

 Ros入门21讲