参考文献:ROS2 Filesystem


概述

  1. 什么是功能包?
  2. 工作空间结构如何?
  3. 如何新建工作空间和功能包?

功能包

  • ROS2 软件称为功能包。
  • ROS2 中最小的构建部件。
  • 专用于一种功能,例如 :
    • 硬件驱动
    • 算法
    • 可视化工具
    • 库 ...
  • 包可以分组到综合包(例如 navigation2)
    • 引用一个或多个相关包
    • 只包含执行依赖
    • 有利于发布和版本控制

功能包安装选项

Debian Package

功能包

Source Repositories

源代码

Automatic installation

自动安装

"Latest" code

“最新”代码

Stable versions

稳定版本

Manual compilation

手动编译

Prebuilt binaries

预建二进制文件

Allows code adjustments

允许代码调整

功能包安装

Debian:

$ sudo apt install ros-<distro>-package-name

实例:$ sudo apt install ros-foxy-nav2-core

! package_name: nav2_core --> install:ros-foxy-nav2-core

  • 自动安装

    • 位置: /opt/ros/<distro>/...
    • 安装所有需要的依赖条件

源代码安装

  • 下载源码:

    • 在自定义工作空间 (如 ~/devel_ws/src):
      $ git clone github_link

    • 实例: $ git clone https://github.com/ros/ros_tutorials.git -b foxy-devel

  • 安装此功能包所有的依赖

    $ rosdep install --from-paths src --ignore-src --rosdistro foxy -y

    • rosdep :必备,实例如下
    • 管理多个版本控制的功能包: vcstool

      • 版本控制系统 (version control system,VCS) 工具
      • 一个命令行工具,可以更轻松地处理多个存储库。例如:工作空间(如 ~/devel_ws):

$ wget https://raw.githubusercontent.com/ROBOTIS-GIT/turtlebot3/foxy-devel/turtlebot3.repos

$ vcs import src < turtlebot3.repos

功能包内容-文件夹结构

Python功能包

$ ros2 pkg create --build-type ament_python --dependencies [deps] --node-name my_node my_package

文件:

  • setup.cfg:setuptools 可执行文件放在 lib 中
  • setup.py:setuptools 的安装脚本

CMake功能包

$ ros2 pkg create --build-type ament_cmake --dependencies [deps] --node-name my_node my_package

package.xml

  • 功能包的元信息
  • 列出包的依赖项

依赖关系

  • 依赖项可以是其他 ROS 包和系统库(例如 Boost)
  • 依赖项:
    • <buildtool_depend>:编译工具需要
    • <exec_depend>:执行时需要(例如 Python 脚本)
    • <build_depend>:编译所需(例如 rclcpp、ament_cmake)
    • <test_depend> :运行单元测试所需
    • <build_export_depend> : 如果导出的头文件依赖于其他头文件
    • <depend> :多合一(<build_depend>、<build_export_depend> 和 <exec_depend>)

setup.py

实例 (turtlebot_teleop package): 路径: ~/devel_src/src/turtlebot/turtlebot_teleop

setup(...entry_points={'console_scripts': ['teleop_keyboard = turtlebot3_teleop.script.teleop_keyboard:main'],},)

安装teleop_keyboard的可执行文件到devel_ws/install/turtlebot3_teleop/lib/ turtlebot3_teleop/。

CMakeLists.txt

定义编译规则。 例如:

  • 声明可执行文件的编译
  • 如何解析头文件和库引用

主要是 CMake,加上特定于 ament 的内容。

CMakeLists.txt案例:

Colcon-通用型编译工具

  • 编译系统:在单个包上运行
  • 编译工具:对一组包进行操作

使用案例:

  • # 避免每次调整 python 脚本时都需要重新编译

    • $ colcon build --symlink-install
  • # 编译指定功能包
    • $ colcon build --packages-up-to <name-of-pkg>

具体参考colcon官方帮助文档。

Lint 工具

Lint 工具:静态检查 Python 或 C++ 源代码的错误和标准合规性。

对于Python功能包

  • package.xml

    • <test_depend>ament_copyright</test_depend>
    • <test_depend>ament_flake8</test_depend>
    • <test_depend>ament_pep257</test_depend>

对于CMake功能包

  • package.xml

    • <test_depend>ament_lint_auto</test_depend>
    • <test_depend>ament_lint_common</test_depend>

ament_lint_auto: ament_cmake_copyright, ament_cmake_cppcheck,ament_cmake_flake8, ament_cmake_lint_cmake, ament_cmake_pep257, ament_xmllint
ament_lint_common: ament_clang_format, ament_clang_tidy, ament_cmake_clang_format, ament_cmake_clang_tidy

工作空间

  • 包含具有特定结构的 ROS 2 包的目录
  • 结构

Colcon 在编译 src/ 时候创建 build/ install/ log/

用于开发

  • 源代码空间(src/):

    • 包含功能包的源版本
  • 编译空间(build/):
    • 调用 CMake 并生成工件的位置

准备安装

  • 安装空间(install/):

    • 准备发布的独立包
  • 包结构类似于 /opt/ros/<distro>

环境设置文件

  • 工作空间初始化时生成的安装文件:setup.bash、setup.zsh ...
  • 在使用 ROS 2 之前获取 ROS 2 安装工作空间
    • $ source /opt/ros/<distro>/setup.bash
  • 获取自定义的工作空间: $ source <ws-path>/install/setup.bash

