ROS2极简总结-文件系统
Posted zhangrelay
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROS2极简总结-文件系统相关的知识,希望对你有一定的参考价值。
参考文献:ROS2 Filesystem
概述
- 什么是功能包?
- 工作空间结构如何?
- 如何新建工作空间和功能包?
功能包
- 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>
/... - 安装所有需要的依赖条件
- 位置: /opt/ros/
源代码安装
-
下载源码:
-
在自定义工作空间 (如 ~/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_xmllintament_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极简总结-文件系统的主要内容,如果未能解决你的问题,请参考以下文章