官方指导文档为:
https://docs.ros.org/en/humble/Tutorials/Beginner-Client-Libraries/Colcon-Tutorial.html
1. 安装colcon
在安装ros2时,如果按照官方指导操作应该是已经安装了colcon,可以使用命令colcon -h,测试是否已经有colcon,如果没有安装,则执行以下命令进行安装:
sudo apt install python3-colcon-common-extensions
colcon是一个ROS构建的集成工具,包括:catkin_make\catkin_make_isolated\catkin_tools和ament_tools;colcon支持多种构建方式,推荐的构建方式是ament_cmake和ament_python,也支持纯cmake包;
2. 创建工作空间
ROS的工作空间是有固定的结构的。一般情况在/home目录下创建工作空间文件夹,例如:ros2_ws,则ros2_ws就是工作空间根目录。
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
工作空间目录下一定要有一个src文件夹,里面放置ROS package的源代码。
3. 编译工作空间
在工作空间根目录下进行编译,使用如下命令:
colcon build
只创建一个空的src文件夹,也可以构建,会自动生成其他文件夹:
├── build
├── install
├── log
└── src
4.设置环境变量
当colcon编译成功后,会自动生成对应install文件夹,其中包含setup.sh文件,在使用编译的库或者程序前,都需要将其路径加入到环境变量中,在install文件夹下运行如下命令。
source setup.bash
这样就可以把编译的库添加到系统环境中。
如果不需要编译某个package时,只需要在其对应的文件夹下创建一个名称为COLCON_IGNORE的空文件,则该文件则不会被编译。
5.package.xml
下面是默认的package.xml内容:
<?xml version="1.0"?>
<?xml-model
href="http://download.ros.org/schema/package_format3.xsd"
schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>my_package</name>
<version>0.0.0</version>
<description>TODO: Package description</description>
<maintainer email="user@todo.todo">user</maintainer>
<license>TODO: License declaration</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
name:包的名称
version:包的版本
description:包的描述
maintainer:填写email和拥有者
5.1.增加依赖项
可以在<buildtool_depend>ament_cmake</buildtool_depend>下面增加依赖项;
例如:
<depend>rclcpp</depend>
<depend>std_msgs</depend>
表示包的构建和运行需要rclcpp和std_msgs。
6.CMakeLists.txt
与package对应的,在CMakeLists.txt中增加:
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
增加可执行文件说明,例如需要编译的可执行文件为talker,则在CMakeLists.txt中增加:
add_executable(talker src/publisher_member_function.cpp)
ament_target_dependencies(talker rclcpp std_msgs)
再再CMakeLists.txt中增加install(TARGETS...)操作,以便ros2 run可以发现并执行目标软件,增加如:
install(TARGETS
talker
DESTINATION lib/${PROJECT_NAME})
则实例的CMakeLists.txt为:
cmake_minimum_required(VERSION 3.5)
project(cpp_pubsub)
# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 14)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
add_executable(talker src/publisher_member_function.cpp)
ament_target_dependencies(talker rclcpp std_msgs)
install(TARGETS
talker
DESTINATION lib/${PROJECT_NAME})
ament_package()