---> ROS可以找到并使用ROS环境内的任何资源

编译工作空间示例:

  • 进入工作空间目录:$ cd ~/devel_ws
  • 初始化 ROS 2 安装工作空间 $ source /opt/ros/foxy/setup.bash
  • 安装 rosdep 包的所有依赖项:下载并安装 ROS 包所需的依赖项。
    • 第一次,需要运行:
    • $ sudo rosdep init
    • $ rosdep update
  • 安装功能包的所有依赖项
    • 然后可以使用:
    • $ rosdep install --from-paths src --ignore-src --rosdistro foxy -y
  • 编译工作空间
    • $ colcon build --symlink-install
  • 在工作空间中编译 colcon 后,导入 ROS 环境:
    • $ source <ws-path>/install/setup.bash(包括 /opt/ros/<distro>/setup.bash)

ROS2极简总结-文件系统相关推荐

  1. ROS2极简总结-Nav2-行为树

    ROS2极简总结专题,其实主要是概念的讲解为主,不涉及程序等,之前没有更新完成,此时继续.参考文献: Navigation using ROS 2  Navigation 导航首先需要目标,然后计算出 ...

  2. ROS2极简总结-新增概念

    参考文献:ROS2 EXTENDED CONCEPTS 在前2篇博文中总结了ROS2的基本概念,这些内容大致与ROS1类似或改进,属于ROS2/ROS1的核心概念.本节侧重ROS2扩展的新内容. 既然 ...

  3. ROS2极简总结-SLAM

    参考文献:Navigation using ROS 2 Mapping SLAM - Simultaneous Localization And Mapping 同步定位和建图 机器人仿真或实际运动环 ...

  4. ROS2极简总结-坐标变换-TF

    参考: TF2 - TRANSFORMS IN ROS2 ROS机器人TF基础(坐标相关概念和实践) TF2 - 概述 TF2 是 TF (TransForm) 库的第二代. 事实上,ROS1 中的 ...

  5. ROS2极简总结-Nav2-地图和自适应蒙特卡洛定位

    导航通常需要地图和自定位,一个是全局感,一个是自我认知. Map AMCL Map 地图服务器 Map Server 地图服务器 nav2_map_server map_server:加载地图,在&q ...

  6. ROS2极简总结-Nav2-概述(中)控制器

    上一节,主要介绍导航功能包Nav2的规划部分,本节为控制部分: 控制器概述  Controller 注意黄色部分,具体看下图. 插件 Plugins 控制器 过程检查 目标检查 控制器服务器 Cont ...

  7. Docker极简入门

    原 Docker极简入门 2018年05月22日 20:25:12 阅读数:44 一.Docker概述 Docker通过一个包括应用程序运行时所需的一切的可执行镜像启动容器,包括配置有代码.运行时.库 ...

  8. 第3章 Kotlin语言基础 《Kotlin 极简教程》

    2019独角兽企业重金招聘Python工程师标准>>> 第3章 Kotlin语言基础 掌握基础,持续练习 学习任何东西,都是一个由表及里的过程.学习一门编程语言也一样.对于一门编程语 ...

  9. 基于Linux内核的纯手工极简系统研究

    原文地址:http://shajunxing.tpddns.cn:8888/web/blog/2018-04-06-基于Linux内核的纯手工极简系统研究/index.html 问提由来 Linux操 ...

最新文章

  1. [LUOGU] P2330 [SCOI2005]繁忙的都市
  2. MFC鼠标OnMouseHover使用
  3. ASP.NET MVC5使用AjaxHelp
  4. 今天没白过之《ls命令的颜色》
  5. 战争学院服务器不稳定,英雄联盟服务器突然崩溃坑玩家!战争学院玩家全被强制下线...
  6. [Leetcode] Pascal's Triangle II
  7. 怎样锁定计算机桌面图标,win10系统锁定桌面图标的详细技巧
  8. 计算机b类核心期刊有哪些,B类期刊推荐有哪些
  9. 基于android的酒店客房预订客户端app
  10. 最好的年终奖,是你拥有随时跳槽的能力
  11. 算法的衡量:时间复杂度和空间复杂度
  12. 流程图软件lauto_流程图软件(Iauto)
  13. 药剂学(专)-形考作业(一)答案
  14. 考研英语二计算机词汇,考研英语词汇84分的一些经验
  15. 浅析Kubelet如何上报状态
  16. SpringBoot中使用Redis保存对象或集合
  17. uva10534 hdu2198 双向LIS问题
  18. 我是佛前的一粒佛珠(请听配乐)
  19. 计算机组成原理(计算机硬件)
  20. echarts地图自定义,上海市崇明区陆地地图

热门文章

  1. 01.基于Irises的springboot项目框架(简版)
  2. 搜索引擎涉及的数据结构
  3. 3、Maven核心程序解压与配置
  4. Tensorflow2.0 利用LSTM和爬虫做自动生成七言律诗
  5. matlab mcl,wsn定位蒙特卡洛方法mcl的matlab
  6. Java使用MongoTemplate操作MangoDB,实现根据时间等条件组合查询,解决ISODate的问题
  7. Android模仿youtube的拖拽视频效果
  8. Win10大更新后(悦米)机械键盘无法使用
  9. 怎么计算机求和错误的,《表格计算求和错误怎么办》 为什么EXCEL公式求和会有错误...
  10. 【3D视觉创新应用竞赛作品系列​】基于嵌入式的室内静态场景实时重建系统