首页 > 其他分享 >ROS2 话题通讯

ROS2 话题通讯

时间:2023-11-20 15:37:16浏览次数:28  
标签:Node std 通讯 rclcpp 话题 message 节点 ROS2

1.发布者模板

//1.包含头文件
#include <memory> #include "rclcpp/rclcpp.hpp" #include "project_msg_data/msg/stu.hpp" using namespace std::chrono_literals; /* 需求:以某个固定频率发送文本“hello world!”,文本后缀编号,每发送一条消息,编号递增1。 步骤: 1.包含头文件; 2.初始化 ROS2 客户端; 3.定义节点类; 3-1.创建发布方; 3-2.创建定时器; 3-3.组织消息并发布。 4.调用spin函数,并传入节点对象指针; 5.释放资源。 */ // 3.定义节点类; class Publisher_Node:public rclcpp::Node { public: Publisher_Node():Node("publisher_node"),count_(0) { // 3-1.创建发布方; publisher_ = this->create_publisher<Data>("chatter", 10); // 3-2.创建定时器; timer_ = this->create_wall_timer(500ms, std::bind(&Publisher_Node::timer_callback, this)); } private: void timer_callback() { // 3-3.组织消息并发布。 auto message = Data();
    //例子 message.name = "wangrui"; message.age = count_++; message.height = 178.5;
    // RCLCPP_INFO(this->get_logger(), "'%s %d %f'", message.name.c_str(),message.age,message.height); publisher_->publish(message); } rclcpp::TimerBase::SharedPtr timer_; rclcpp::Publisher<Data>::SharedPtr publisher_; size_t count_; }; int main(int argc, char * argv[]) { //2.初始化 ROS2 客户端; rclcpp::init(argc, argv); // 4.调用spin函数,并传入节点对象指针; rclcpp::spin(std::make_shared<Publisher_Node>()); // 5.释放资源。 rclcpp::shutdown(); return 0; }

2.订阅者模板

#include <memory>
#include "rclcpp/rclcpp.hpp"
#include "Data"
/*  
    需求:订阅发布方发布的消息,并输出到终端。
    步骤:
        1.包含头文件;
        2.初始化 ROS2 客户端;
        3.定义节点类;
            3-1.创建订阅方;
            3-2.处理订阅到的消息。
        4.调用spin函数,并传入节点对象指针;
        5.释放资源。
*/
// 3.定义节点类;
class Listener_Node : public rclcpp::Node
{
public:
    Listener_Node() : Node("listener_node")
    {
        // 3-1.创建订阅方;
        subscription_ = this->create_subscription<Data>("chatter", 10, std::bind(&Listener_Node::topic_callback, this, std::placeholders::_1));
    }

private:
    // 3-2.处理订阅到的消息。
    void topic_callback(const Data::SharedPtr msg) const
    {
      RCLCPP_INFO(this->get_logger(), "the listener`s data is %s %d %f", msg->name.c_str(),msg->age, msg->height);
    }
    rclcpp::Subscription<Data>::SharedPtr subscription_;
};


int main(int argc, char * argv[])
{
    // 2.初始化 ROS2 客户端;
    rclcpp::init(argc, argv);
    // 4.调用spin函数,并传入节点对象指针;
    rclcpp::spin(std::make_shared<Listener_Node>());
    // 5.释放资源。
    rclcpp::shutdown();
    return 0;
}

3.CMakeLists.txt  (正常添加即可)

add_executable(demo src/demo.cpp)
ament_target_dependencies(
  demo
  "rclcpp"
  "std_msgs"
  "Data"
)

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

  

标签:Node,std,通讯,rclcpp,话题,message,节点,ROS2
From: https://www.cnblogs.com/ririking/p/17843987.html

