ROS学习笔记1-1安装过程的几点理解

2018-02-02 by 许氏Forwards

安装部分

在安装后,有一个步骤1.6是设置环境,中间用到的指令echo是常用指令,它的功能是将输入的字符串送往标准输出。当格式为:echo 文件内容 >> 文件名 时,是向文件中增加文件内容。

 

bash文件中其实主要就是运行所需要的各种所需环境变量的定义。

source setup.bash 是把ros中的setup.bash文件挂载到ROS的文件系统中去,这样当用户执行一些文件系统的命令时,就不会提示找不到该工作空间里的包或者文件。

~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该文件被读取。

通过source ~/.bashrc使其生效。

source功能:使shell读入指定的shell程序文件并依次执行文件中的所有语句。

source命令通常用于重新执行刚修改的初始化文件,使之立即生效而不必注销并重新登录。

安装过程中还有一步骤是配置source.list文件,用到的语句如下

 

其中sh命令是shell命令语言解释器,执行命令从标准输入或从一个文件中读取。通过用户输入命令,和内核进行沟通。  -c 参数表明指令从-c后的字符串读取。

两个重要的ROS环境变量

ROS_PACKAGE_PATH     ros包查找的路径.

ROS_WORKSPACE   工作路径  .  roscd 对应的位置.

两个环境变量都在 /opt/ros/indigo/setup.bash

/home/xuhao/ros/ros_ws/devel/setup.bash

中有定义,所以会重合,后一个覆盖前一个,然后我们又在 ~/.bashrc中自定义了ROS_WORKSPACE

而在那两个bash文件里,所用的语言我看不懂

ROS工具

rosed

rosed 是rosbash套件之一,借助它,我们可以使用名字直接编辑功能包中的文件,而 不必知道功能包的路径。

用法:

$ rosed [package_name] [filename]

默认的rosed编辑器为vim,如果需要设置为其他的默认编辑器,则需要编辑文件 ~/.bashrc,修改EDITOR环境变量,包含如下信息:

export  EDITOR='emacs -nw' 这个例子是采用emacs作为默认编辑器。

rospack在下面说到

 

catkin_make的过程

catkin_make 实际和下面的指令是等效的

$ cd ~/catkin_ws

$ cd src

$ catkin_init_workspace

$ cd ..

$ mkdir build

$ cd build

$ cmake ../src -DCMAKE_INSTALL_PREFIX=../install -DCATKIN_DEVEL_PREFIX=../devel

$ make

从指令中可以看出,catkin_make执行的时候一定是在ws文件夹,文件夹中需要有一个src子文件夹,执行完成后ws文件中出现build和devel两个新的子文件夹。

最先被编译的是在src下公用的CMakeList.txt文件

这个文件的大部分内容都是在找catkin这个包的位置。最后执行一个cmake函数catkin_workspace。这个函数在/opt/ros/kinetic/share/catkin/cmake/catkin_workspace.cmake文件中定义。这个函数对catkin_make执行时的参数进行解析,比如CATKIN_WHITELIST_PACKAGES。然后开始遍历工作空间中的文件夹,如果文件夹中有package.xml文件就将其当作一个软件包。同时对每个软件包调用add_subdirectory。add_subdirectory是一个cmake的内置函数,会调用这个文件夹内的CMakeList.txt文件。这样就开始了每个软件包的编译了。

(http://blog.csdn.net/bluewhalerobot/article/details/73658162)

生成的devel和build文件夹,devel是develop的缩写,所以就是开发环境。

 

上面是devel文件夹的内容。

其中bin内是编译的可执行文件。lib是pkg.pc文件和python的库文件。include用来放置头文件。share放置生成的pkgConfig.cmake文件。

对于build文件夹,生成是一些编译中的中间文件,比如用来存储一些环境变量之类的文件。这个文件夹意义不大。

总结一下整个编译的过程 
1. 执行catkin_make 
2. 执行catkin_workspace。解析catkin_make的参数同时遍历整个工作空间把所有的有package.xml的文件夹添加进软件包列表里面。对每个软件包执行add_subdirectory 
3. 执行每个软件包内部的CMakeList.txt文件。 
4. 执行 catkin_package。解析package.xml文件,载入对应的参数。根据依赖参数,载入对应的软件包参数。根据载入参数生成当前软件包的配置文件。

创建一个ROS的包(package) 

ROS文件系统中的两个最基本的概念:package和manifest,即包和清单文件。

Package是组织ROS代码的最基本单位,每一个Package都可以包括库文件,可执行文件,脚本及其它的一些文件。

Manifest文件是对Package的相关信息的一个描述。他提供了Package之间的依赖性,以及一个包的元信息,比如版本、维护着和许可证等信息。即每个包中的package.xml文件。

一个典型的工作空间结构如下:

 

rospack被用来获取一个包的相关信息,这里只介绍它的find选项,用法如下:

rospack find [package_name]  

roscd命令允许您利用包的名字直接切换到相应的文件目录下,当然这是对ROS文件系统而言,它的使用方法如下:

roscd [package_name]  

roscd将只能打开存在与环境变量ROS_PACKAGE_PATH中的目录及其子目录。

一个包主要由以下几部分组成:

(1)必须包括一个package.xml文件,由catkin_make的过程可知,package.xml 文件就是包的标识。

(2)必须包括一个CMakeLists.txt文件,也是catkin_make所必须。

(3)在每一个文件夹下只能有一个包,且包不允许嵌套。包就是存在于工作空 间下,由很多代码文件组成的具有一定功能的集合。

一个最简单的包类似于如下的形式: 
my_package/ 
CMakeLists.txt 
package.xml

可以使用catkin_create_pkg方便地创建一个包:

使用catkin_create_pkg命令的时候,要求你给出包的名字,及选择性的给出所创建的包依赖于哪一个包。它的使用方法如下: 
catkin_create_pkg package_name [depend1] [depend2] [depend3]

例如 catkin_create_pkg beginner_tutorials std_msgs rospy roscpp

可以创建一个名字为beginner_tutorials的包,它直接依赖于后面的三个包:

std_msgs,rospy以及roscpp。 
进入beginner_tutorials的文件夹可以看到package.xml和CMakeLists.txt。

或者用roscreate-pkg package_name [depend1] [depend2] [depend3]创建包

然后用rosmake package_name

**catkin是ROS的一个官方的编译构建系统,是原本的ROS的编译构建系统rosbuild的后**继者。

第七城市

栏目导航(关闭)