【ROS2】中级:tf2-编写监听器 (C++)

目标:学习如何使用 tf2 获取帧变换。

教程级别:中级

 时间:10 分钟

 目录

  •  背景

  •  先决条件

  •  任务

    • 1.编写监听节点

    • 2.更新启动文件

    •  3.构建

    •  4.运行

  •  摘要

 背景

在之前的教程中,我们创建了一个 tf2 广播器来发布乌龟的姿态到 tf2。

在本教程中,我们将创建一个 tf2 监听器以开始使用 tf2。

 先决条件

本教程假设您已经完成了 tf2 静态广播器教程(C++)https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Static-Broadcaster-Cpp.html 和 tf2 广播器教程(C++)https://docs.ros.org/en/jazzy/Tutorials/Intermediate/Tf2/Writing-A-Tf2-Broadcaster-Cpp.html。在上一个教程中,我们创建了一个 learning_tf2_cpp 包,我们将继续在此基础上进行工作。

 任务

1. 编写监听节点

让我们首先创建源文件。转到我们在上一个教程中创建的 learning_tf2_cpp 包。在 src 目录中,通过输入以下命令下载示例监听器代码:

cxy@ubuntu2404-cxy:~/ros2_ws/src/learning_tf2_cpp/src$ wget https://raw.githubusercontent.com/ros/geometry_tutorials/ros2/turtle_tf2_cpp/src/turtle_tf2_listener.cpp

使用您喜欢的文本编辑器打开文件。

#include <chrono>  // 包含C++标准库的时间库
#include <functional>  // 包含C++标准库的函数库
#include <memory>  // 包含C++标准库的内存库
#include <string>  // 包含C++标准库的字符串库


#include "geometry_msgs/msg/transform_stamped.hpp"  // 包含geometry_msgs包的TransformStamped消息
#include "geometry_msgs/msg/twist.hpp"  // 包含geometry_msgs包的Twist消息
#include "rclcpp/rclcpp.hpp"  // 包含ROS2的rclcpp库
#include "tf2/exceptions.h"  // 包含tf2的异常处理库
#include "tf2_ros/transform_listener.h"  // 包含tf2_ros的TransformListener库
#include "tf2_ros/buffer.h"  // 包含tf2_ros的Buffer库
#include "turtlesim/srv/spawn.hpp"  // 包含turtlesim的Spawn服务


using namespace std::chrono_literals;  // 使用std::chrono_literals命名空间


class FrameListener : public rclcpp::Node  // 定义一个名为FrameListener的类,继承自rclcpp::Node
{
public:
  FrameListener()  // FrameListener类的构造函数
  : Node("turtle_tf2_frame_listener"),  // 初始化节点名为"turtle_tf2_frame_listener"
    turtle_spawning_service_ready_(false),  // 初始化乌龟生成服务的状态为未准备好
    turtle_spawned_(false)  // 初始化乌龟的生成状态为未生成
  {
    // 声明并获取`target_frame`参数
    target_frame_ = this->declare_parameter<std::string>("target_frame", "turtle1");


    tf_buffer_ =
      std::make_unique<tf2_ros::Buffer>(this->get_clock());  // 创建一个新的tf2_ros::Buffer对象
    tf_listener_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值