ROS 2
教程:使用 pixi
开发 ROS 2 包#
在本教程中,我们将向您展示如何使用 pixi
开发一个 ROS 2 包。
教程将按顺序执行,缺少步骤可能会导致错误。
本教程的目标读者是已经熟悉 ROS 2 并希望尝试 pixi
开发工作流的开发者。
前提条件#
- 您需要安装
pixi
。如果尚未安装,可以按照安装指南中的说明进行操作。 本教程的核心目的是向您展示,您只需要pixi
即可完成开发! - 在 Windows 上,建议启用开发者模式。请进入设置 -> 更新与安全 -> 开发者选项 -> 开发者模式。
如果您是 pixi
的新手,可以先查看 基本使用指南。
该指南会在 3 分钟内向您介绍如何创建一个 pixi
项目。
创建一个 pixi 项目#
执行后,应该会创建如下的目录结构:
pixi.toml
文件是您的项目的清单文件,内容应该类似于:
[project]
name = "my_ros2_project"
version = "0.1.0"
description = "Add a short description here"
authors = ["User Name <user.name@email.url>"]
channels = ["robostack-staging", "conda-forge"]
# Your project can support multiple platforms, the current platform will be automatically added.
platforms = ["linux-64"]
[tasks]
[dependencies]
在 init
命令中添加的 channels
是软件包的仓库,您可以通过我们的网站 prefix.dev 搜索这些仓库中的包。
platforms
定义了您希望支持的操作系统,pixi
可以支持多个平台,但需要您定义这些平台,以便 pixi
检查您的依赖项是否支持这些平台。
其余字段可以根据需要填写。
添加 ROS 2 依赖项#
使用 pixi
开发项目时,您不需要在系统上安装任何依赖项,所有需要的依赖项都应该通过 pixi
添加,这样其他用户就可以无障碍地使用您的项目。
首先,我们以 turtlesim
示例开始:
这将会把 ros-humble-desktop
和 ros-humble-turtlesim
包添加到您的清单文件中。
根据您的网络速度,这可能需要一会儿,因为 pixi
还将 ROS 安装到您的项目文件夹(.pixi
)中。
现在,运行 turtlesim
示例:
或者 使用 shell
命令在终端中启动一个已激活的环境。
恭喜您,您已经在机器上通过 pixi
成功运行了 ROS 2!
更多与小乌龟的互动
要控制小乌龟,您可以在新的终端窗口中运行以下命令:
现在,您可以使用键盘上的箭头键控制小乌龟的运动。添加自定义 Python 节点#
由于 ROS 使用自定义节点,我们将向您的项目中添加一个自定义节点。
pixi run ros2 pkg create --build-type ament_python --destination-directory src --node-name my_node my_package
为了构建包,我们还需要一些额外的依赖项:
将创建的 ROS 工作区初始化脚本添加到您的清单文件中。
然后运行构建命令:
这将创建一个可源化的脚本,位于 install
文件夹中,您可以通过激活脚本使用您的自定义节点。
通常,这是您会添加到 .bashrc
中的脚本,但在这里,您可以通过向 pixi.toml
文件添加以下内容来告诉 pixi
使用它:
多平台支持
您可以为不同的平台添加多个激活脚本,这样一个项目就可以支持多个平台。 使用以下示例,您可以支持 Linux 和 Windows,并使用 target 语法进行配置:
现在,您可以使用以下命令运行您的自定义节点:
简化用户体验#
在 pixi
中,我们有一个名为 tasks
的功能,允许您在清单文件中定义任务,并通过简单的命令来运行它。
让我们添加一个任务来运行 turtlesim
示例和自定义节点。
pixi task add sim "ros2 run turtlesim turtlesim_node"
pixi task add build "colcon build --symlink-install"
pixi task add hello "ros2 run my_package my_node"
现在,您只需运行以下命令即可执行这些任务:
高级任务使用
任务是 pixi
中的强大功能。
- 您可以向任务中添加
depends-on
来创建任务链。 - 您可以向任务中添加
cwd
来在与项目根目录不同的目录中运行任务。 - 您可以向任务中添加
inputs
和outputs
来创建一个仅在输入更改时才运行的任务。 - 您还可以使用
target
语法在特定的机器上运行特定的任务。
[tasks]
sim = "ros2 run turtlesim turtlesim_node"
build = {cmd = "colcon build --symlink-install", inputs = ["src"]}
hello = { cmd = "ros2 run my_package my_node", depends-on = ["build"] }
构建 C++ 节点#
要构建 C++ 节点,您需要将 ament_cmake
和一些其他构建依赖项添加到清单文件中。
现在,您可以使用以下命令创建一个 C++ 节点:
pixi run ros2 pkg create --build-type ament_cmake --destination-directory src --node-name my_cpp_node my_cpp_package
然后,您可以使用以下命令再次构建并运行它:
# 传递参数给构建命令,以便使用 Ninja 构建,将这些参数添加到清单文件中以便默认使用 ninja。
pixi run build --cmake-args -G Ninja
pixi run ros2 run my_cpp_package my_cpp_node
结论#
在本教程中,我们向您展示了如何使用 pixi
创建一个 Python 和 CMake 的 ROS 2 项目。
我们还向您展示了如何使用 pixi
向项目中 添加依赖项,并如何使用 pixi run
运行项目。
通过这种方式,您可以确保您的项目在所有安装了 pixi
的机器上都是 可重复构建 的。
展示您的作品!#
完成您的项目了吗? 我们很想看看您做了什么! 通过社交媒体使用标签 #pixi 并标记我们 @prefix_dev,分享您的作品。 让我们一起激励社区!
常见问题#
rosdep
怎么办?#
目前,我们不支持在 pixi
环境中使用 rosdep
,因此您需要使用 pixi add
来添加包。
rosdep
会调用 conda install
,而这在 pixi
环境中是不可用的。