hello_world_in_ROS2

hello_world_in_ROS2

Porcovsky Lv3

基本操作

  1. 创建工作空间

    1
    2
    3
    mkdir -p helloworld/src #创建目录
    cd helloworld
    colcon build --package-select filename
  2. 创建功能包

    1
    2
    3
    4
    5
    6
    7
    cd src
    ros2 pkg create pkg01_helloworld_cpp(功能包名)...
    --build-type ament_cmake... #创建类型,如果是python就是ament_python
    --dependencies rclcpp... #(添加依赖)
    --node-name helloworld (可执行文件名)

    ros2 pkg create pkg01_helloworld_cpp--build-type ament_cmake --dependencies rclcpp --node-name helloworld

    node名最好与工作空间名一致

  3. 写源文件

  4. 配置文件后编译

    pakage.xml 主要看 rclcpp

    image-20250207094112087

    编译就还是回到主工作空间里面:

    1
    colcon build
  5. 运行代码

创建工作空间
1
2
source install/setup.bash
ros2 run pkg_01_helloworld_cpp(功能包名) helloworld(可执行文件名)

2. ROS2中的初始化和资源释放

在 C++ 中,需要进行初始化和资源释放的过程主要有以下几个原因:

1. 资源管理

C++ 是一种手动管理资源的编程语言,这意味着程序员需要显式地分配和释放内存和其他资源。初始化和资源释放是确保资源正确管理的重要步骤,防止内存泄漏和资源枯竭。

  • 初始化:在程序开始时初始化资源,如内存、文件句柄、网络连接等。
  • 资源释放:在程序结束或不再需要资源时释放这些资源,确保系统资源可以被其他程序使用。

2. 防止资源泄漏

资源泄漏是指程序运行过程中分配的资源没有正确释放,导致资源无法被重新利用,最终可能耗尽系统资源。通过适当地初始化和释放资源,可以有效防止资源泄漏。

3. 确保程序稳定和高效运行

正确的资源管理可以确保程序稳定和高效地运行,减少崩溃和性能下降的风险。例如,在 ROS 2 中,初始化和关闭过程确保了节点之间的通信正常进行和正确终止。

4. ROS 2 特定原因

在 ROS 2 中,初始化和资源释放尤其重要,因为它涉及到多个节点之间的通信和协调。具体原因包括:

  • 初始化rclcpp::init(argc, argv); 初始化 ROS 2 客户端库,确保所有相关组件正确设置,以便节点可以正常工作。这包括设置上下文、解析参数等。
  • 资源释放rclcpp::shutdown(); 关闭 ROS 2 客户端库,确保所有资源正确释放,所有节点之间的通信正常终止。这对于避免资源泄漏和确保程序正确退出至关重要。

示例代码

以下是 ROS 2 节点示例代码的详细解释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
cpp复制代码
#include "rclcpp/rclcpp.hpp"int main(int argc, char **argv)
{
// 初始化 ROS 2 客户端
rclcpp::init(argc, argv);

// 创建节点指针
auto node = std::make_shared<rclcpp::Node>("helloworld_node_cpp");

// 输出日志
RCLCPP_INFO(node->get_logger(), "Hello, world!");

// 释放资源
rclcpp::shutdown();

return 0;
}

解释

  1. **rclcpp::init(argc, argv);**:初始化 ROS 2 客户端库,设置上下文环境,解析命令行参数,确保节点可以正常运行。
  2. **auto node = std::make_shared<rclcpp::Node>("helloworld_node_cpp");**:创建一个 ROS 2 节点,节点名称为 helloworld_node_cpp
  3. **RCLCPP_INFO(node->get_logger(), "Hello, world!");**:使用日志记录器输出一条信息。
  4. **rclcpp::shutdown();**:关闭 ROS 2 客户端库,释放所有资源,确保程序正常终止。

通过这些步骤,可以确保 ROS 2 节点在初始化后正常工作,并在结束时正确释放资源。

  • 标题: hello_world_in_ROS2
  • 作者: Porcovsky
  • 创建于 : 2024-09-07 09:40:03
  • 更新于 : 2025-06-12 11:11:19
  • 链接: https://pocro.github.io/2024/09/07/ROS2/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论