6.ROS2笔记-功能包

本文介绍了ROS2中的功能包机制,强调了其在代码组织和复用中的重要性。通过`ros2 pkg create`命令,演示了创建C++和Python类型功能包的步骤,并详细阐述了功能包的基本结构,包括package.xml和CMakeLists.txt(对于C++)或setup.py(对于Python)。此外,还提到了编译功能包及配置环境变量的方法。
摘要由CSDN通过智能技术生成

ROS2笔记-功能包

学习资料参考ROS2入门21讲图文教程.

每个机器人可能有很多功能,比如移动控制、视觉感知、自主导航等,如果我们把这些功能的源码都放到一起当然也是可以的,但是当我们想把其中某些功能分享给别人时,就会发现代码都混合到了一起,很难拆分出来。
我们把不同功能的代码划分到不同的功能包中,尽量降低他们之间的耦合关系,当需要在ROS社区中分享给别人的时候,只需要说明这个功能包该如何使用,别人很快就可以用起来了。
所以功能包的机制,是提高ROS中软件复用率的重要方法之一。
创建功能包

如何在ROS2中创建一个功能包呢?我们可以使用这个指令:

$ ros2 pkg create --build-type <build-type> <package_name>

ros2命令中:

  • pkg:表示功能包相关的功能;
  • create:表示创建功能包;
  • build-type:表示新创建的功能包是C++还是Python的,如果使用C++或者C,那这里就跟ament_cmake,如果使用Python,就跟ament_python;
  • package_name:新建功能包的名字。
    比如在终端中分别创建C++和Python版本的功能包:
$ cd ~/dev_ws/src
$ ros2 pkg create --build-type ament_cmake learning_pkg_c               # C++
$ ros2 pkg create --build-type ament_python learning_pkg_python # Python

编译功能包

在创建好的功能包中,我们可以继续完成代码的编写,之后需要编译和配置环境变量,才能正常运行:

$ cd ~/dev_ws/src
$ colcon build   # 编译工作空间所有功能包
$ source install/local_setup.bash

功能包的结构

功能包并不是普通的文件夹,那如何判断一个文件夹是否是功能包呢?我们来分析下刚才新创建两个功能包的结构。

C++功能包

首先看下C++类型的功能包,其中必然存在两个文件:package.xml和CMakerLists.txt。package.xml文件的主要内容如下,

$ cat 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>learning_pkg_c</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="lb@todo.todo">lb</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>

包含功能包的版权描述,和各种依赖的声明。CMakeLists.txt文件是编译规则,C++代码需要编译才能运行,所以必须要在该文件中设置如何编译,使用CMake语法。

cmake_minimum_required(VERSION 3.8)
project(learning_pkg_c)

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# find dependencies
find_package(ament_cmake REQUIRED)
# uncomment the following section in order to fill in
# further dependencies manually.
# find_package(<dependency> REQUIRED)

if(BUILD_TESTING)
  find_package(ament_lint_auto REQUIRED)
  # the following line skips the linter which checks for copyrights
  # comment the line when a copyright and license is added to all source files
  set(ament_cmake_copyright_FOUND TRUE)
  # the following line skips cpplint (only works in a git repo)
  # comment the line when this package is in a git repo and when
  # a copyright and license is added to all source files
  set(ament_cmake_cpplint_FOUND TRUE)
  ament_lint_auto_find_test_dependencies()
endif()

ament_package()

Python功能包

C++功能包需要将源码编译成可执行文件,但是Python语言是解析型的,不需要编译,所以会有一些不同,但也会有这两个文件:package.xml和setup.py。
package.xml文件的主要内容和C++版本功能包一样,包含功能包的版权描述,和各种依赖的声明。
setup.py文件里边也包含一些版权信息,除此之外,还有“entry_points”配置的程序入口,在后续编程讲解中,我们会给大家介绍如何使用。

ROS 2 (Robot Operating System)构建过程通常涉及安装依赖、下载、设置工作空间和编译节点等步骤。以下是构建ROS 2的基本流程: 1. **安装依赖**:首先确保你的系统满足ROS 2的最低要求,如Ubuntu 20.04或更高版本。然后安装必要的开发工具,比如`git`, `catkin_tools`, 和`colcon`(ROS 2的构建工具)。 ```sh sudo apt update && sudo apt install -y git curl cmake python3-venv colcon ``` 2. **创建工作空间**:在你选择的位置创建一个新的ROS 2工作空间,它是一个自含目录用于管理项目依赖和构建文件。 ```sh mkdir -p ~/my_workspace cd ~/my_workspace source /opt/ros/${ros_distro}/setup.bash colcon init ``` 3. **克隆ROS 2**:从GitHub或其他源获取你想要使用的ROS 2,替换`package_name`为你感兴趣的名。 ```sh git clone https://github.com/ros2/${package_name}.git ``` 4. **添加和构建**:将新克隆的添加到工作区,并使用`colcon build`命令进行构建。如果需要,可以同时构建所有依赖。 ```sh cd ${package_name} colcon build --symlink-install ``` 5. **测试和运行**:成功构建后,你可以通过运行`colcon test`来验证功能。要启动节点,通常会在`src`目录下找到相应的启动脚本。 6. **发布和管理**:如果你计划共享你的,可以考虑将它们推送到官方仓库或建立私有仓库。 注意:这个过程可能会因ROS 2的版本更新而有所变化,所以建议访问ROS 2的官方文档以获取最新指南。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Galaxy_Robot

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值