ROS2(三)使用colcon编译package

官方指导文档为:

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_toolsament_tools;colcon支持多种构建方式,推荐的构建方式是ament_cmakeament_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()

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值