相关文章

  • ROS2建立msg文件
    一:创建专门的project书写文件如下图所示,做一个msg文件夹,并建立msg文件,注意首字母一定要大写 创建上面的结构以后需要对package.xcml和CMakeLists.txt文件进行如下的修改package.xcml<build_depend>rosidl_default_generators</build_depend><exec_depend>rosidl_defa......
  • ROS2常用代码
    常用代码 1.编译文件包colconbuild//全部编译--packages-select<project_name>//选择单独编译的项目包2.创建新的工程文件包ros2apkcreate<project_name>//创建项目--build-type<ament_cmake/ament_python(c++/py......
  • Avalonia 实现跨平台的IM即时通讯、语音视频通话(源码,支持信创国产OS,统信、银河麒麟)
       在Avalonia如火如荼的现在,之前使用CPF实现的简单IM,非常有必要基于Avalonia来实现了。Avalonia在跨平台上的表现非常出色,对信创国产操作系统(像银河麒麟、统信UOS、Deepin等)也很不错。   现在,我们就来使用Avalonia实现一个跨平台的简单IM,除了文字聊天外,还可......
  • Modbus RTU转profinet网关实现智能电表和其他设备的连接与通讯
    在ModbusRTU转profinet连接多功能电表配置案例中,ModbusRTU转profinet网关需要将电表端的ModbusRTU协议转换为Profinet协议,从而实现与其他设备的连接和通信。Profinet具有高效、稳定的特点,可以实现实时的数据传输和设备控制。通过将ModbusRTU转换为Profinet,我们可以方便地将电......
  • netty tls单向认证通讯
    需求背景项目主要分为监管侧和企业侧,企业侧实时上传数据到云端,云端汇聚业务数据,上传过程需要保证传输的安全性。技术实现数据上传考虑到用HTTPS或者是TCP+TLS传输。其实使用HTTPS传输协议是比较简单的,但是项目硬件使用的4G无线网卡,而且需要实时检测设备运行状态,所以使用......
  • WorkPlus私有化部署的即时通讯软件,企业内部沟通协作的利器
    随着企业的成长和信息科技的进步,团队协作变得越来越关键。为了更好地促进团队之间的信息共享和沟通,企业内部对聊天软件的需求也在不断增加。WorkPlus是一个支持海量用户和高并发的私有化部署即时通讯能力,支持纯内网,内外网混合及政务隔离网等部署模式,为用户提供即时通讯、文件传输、......
  • 485modbus转profinet网关连接威纶通与三菱变频器modbus通讯
    485modbus转profinet网关连三菱变频器modbus通讯触摸屏监控本案例介绍了如何通过485modbus转profinet网关连接威纶通与三菱变频器进行modbus通讯。485modbus转profinet网关提供了可靠的连接方式,使用户能够轻松地将不同类型的设备连接到同一网络中。通过使用这种网关,用户可以有效地......
  • 即时通讯技术文集(第23期):IM安全相关文章(Part12) [共15篇]
    为了更好地分类阅读52im.net总计1000多篇精编文章,我将在每周三推送新的一期技术文集,本次是第23 期。[- 1 -] 理论联系实际:一套典型的IM通信协议设计详解(含安全层设计)[链接] http://www.52im.net/thread-283-1-1.html[摘要] 本文将以理论联系实际的方式,详细讲解一套典......
  • 异步通讯
    异步调用则可以避免上述问题: 我们以购买商品为例,用户支付后需要调用订单服务完成订单状态修改,调用物流服务,从仓库分配响应的库存并准备发货。在事件模式中,支付服务是事件发布者(publisher),在支付完成后只需要发布一个支付成功的事件(event),事件中带上订单id。订单服务和物流服务......
  • WorkPlus即时通讯app:10分钟快速搭建,支持局域网私有化部署!
    随着数字通讯的飞速发展,“IM+办公”模式被越来越多的政企组织所接受和采用。然而,公有云IM服务的信息安全问题时有发生,这使得一些政府部门和事业单位对此存在着爱恨交加的复杂心态。在这样的背景下,私有化IM作为一种解决方案逐渐受到关注。私有化IM可以在企业自己的服务器上部署和运......