ROS学习笔记(一):创建工作空间和功能包

所有的ROS程序,包括我们自己开发的程序,都被组织成功能包,而ROS的功能包被存放在称之为工作空间的目录下。因此,在我们写程序之前,第一步是创建一个工作空间以容纳我们的功能包。其实ROS工作空间就是linux下的一个目录,创建ROS工作空间就是创建一个linux目录(我们创建名为catkin_ws的工作空间,当然也可以使用其它名字),只是需要按照ROS的规范在这个目录下添加一个src的子目录,然后执行一个ROS的命令即可。

1.创建工作空间

mkdir -p ~/catkin_ws/src

虽然这时候工作空间是空的,但是我们依然可以进行编译:(一定要在工作空间的根目录下

 cd ~/catkin_ws/
 catkin_make

执行完该命令后,发现工作空间catkin_ws中有三个目录: build  devel  src
其中,src是我们创建工作空间时创建的目录,另外两个是执行完 catkin_make 后生成的。

src文件夹下自动生成了一个名称为CMakeLists.txt的文件,这个也是自动生成的,在编译过程中有如下提示:

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

build  文件夹存放编译过程中产生的中间文件

devel  文件夹存放的是编译产生的可执行文件和环境变量的设置脚本

 为了在每次打开终端的时候linux系统都能找该工作空间的相关文件,我们将在.bashrc文件中添加如下命令:

source ~/catkin_ws/devel/setup.bash

下面我们检查环境变量是否设置成功,输入以下命令

echo $ROS_PACKAGE_PATH

看到红色方框的提示信息就说明环境变量设置成功,到此,一个工作空间就建立完成了。

 2.创建功能包

创建了工作空间,接下来就可以在工作空间里创建功能包。
创建一个新ROS功能包的命令应该在你工作空间中的src目录下运行:

catkin_create_pkg <package_name> [depend1] [depend2] [depend3]

package-name指的是你功能包名称,后面跟的参数功能包的依赖。

我们创建一个名称为hello的功能包,该功能包依赖roscpp(我们源代码用c++编写,roscpp为我们提供必要的环境)

exbot@ubuntu:~/catkin_ws/src$ catkin_create_pkg hello roscpp

我们发现,该命令为我们创建了一个hello文件夹

并且文件夹下内容如下:

第一个配置文件,叫做 package.xml,称为清单文件。清单文件包含了功能包的名字,版本,维护者,依赖的其他的功能包等。如果我们后期想在功能包加更多的依赖,就需要修改这个文件。

第二个文件,叫做 CMakeLists.txt,是一个 Cmake 的脚本文件,Cmake 是一个符合工业标准的跨平台编译系统。这个文件包含了一系列的编译指令,包括应该生成哪种可执行文件,需要哪些源文件,以及在哪里可以找到所需的头文件和链接库。当然,这个文件表明 catkin 在内部使用了 Cmake。

我们可以用rospack命令验证hello的一级依赖包

,看到和我们之前设置的roscpp一致。

3.编写功能包的代码

我们在hello功能包的src文件夹下新建main.cpp文件

文件内容如下:

#include "ros/ros.h"
#include<iostream>
using namespace std;
int main(int argc, char **argv)
{
    cout<<"hello ros!"<<endl;
    return 0;


}

4.修改CMakeLists.txt文件

我们找到hello文件夹下的CMakeLists.txt文件,添加如下两行:

## Declare a cpp executable
add_executable(printf_hello src/main.cpp)

即,生成printf_hello的可执行文件,可执行文件依赖于src/main.cpp

注:cmake的语法在次不做深入讲解

5.编译工作空间

exbot@ubuntu:~/catkin_ws$ catkin_make

编译完成之后我们可以在devel文件加下找到相应的可执行文件

6.运行

启动ros核:

exbot@ubuntu:~$ roscore

在另一个终端运行hello功能包的printf_hello功能

exbot@ubuntu:~$ rosrun hello printf_hello
hello ros!

可以看到成功打印出hello ros!

REF:

https://www.cnblogs.com/huangjianxin/p/6347416.html

https://blog.csdn.net/yake827/article/details/44564057

http://www.cnblogs.com/liuamin/p/5704281.html

猜你喜欢

转载自blog.csdn.net/wwwlyj123321/article/details/83147242