ROS工作空间搭建和功能包创建与编译

一、创建工作空间

工作空间(workspace)是一个存放工程开发相关文件的文件夹。

src:代码空间(Source Space)。放置功能包源码的代码空间。

build:编译空间(Build Space)。放置在编译过程当中产生的一些功能文件。

devel:开发空间(Development Space)。放置的是编译完成之后的可执行文件,环境变量配置的一些脚本。

install:安装空间(Install Space)。与devel类似,在ros2里面将其合成了一个文件夹。

1.创建工作空间

创建一个名字为ros_lidar的工作空间,在其文件夹内创建src文件夹放置功能包源码:

mkdir -p ~/ros_lidar/src

之后进入src文件夹下面,将其初始化为ROS工作空间:

cd ~/ros_lidar/src

catkin_init_workspace

 之后的话会看到一个简单的日志回复。然后在这个src文件夹下面会有一个CmakeLists文件。这个文件会告诉系统,这个文件是一个ROS的工作空间。

2.编译工作空间

编译操作需要在工作空间的根目录下执行,所以我们需要cd到工作空间的根目录下面对其进行编译

cd ..

catkin_make

 ROS工作空间搭建和功能包创建与编译_第1张图片

如果没有报错的话,就说明安装成功了。之后在我们的src目录下面就会生成两个文件夹build和devel。build文件里面是编译过程当中产生的中间文件;devel里面是编译过程当中产生的一些可执行文件和一些环境变量设置的脚本。

ROS工作空间搭建和功能包创建与编译_第2张图片

3.设置环境变量

因为我们需要让Linux系统知道我们功能包的位置,所以我们要设置环境变量,告诉系统功能包在哪里。这些路径的设置都是通过环境变量设置的。我们可以通过命令source来对其进行设置。

source devel/setup.bash

但是上述命令只是在当前终端里面会生效,如果我们新打开一个终端的话,这个环境变量依然会找不到。如果我们需要系统每次新打开一个终端都能找到相应的路径的话,我们需要将上述命令放入到终端的配置文件里面去。命令如下: 

gedit ~/.bashrc

这时会打开一个文本界面,我们需要在末尾添加以下命令:

source ~/ros_lidar/devel/setup.bash

ROS工作空间搭建和功能包创建与编译_第3张图片 

 然后点击右上角保存,最后退出。使用以下命令使其在当前终端中生效:

source ~/.bashrc

我们接下来检查环境变量是否存在。

4.检查环境变量

我们新打开一个终端,输入以下命令检查环境变量:

echo $ROS_PACKAGE_PATH

 

可以看到其生成了三个路径,第一个是我们刚刚创建的功能包的路径,第二个是我自己以前创建的功能包,这个你们可以忽略,最后一个是ROS安装完成之后默认的一个工作空间路径。

我们接下来就可以在我们创建的工作空间下做具体的工作。

二、创建功能包

 一个功能包就是我们实现机器人一个具体功能的单元。我们在功能包里面能够去创建具体的代码。创建功能包的命令格式如下所示:

catkin_create_pkg [功能包名] [依赖包] [依赖包] [依赖包]

创建功能包需要在src下。

 ROS工作空间搭建和功能包创建与编译_第4张图片

上述命令的意思就是创建一个名字叫做learning_communication的功能包,依赖三个功能包,一个叫做std_msgs:是ROS给我们定义好的一些标准的数据结构。rospy是ROS给我们提供的一系列的python接口。roscpp是ROS给我们提供的c++的编程接口。

ROS工作空间搭建和功能包创建与编译_第5张图片 

 进入我们刚刚创建的功能包里面,我们可以看到一些文件。在src里面是我们功能包里面一些具体的代码。incluude里面放置的是一些头文件。最重要的是CMakeList.txt和package.xml文件。这两个文件是所有功能包都必须具备的文件。CMakeList.txt里面是我们编译这个功能包的编译选项。package.xml放置的是描述这个功能包的一些具体信息。像名字,版本号等一些具体信息,还有这个功能包会具体依赖哪些功能包。

三、编译功能包

我们首先需要退出到工作空间目录里面,然后对其进行编译:

cd ..

catkin_make

 ROS工作空间搭建和功能包创建与编译_第6张图片

这里还有要注意的一点是:在同一个工作空间下,不允许存在同名功能包的。不同工作空间下,允许存在同名功能包的。

既然存在同名的功能包,那么我们的ROS将会以什么样的顺序去查找呢?

我们首先查看一下ROS的环境变量,env是查看系统整个的环境变量,我们通过grep就能够查看只与ros有关的环境变量。

env | grep ros

 ROS工作空间搭建和功能包创建与编译_第7张图片

其中的:

ROS_PACKAGE_PATH=/home/chen/ros_lidar/src:/home/chen/catkin_ws/src:/opt/ros/kinetic/share

就是我们功能包会去查找的路径。当我们运行某个功能包的时候,我们会从上述这个路径依次向后查找。新设置的路径在ROS_PACKAGE_PATH中的最前端。

你可能感兴趣的:(ROS,人工智能,Ubuntu,Linux)