1. Espacio de trabajo ROS
Cada proyecto ROS tiene una estructura de directorios fija e idéntica, es decir, los proyectos ROS se construyen con una estructura de directorios. Use esta carpeta con una estructura fija como espacio de trabajo. Hay cuatro subdirectorios importantes en el espacio de trabajo: build, devel, install y src. Solo src debe crearse manualmente, y los otros tres se generan automáticamente mediante el comando build. El siguiente El papel de estos cuatro subdirectorios se explicará en detalle
~/workspace/ros$ tree -L 1
.
├── build
├── devel
├── install
└── src
2. Crea un espacio de trabajo
2.1 Crear un directorio raíz del espacio de trabajo
Cree un directorio vacío como directorio raíz del espacio de trabajo, por ejemplo, mi directorio raíz es: ~/workspace/ros
$ mkdir -p ~/workspace/ros
2.2 Crear directorio fuente src
Todo el código fuente se colocará en src, ingrese el directorio raíz del espacio de trabajo
$ cd ~/workspace/ros
crear origen
$ mkdir src
2.3 Inicializar el espacio de trabajo
Ingrese al directorio src y ejecute el comando 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"
Puede aprender de la información impresa que el espacio de trabajo de inicialización es para crear un enlace suave CMakeLists.txt que apunta a ==/opt/ros/melodic/share/catkin/cmake/toplevel.cmake==, puede usar cat CMakeLists.txt para ver este archivo Contenido
$ 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 compilar
La compilación debe ejecutarse en el directorio raíz del espacio de trabajo, por lo tanto, regrese primero al directorio principal
~/workspace/ros/src$ cd ..
~/workspace/ros$ ls
src
Use el comando catkin_make para compilar, y se crearán dos directorios build y devel durante el proceso de compilación;
build: directorio de compilación, almacenando archivos temporales generados durante el proceso de compilación;
devel: espacio de desarrollo, almacenando archivos ejecutables, archivos de script y archivos de configuración generado por la espera de compilación
$ 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"
####
De la información impresa, se puede ver que es equivalente a ejecutar los siguientes dos comandos cmake y 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 instalación
Ejecutar el comando de instalación catkin_make copiará e instalará archivos ejecutables, scripts, archivos de configuración, etc. en el directorio de instalación, lo que en realidad es equivalente a ejecutarhacer instalarOrden
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
略……
Muchas personas se quejan de que el contenido de los directorios devel e install está básicamente duplicado, por lo que devel se elimina en ROS2 y solo se conserva el directorio de instalación;
Supongo que la persona que "se queja" nunca debería haber hecho un proyecto de desarrollo de software antes...
Hasta ahora, no se ha escrito una línea de código y el archivo generado es el siguiente
~/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. Crear un paquete de funciones
3.1 Formato de comando
catkin_create_pkg <package_name> [depend1] [depdend2] [……]
3.2 crear
Al crear un paquete de funciones, debe ejecutarse en el directorio src, y el archivo de código fuente del paquete de funciones se colocará en la carpeta del paquete correspondiente. El directorio src no puede colocar directamente el archivo de código fuente. Ingrese src y ejecute el comando
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.
La estructura de directorios generada automáticamente es la siguiente
:~/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 compilar
Regrese al directorio raíz del espacio de trabajo y ejecute catkin_make nuevamente
$ 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
略……
Se puede ver que al compilar de nuevo, el paquete de funciones test_pkg se compila en
3.4 Actualizar variables de entorno
Agregue la ruta del espacio de trabajo actual a la variable de entorno, tome ROS_PACKAGE_PATH como ejemplo:
antes de actualizar la variable de entorno:
$ echo $ROS_PACKAGE_PATH
/opt/ros/melodic/share
Ejecute el comando de variable de entorno de actualización:
$ source ~/workspace/ros/devel/setup.bash
Después de ejecutar la variable de entorno de actualización:
$ echo $ROS_PACKAGE_PATH
~/workspace/ros/src:/opt/ros/melodic/share
3.5 Variables de entorno relacionadas con ROS
Puede usar el comando == printenv | grep ROS== para ver las variables de entorno relacionadas con 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