【ROS】ROS1创建工作空间与功能包

1、ROS工作空间

每个ROS项目都有固定的、相同的目录结构,即ROS工程以目录结构来构建。将这种有固定结构的文件夹作为工作空间,工作空间中有四个重要的子目录:build、devel、install、src,其中只有src需要手动创建,其它三个三通过构建命令自动生成,下面会详细说明这四个子目录的作用

~/workspace/ros$ tree -L 1
.
├── build
├── devel
├── install
└── src

2、创建工作空间

2.1 创建工作空间根目录

创建一个空目录作为工作空间根目录,例如本人的根目录为:~/workspace/ros

$ mkdir -p ~/workspace/ros

2.2 创建源码目录src

所有源码都将放入src中,进入工作空间根目录

$ cd  ~/workspace/ros

创建src

$ mkdir src

2.3 初始化工作空间

进入src目录,执行命令catkin_init_workspace

$ cd src/
$ catkin_init_workspace 
Creating symlink "~/workspace/ros/src/CMakeLists.txt" pointing to "/opt/ros/melodic/share/catkin/cmake/toplevel.cmake"

可以通过打印信息了解到,初始化工作空间就是创建了一个软链接CMakeLists.txt指向==/opt/ros/melodic/share/catkin/cmake/toplevel.cmake==,可以使用cat CMakeLists.txt查看这个文件的内容

$ cat CMakeLists.txt 
# toplevel CMakeLists.txt for a catkin workspace
# catkin/cmake/toplevel.cmake

cmake_minimum_required(VERSION 3.0.2)

project(Project)

set(CATKIN_TOPLEVEL TRUE)
略……

2.4 编译

编译需要在工作空间根目录中执行,因此先返回上级目录

~/workspace/ros/src$ cd ..
~/workspace/ros$ ls
src

使用catkin_make命令编译,编译过程中会创建两个目录build和devel;
build:编译目录,存放编译过程中生成的临时文件;
devel:开发空间,存放编译最终生成的可执行文件、脚本文件、配置文件等

$ catkin_make
Base path: ~/workspace/ros
Source space:~/workspace/ros/src
Build space: ~/workspace/ros/build
Devel space:~/workspace/ros/devel
Install space:~/workspace/ros/install
####
#### Running command: "cmake~/workspace/ros/src -DCATKIN_DEVEL_PREFIX=~/workspace/ros/devel -DCMAKE_INSTALL_PREFIX=~/workspace/ros/install -G Unix Makefiles" in "~/workspace/ros/build"
####
-- The C compiler identification is GNU 7.5.0
略……
-- Configuring done
-- Generating done
-- Build files have been written to: ~/workspace/ros/build
####
#### Running command: "make -j6 -l6" in "~/workspace/ros/build"
####

从打印信息中,可以看出,等于执行如下两条命令cmake和make

cmake ~/workspace/ros/src -DCATKIN_DEVEL_PREFIX=~/workspace/ros/devel -DCMAKE_INSTALL_PREFIX=~/workspace/ros/install -G Unix Makefiles
make -j6 -l6

2.5 安装

执行catkin_make install 命令,会将可以执行文件、脚本、配置文件等拷贝、安装到install目录中,实际等于执行make install命令

catkin_make install 
Base path:~/workspace/ros
Source space:~/workspace/ros/src
Build space: ~/workspace/ros/build
Devel space: ~/workspace/ros/devel
Install space:~/workspace/ros/install
####
#### Running command: "make cmake_check_build_system" in "~/workspace/ros/build"
####
####
#### Running command: "make install -j6 -l6" in "~/workspace/ros/build"
####
Install the project...
-- Install configuration: ""
-- Installing: ~/workspace/ros/install/_setup_util.py
略……

很多人抱怨devel和install目录中的内容是基本重复的,因此在ROS2中去掉了devel,只保留了install目录;

本人猜测“抱怨”的人应该是之前没有做过软件开发项目……

