ROS学习笔记1-1安装过程的几点理解
安装部分
在安装后,有一个步骤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的后**继者。