ROS



1.简介

Robot Operating System,缩写为ROS。
是一种开发框架,是构建在其它操作系统之上的一种结构化的通讯层


2.架构

 ROS可以分为基础设施层、通信层和应用层。其中,
ROS的基础设施层 包括ROS中的Python、C++等运行环境、ROS文件系统与ROS包管理机制等。
ROS的通信层 提供基础的ROS IPC机制以及ROS的数据分发服务(Data Distribution Service,DDS)等。
ROS的应用层 是基于一个个节点所构成的计算图,
这些节点之间可以使用ROS的通信层直接进行互相调用,
或者通过对一些话题(topic)发布消息或者订阅消息以进行间接通信。


3.概念:

依赖: 如果用c++进行编写,需要用到ROS提供的库  roscpp 
节点如果用python进行编写,需要用到ROS提供的库 rospy
功能包: 功能包是ROS中软件组织的基本形式,一
个功能包具有用于创建ROS程序的最小结构和最少内容,它可以包含ROS运行的进程(节点)、配置文件等

节点(node) 主题(topic) 服务(server) 参数服务器(parameter server)
roscore
rosmsg
rosnode rostopic rosservice rosparam rosbag
消息记录包(bag)是一种用于保存和回放ROS消息数据的文件格式
分布式的进程(节点),进程被封装在程序包和功能包集中
ROS 中创建的节点是有名称的,
C++ 初始化节点 通过 API:ros::init(argc,argv,"xxxx");来定义节点名称,
Python 初始化节点 通过 rospy.init_node("yyyy") 来定义节点名称


01.资源和文件

01.安装后的文件位置 
/opt/ros
/bin
/include
/lib
/etc
02.项目的文件结构
一个ROS程序的不同组件要被放在不同的文件夹下,
这些文件夹是根据不同的功能来对文件进行组织的
工作空间: 源文件空间 编译空间 开发空间
配置:源文件空间配置文件 功能包配置文件
功能包
功能包对应的源文件存放目录
工具:
Rosbags是ROS中众所周知的有用的日志记录,调试和测试工具


02.进程

  roscore === 是 ROS 的系统先决条件节点和程序的集合, 必须运行 roscore 才能使 ROS 节点进行通信
roscore 将启动:ros master ros 参数服务器 rosout 日志节点


ROS开发

#ROS项目的组织形式
#ROS的情况
roscore
rosrun

查看版本
1、先在终端输入roscore # 后台没有运行ros,开启ROS
2、打开新终端,再输入,rosparam list
3、再输入rosparam get /rosdistro就能得到版本


历史版本

 版本名称         发布日期    版本生命周期  操作系统平台
ROS2 Galactic Geochelone May 23rd, 2021 November 2022
ROS2 Foxy Fitzroy 2020年6月5日 2023年5月 Ubuntu Linux, macOS, or Windows 10
ROS Noetic Ninjemys 2020年5月 2025年5月 Ubuntu 20.04
ROS2 Dashing Diademata 2019年5月 2021年5月 2的第一个长期限支持(LTS)版本
ROS Melodic Morenia 2018年5月23日 2023年5月 Ubuntu 17.10, Ubuntu 18.04, Debian 9, Windows 10
ROS Lunar Loggerhead 2017年5月23日 2019年5月 Ubuntu 16.04, Ubuntu 16.10, Ubuntu 17.04,Debian 9
----------------------------------------------
ROS Box Turtle 2010年3月2日-- Ubuntu 8.04, Ubuntu 9.04, Ubuntu 9.10, Ubuntu 10.04
ROS was started in 2007
说明: Get ROS Melodic Morenia on Ubuntu Linux
Get ROS Noetic Ninjemys on Ubuntu Linux (Recommended for Latest ROS 1 LTS)
Get ROS Foxy Fitzroy on Ubuntu Linux, macOS, or Windows 10(Recommended for Latest ROS 2 LTS)
ROS2 重新设计了架构实现,也考虑到了与ROS1的兼容,专门开发了一个功能包——ros1_bridge,来完成ROS2与ROS1之间的通讯
ROS2降低了将基于ROS 2的原型转换为产品的复杂性
ROS 1的通讯系统 基于 TCPROS/UDPROS ,强依赖于master节点的处理,
ROS 2的通讯系统 基于 DDS 进而取消了master,同时在ROS2内部提供了DDS的抽象层实现
ROS 1的核心主要使用C ++ 03,在其API并没有使用C++ 11功能 ROS 2广泛使用C ++ 11
ROS 1的Python版本为2.7 ROS 2的Python版本至少为3.5,
ROS 2使用了新的编译系统 Ament (ROS1为 Catkin) Ament 是 catkin 元编译工具的迭代, 与catkin相比,Ament没有devel目录
(Data Distribution Service ,DDS)数据分发服务 低层协议
版本参考: https://docs.ros.org/en/galactic/Releases.html#releases
https://wiki.ros.org/Distributions


附录

   借助 catkin 来编译 ROS node C++ 程序。
catkin_pkg - A Python runtime library for catkin
可以看成是将 C++ 程序放入 ROS 框架中,以 ROS 的标准形式来编译
cmake 指令依据 CMakeLists.txt 文件,生成makefiles文件,make再依据此makefiles文件编译链接生成可执行文件.
catkin_make 是将cmake与make的编译方式做了一个封装的指令工具, 规范了工作路径与生成文件路径

-I<dir> 指定头文件的搜索路径
-L<dir> 指定静态库的搜索路径
头文件是包含函数声明,宏定义,类的声明的文件
在linux中一般头文件会在/usr/include中,
如果没有可以使用 locate命令查找文件所在位置
库文件是一种目标文件,静态库是可重定位目标文件,动态库是共享目标文件。
一般在/usr/lib、/usr/lib64、/lib、/lib64都包含库文件
头文件是在预处理时使用;库文件是链接时使用 头文件内容还是高级语言内容;库文件是二进制文件


参考

 ROS2探索总结(八)—— What is ROS 2.0 ? https://www.guyuehome.com/2300