01 ROS的运行架构——环境变量和工作空间

说明:ROS的运行架构是很容易让人产生疑惑的,始终感觉在机械模仿,本篇内容是建立在对ROS组织架构重新的审视和理解基础之上的。

01.整体组织架构说明

a. 安装包架构(包括5个文件夹),ubantu系统安装,默认在“计算机/opt/ros/版本号(kinetic/melodic)”目录下

001 bin文件夹

主要保存一些可执行的程序和命令(多数在ROS的终端界面可以直接运行)

002 include文件夹

主要存放命令行/终端安装的功能包代脉的头文件(借此建立各个功能包间的依赖关系,即头文件隶属于某功能包,且每个功能包均具有头文件,从而方便彼此之间进行调用)

003 lib文件夹

主要存放通过终端安装的功能包的节点(以.so结尾的可执行程序)

004 etc文件夹

主要存放ros和catkin配置的文件

005 share文件夹

功能包接口的具体的信息(话题、服务、action)

b. 环境变量( ※)

为什么要配置

ROS是依赖于某种组合空间的概念,而这种概念就是通过配置脚本环境来实现的,即可以从源获取更多的ROS功能包,因此,运行前需要source多个setup.*sh文件中的某一个或将其添加至启动脚本环境里。

查找配置环境路径的命令 

export | grep ROS

若发现调用功能包未进行有效配置,需要source某些setup.*sh文件

配置方法

如果你是通过ubuntu上的 apt 工具来安装ROS的,那么你将会在'/opt/ros/<distro>/'目录中看到setup.*sh文件,然后你可以执行下面的source命令:

source /opt/ros/kinetic/setup.bash //每次打开终端时,都需要先运行上面这条命令后才能运行ros相关的命令,注意橘色部分是ros版本号,应作调整

为避免繁琐,可以事先在.bashrc文件(初学者请注意:该文件是在当前系统用户的home目录下。)中添加上述命令,当每次登录后系统已经自动执行这些命令配置好环境。

显示如下:

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc //echo写入,把source 这条命令写入.bashrc这个文件里;source的意思是立即运行,这个bash文件
source ~/.bashrc  //.bashrc文件是电脑用户打开就会加载的文件,所以相当于一种永久性配置。在这里面,你可以写“命令简写”等方便,也可以加载一些软件配置。不source话,会下次生效。
所以一般会source一下,立即运行

工作空间创建及环境配置流程

a. 创建

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace //catkin_init_worksapce命令和catkin_ws的名称无关,固定写法,但工作空间名字可以改,src这个文件夹的名字不能改

b. 回到主目录,source一下新生成的setup.*sh文件

cd ~/catkin_ws/
catkin_make
source devel/setup.bash

运行成功,提示

Creating symlink "/home/jpy/catkin_ws/src/CMakeLists.txt" pointing to "/opt/ros/melodic/share/catkin/cmake/toplevel.cmake"

c. 配置情况检查

echo $ROS_PACKAGE_PATH

d. 设置环境变量自动配置

echo "source /catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

workspace创建的各文件夹

a. build

build是编译过程当中产生的中间文件,一些二进制文件,我们基本上用不到,不用操心

b. devel

devel是开发空间,里面存放开发过程中产生的一些可执行文件,包括一些库,devel与install的一些功能是类似的,只不过一个是开发中,一个是开发结束之后发布给客户使用的可执行文件/结果文件

c. install

install是安装空间,里面存放编译生成的可执行文件

d. src

src文件夹存放之后功能包的源码

代码创建

创建代码一定要创建功能包,功能包是ROS里面源码的最小单元,所有源码都必须放到功能包里面,不能直接放到src下面去编译,这是不被允许的。必须要创建功能包。

同一个工作空间下,不允许存在同名功能包。
不同工作空间下,允许 存在同名功能包。

02. 运行架构

工作空间(work space)是ROS中非常重要的一个概念,可以把工作空间理解为一个大的工厂,里面的分成几个大的生产车间(package),每一个生产车间中会有若干个具有不同技能的工人(node)。当工厂运转时,每个车间中的工人node同时工作,他们通过话题(topic)进行信息沟通。各个大的车间之间也存在这互相依赖的关系,共同组成一个有机的整体。

a. 层次架构

b. 文件系统级别及概念

文件系统级——综合功能包——功能包(功能包清单/消息/服务/代码/其它)

功能包清单:

含义:是一个文件名为package.xml的XML文件,文件中必须包括与任何兼容包的根文件夹。

功能:文件定义了有关包的属性,例如包名称,版本号,作者,维护者以及其他catkin包的依赖关系。

具体细节及构建方法,可参考博客 https://junjun.blog.csdn.net/article/details/82084707(感谢原文作者的详细总结)

03 . 常用命令语句

1、rqt_graph:系统中的主要资源以计算图的形式可视化的展示出来

2、rosnode list:系统中所有节点

3、rosnode info /turtlesim:查看节点的所有信息
4、rostopic list:系统中所有发布或订阅的话题
5、rostopic info /turtel/cmd_vel:话题信息的具体内容
6、rostopic echo /turtlel/cmd_vel:监听信息的具体内容
7、rosservice list:系统中的所有服务
8、rosservice info /spawn:查看服务的具体内容
9、rosservice call /spawn "":发布服务
10、rqt_plot:将数据通过曲线的形式绘制出来
————————————————
说明:仅记录供学习使用,侵权请联系删除,参考原文链接:

1/ https://blog.csdn.net/qq_40817117/article/details/108579043

2/ https://blog.csdn.net/cliukai/article/details/90448874

3/ https://blog.csdn.net/qq_28306361/article/details/85142192

4/https://blog.csdn.net/qq_43569735/article/details/108038384

原文地址:https://www.cnblogs.com/Pygoupfs/p/15215158.html