至此,一行代码没敲,生成的文件如下

~/workspace/ros$ tree -L 2
.
├── build
│   ├── atomic_configure
│   ├── catkin
│   ├── catkin_generated
│   ├── CATKIN_IGNORE
│   ├── catkin_make.cache
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   ├── cmake_install.cmake
│   ├── CTestConfiguration.ini
│   ├── CTestCustom.cmake
│   ├── CTestTestfile.cmake
│   ├── gtest
│   ├── install_manifest.txt
│   ├── Makefile
│   └── test_results
├── devel
│   ├── cmake.lock
│   ├── env.sh
│   ├── lib
│   ├── local_setup.bash
│   ├── local_setup.sh
│   ├── local_setup.zsh
│   ├── setup.bash
│   ├── setup.sh
│   ├── _setup_util.py
│   └── setup.zsh
├── install
│   ├── env.sh
│   ├── local_setup.bash
│   ├── local_setup.sh
│   ├── local_setup.zsh
│   ├── setup.bash
│   ├── setup.sh
│   ├── _setup_util.py
│   └── setup.zsh
└── src
    └── CMakeLists.txt -> /opt/ros/melodic/share/catkin/cmake/toplevel.cmake

11 directories, 27 files

3、创建功能包

3.1 命令格式

catkin_create_pkg   <package_name>   [depend1] [depdend2] [……]

3.2 创建

创建功能包时,需要在src目录下执行,并且功能包的源码文件会放入对应的包文件夹下,src目录不能直接放源码文件
进入src,执行命令catkin_create_pkg

$ cd ~/workspace/ros/src
$ catkin_create_pkg test_pkg std_msgs rospy roscpp
Created file test_pkg/CMakeLists.txt
Created file test_pkg/package.xml
Created folder test_pkg/include/test_pkg
Created folder test_pkg/src
Successfully created files in ~/workspace/ros/src/test_pkg. Please adjust the values in package.xml.

自动生成的目录结构如下

:~/workspace/ros/src$ tree
.
├── CMakeLists.txt -> /opt/ros/melodic/share/catkin/cmake/toplevel.cmake
└── test_pkg
    ├── CMakeLists.txt
    ├── include
    │   └── test_pkg
    ├── package.xml
    └── src

4 directories, 3 files

3.3 编译

返回工作空间根目录,再次执行catkin_make

$ cd ..
$ catkin_make
略……
-- BUILD_SHARED_LIBS is on
-- BUILD_SHARED_LIBS is on
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- ~~  traversing 1 packages in topological order:
-- ~~  - test_pkg
-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-- +++ processing catkin package: 'test_pkg'
-- ==> add_subdirectory(test_pkg)
-- Configuring done
-- Generating done
略……

可以看出再次编译时,将功能包test_pkg编译进入了

3.4 更新环境变量

将当前工作空间的路径加入环境变量中,以ROS_PACKAGE_PATH为例:
没有更新环境变量之前:

$ echo $ROS_PACKAGE_PATH
/opt/ros/melodic/share

执行更新环境变量命令:

$ source ~/workspace/ros/devel/setup.bash 

执行更新环境变量之后:

$ echo $ROS_PACKAGE_PATH
~/workspace/ros/src:/opt/ros/melodic/share

3.5 ROS相关的环境变量

可以使用命令== printenv | grep ROS==查看ROS相关的环境变量

$ printenv | grep ROS
ROS_ETC_DIR=/opt/ros/melodic/etc/ros
ROS_ROOT=/opt/ros/melodic/share/ros
ROS_MASTER_URI=http://localhost:11311
ROS_VERSION=1
ROS_PYTHON_VERSION=2
ROS_PACKAGE_PATH=/opt/ros/melodic/share
ROSLISP_PACKAGE_DIRECTORIES=
ROS_DISTRO=melodic

猜你喜欢

转载自blog.csdn.net/u010168781/article/details/130377938