首页 > 编程语言 >ros2中Qos的C++配置方法

ros2中Qos的C++配置方法

时间:2024-03-14 15:48:46浏览次数:25  
标签:Qos RMW DDS rclcpp C++ dds debug qos ros2

1. dds_debug.hpp

#ifndef DDS_DEBUG__DDS_DEBUG_HPP_
#define DDS_DEBUG__DDS_DEBUG_HPP_

#include <rclcpp/rclcpp.hpp>
#include <rclcpp/qos.hpp>
#include <rmw/types.h>
#include <sensor_msgs/msg/imu.hpp>

const rmw_qos_profile_t my_custom_qos_profile = 
{
    RMW_QOS_POLICY_HISTORY_KEEP_LAST,
    10,
    RMW_QOS_POLICY_RELIABILITY_RELIABLE,
    RMW_QOS_POLICY_DURABILITY_VOLATILE,
    RMW_DURATION_INFINITE,
    RMW_DURATION_INFINITE,
    RMW_QOS_POLICY_LIVELINESS_AUTOMATIC,
    RMW_DURATION_INFINITE,
    false
};

class DDS_debug : public rclcpp::Node
{
public:
    explicit DDS_debug();
    ~DDS_debug();

protected:
    void on_timer();

private:
    unsigned int cnt;
    rclcpp::Publisher<sensor_msgs::msg::Imu>::SharedPtr imu_pub_;
    rclcpp::TimerBase::SharedPtr timer_;
};

#endif

 2. dds_debug.cpp

#include "dds_debug/dds_debug.hpp"

DDS_debug::DDS_debug() 
    : Node("dds_debug")
    , cnt(0)
{
    auto qos = rclcpp::QoS(rclcpp::QoSInitialization::from_rmw(my_custom_qos_profile), my_custom_qos_profile);

    imu_pub_ = create_publisher<sensor_msgs::msg::Imu>("/sensing/imu/tamagawa/imu_raw", qos);
    
    constexpr double period_s = 0.1;
    constexpr std::chrono::nanoseconds period_ns = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::duration<double>(period_s));
    timer_ = rclcpp::create_timer(this, get_clock(), period_ns, std::bind(&DDS_debug::on_timer, this));
}

DDS_debug::~DDS_debug() {}

void DDS_debug::on_timer() {
    cnt++;
    if (cnt <= 50) {
        sensor_msgs::msg::Imu imu_msg;
        imu_pub_->publish(imu_msg);
    }
}

 3. dds_debug_node.cpp

#include "dds_debug/dds_debug.hpp"

int main(int argc, char** argv) {  
  rclcpp::init(argc, argv);
  rclcpp::spin(std::make_shared<DDS_debug>());
  rclcpp::shutdown();

  return 0;
}

 

标签:Qos,RMW,DDS,rclcpp,C++,dds,debug,qos,ros2
From: https://www.cnblogs.com/rzy-up/p/18072983

相关文章

  • 2024-03 STEMA 考试C++ 中级真题解析
    2024-03-10STEMA考试C++中级真题解析一、选择题(50分)1、    (110010)2+(c3)16的结果是(B )。A.(240)10        B.(11110101)2        C.(366)8        D.(f6)16备注:此题目下标代表进制,因不支持md格式。  2、   表达式1000/3的结果是(......
  • C++——智能指针
    本章代码Gitee仓库:智能指针文章目录1.为什么要有智能指针2.RAII机制3.智能指针原理4.auto_ptr(c++98)5.unique_ptr(c++11)6.shared_ptr(c++11)6.1shared_ptr线程安全问题6.2shared_ptr循环引用6.3定制删除器7.weak_ptr(c++11)8.C/C++动态内存1.......
  • ACM算法竞赛入门——C++基础语法(匠心之作,2.5万字总结,0基础教学,纯干货)建议收藏!!!
    xcx:主流语言这么多,为什么acm算法竞赛要用C++呢?shy:C++在竞赛中实现算法和数据结构时具有更高的执行效率,对于一些需要处理大量数据和复杂算法的竞赛题目来说,C++能够提供更快的执行速度和更低的资源消耗,这对于算法竞赛中的性能要求至关重要。hwjw:除此之外,C++还有什么其他的......
  • C++超详细知识点(四):类的继承和派生
    目录标题:类的继承和派生1.公有继承2.保护继承3.私有继承4.问题:基类的私有成员在派生类中不可访问,那么怎么才能访问其父类(基类)的私有成员呢?(1)使用公有/保护成员函数。(2)使用友元函数或友元类。标题:类的继承和派生  类的继承和派生是一种机制,允许你创建一个新的......
  • C++windows编码问题
    需要注意的编码方式有三处:操作系统、程序编码(与源文件编码一致)、通信对方传入字符的编码程序编码(与源文件编码一致)操作系统编码对方传入的编码中文是否okc2A0编码的空格utf-8utf-8utf-8okokutf-8gbkgbk正常中文可以,特殊空......
  • Lua 如何在Lua中调用C/C++函数
    Lua调用C函数有两种方式程序主体在C中运行,C函数注册到Lua中。C调用Lua,Lua调用C注册的函数,C或者Lua得到函数的执行结果。程序主体在Lua中运行,C函数作为库函数供Lua使用。C++的代码如下如何在Lua脚本中调用这个C语言函数(add_function)?#include<QCoreApplication>#inclu......
  • C++工程(五):CMake+NDK交叉编译
    写一个HelloWorld#include<iostream>intmain(intargc,charconst*argv[]){for(inti=0;i<5;++i)std::cout<<"HelloWorld"<<std::endl;return0;}build_for_android.sh脚本文件#/bin/bashexportANDROID......
  • 【C++】继承
    目录一、继承的概念和定义1.1、继承的概念1.2、定义方式1.3、继承关系和访问限定符二、基类和派生类对象的赋值转换三、继承中的作用域四、派生类的默认成员函数问题:子类编译默认生成的构造函数会做什么?4.1、构造函数4.2、析构函数4.3、拷贝构造4.4、赋值运算符......
  • C++:[NWRRC2015] Concatenation(洛谷)P7050
    题目描述FamousprogrammerGennadylikestocreatenewwords.Onewaytodoitistoconcatenateexistingwords.Thatmeanswritingonewordafteranother.Forexample,ifhehaswords cat and dog,hewouldgetaword catdog,thatcouldmeansomething......
  • 详解c++多态中的析构与构造函数
    首先简单介绍一下多态。多态是面向对象编程中的概念,它允许我们使用基类类型的指针或引用来调用派生类对象的方法。C++中实现多态主要依靠虚函数和动态绑定。那怎么使用多态呢?基类指针或引用指向派生类对象。在我学习过程中,这些概念耳熟能详,但是为什么要有多态呢,先看下面这......