当前位置: 首页 > article >正文

ROS2 中的工作空间和功能包

在 ROS2 中,工作空间和功能包(packages)是组织和管理代码的基本单元。以下是如何创建和管理 ROS2 工作空间和功能包的详细步骤。

一、 创建 ROS2 工作空间

一个 ROS2 工作空间是一组功能包的集合,可以通过以下步骤创建和管理:

1. 创建工作空间目录

首先,创建一个工作空间的根目录,并在其中创建 src 目录以存放功能包:

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
2. 初始化工作空间

使用 colcon 工具初始化工作空间。colcon 是 ROS 2 推荐的构建工具:

colcon build

二、创建 ROS2 功能包

功能包是 ROS2 中用于组织和管理代码的基本单元。以下是创建一个新的 ROS2 功能包的步骤:

1. 进入 src 目录

确保你在工作空间的 src 目录中:

cd ~/ros2_ws/src
2. 使用 ros2 pkg create 命令创建功能包

例如,创建一个名为 my_package 的功能包,依赖于 rclcppstd_msgs

ros2 pkg create --build-type ament_cmake --node-name my_node --dependencies rclcpp std_msgs my_package

这将创建一个基本的功能包结构,包含以下文件和目录:

my_package/
├── CMakeLists.txt
├── package.xml
├── src/
│   └── my_node.cpp
└── include/
    └── my_package/

三、编写功能包代码

src 目录中的 my_node.cpp 文件中编写你的节点代码。例如,一个简单的发布者节点:

#include <rclcpp/rclcpp.hpp>
#include <std_msgs/msg/string.hpp>

class MyNode : public rclcpp::Node
{
public:
    MyNode() : Node("my_node")
    {
        publisher_ = this->create_publisher<std_msgs::msg::String>("topic", 10);
        timer_ = this->create_wall_timer(
            std::chrono::seconds(1),
            std::bind(&MyNode::timer_callback, this));
    }

private:
    void timer_callback()
    {
        auto message = std_msgs::msg::String();
        message.data = "Hello, world!";
        publisher_->publish(message);
    }

    rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_;
    rclcpp::TimerBase::SharedPtr timer_;
};

int main(int argc, char *argv[])
{
    rclcpp::init(argc, argv);
    rclcpp::spin(std::make_shared<MyNode>());
    rclcpp::shutdown();
    return 0;
}

四、配置 CMakeLists.txt

CMakeLists.txt 中添加构建和安装指令:

cmake_minimum_required(VERSION 3.5)
project(my_package)

find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)

add_executable(my_node src/my_node.cpp)

ament_target_dependencies(my_node
  rclcpp
  std_msgs
)

install(TARGETS
  my_node
  DESTINATION lib/${PROJECT_NAME})

ament_package()

五、配置 package.xml

package.xml 中添加依赖项:

<package format="2">
  <name>my_package</name>
  <version>0.0.0</version>
  <description>My first ROS 2 package</description>
  <maintainer email="user@example.com">Your Name</maintainer>
  <license>Apache-2.0</license>

  <buildtool_depend>ament_cmake</buildtool_depend>

  <build_depend>rclcpp</build_depend>
  <build_depend>std_msgs</build_depend>

  <exec_depend>rclcpp</exec_depend>
  <exec_depend>std_msgs</exec_depend>

  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

六、构建和运行

构建功能包

返回工作空间根目录并构建功能包:

cd ~/ros2_ws
colcon build
运行节点

在构建成功后,使用以下命令运行节点:

source install/setup.bash
ros2 run my_package my_node

总结

以上步骤详细介绍了如何在 ROS2 中创建和管理工作空间和功能包。通过这些步骤,你可以组织和管理你的 ROS2 项目,并编写和运行自定义的 ROS2 节点。如果你有任何问题或需要进一步的帮助,请参考 ROS2 官方文档 或向社区寻求帮助。


http://www.kler.cn/a/468213.html

相关文章:

  • qml PathView详解
  • 计算机网络 (28)虚拟专用网VPN
  • 鸿蒙HarmonyOS开发:基于Swiper组件和自定义指示器实现多图片进度条轮播功能
  • node.js内置模块之---http 和 https 模块
  • 【数据结构05】排序
  • 【python因果库实战15】因果生存分析4
  • Spring Cloud Gateway-自定义异常处理
  • 配置QoS
  • 发现API安全风险,F5随时随地保障应用和API安全
  • 【电机控制】低通滤波器及系数配置
  • 【微服务】1、引入;注册中心;OpenFeign
  • 数据中台与数据治理服务方案[50页PPT]
  • 【数据结构-堆】力扣2530. 执行 K 次操作后的最大分数
  • Ungoogled Chromium127 编译指南 MacOS 篇(二)- 项目要求
  • 查找项目的classes目录路径要使用“classpath:“类路径前缀
  • [最新] SIM卡取出后还能找到我的iPhone吗?
  • 单片机-串转并-74HC595芯片
  • Git 新手无忧:常用命令与错误解决攻略
  • C++ 设计模式:解析器模式(Interpreter Pattern)
  • 基于STM32环境温湿度监测系统设计(附项目代码zip)
  • 以往博客的复习补充——part1
  • vim 的基础使用
  • 基于服务器部署的综合视频安防系统的智慧快消开源了。
  • Unity Canvas中显示粒子特效
  • 【网络协议】开放式最短路径优先协议OSPF详解(四)
  • 【踩坑指南2.0 2025最新】Scala中如何在命令行传入参数以运行主函数