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

【自动驾驶】话题通信

目录

  • 构建发布者
  • 构建订阅者
  • 编写lanch文件自动启动节点
  • 测试运行
  • ROS的目录结构

切换到工作空间的src目录下:

构建发布者

catkin_create_pkg publisher std_msgs rospy roscpp

编写发布者程序:

// 1.包含头文件 
#include "ros/ros.h"
#include "std_msgs/String.h" //普通文本类型的消息
#include <sstream>int main(int argc, char  *argv[])
{   //设置编码setlocale(LC_ALL,"");//2.初始化 ROS 节点:命名(唯一)// 参数1和参数2 后期为节点传值会使用// 参数3 是节点名称,是一个标识符,需要保证运行后,在 ROS 网络拓扑中唯一ros::init(argc,argv,"talker");//3.实例化 ROS 句柄ros::NodeHandle nh;//该类封装了 ROS 中的一些常用功能//4.实例化 发布者 对象//泛型: 发布的消息类型//参数1: 要发布到的话题//参数2: 队列中最大保存的消息数,超出此阀值时,先进的先销毁(时间早的先销毁)ros::Publisher pub = nh.advertise<std_msgs::String>("test",10);//5.组织被发布的数据,并编写逻辑发布数据//数据(动态组织)std_msgs::String msg;std::string msg_front = "这里是发布者发来的信息"; //消息前缀int count = 0; //消息计数器//发布消息前睡眠0.5秒,确保消息发布成功ros::Duration(0.5).sleep();//这里是每秒通过一次,剩余时间则阻塞在下面的r.sleepros::Rate r(1);//节点不死while (ros::ok()){//使用 stringstream 拼接字符串与编号std::stringstream ss;ss << msg_front << count;msg.data = ss.str();//发布消息pub.publish(msg);//加入调试,打印发送的消息ROS_INFO("发送的消息:%s",msg.data.c_str());//根据前面制定的发送贫频率自动休眠 休眠时间 = 1/频率;r.sleep();count++;//循环结束前,让 count 自增//暂无应用ros::spinOnce();}return 0;
}

在cmakelist中把:

add_executable(${PROJECT_NAME}_node src/publisher.cpp)
target_link_libraries(${PROJECT_NAME}_node${catkin_LIBRARIES}
)

注释去掉

构建订阅者

同样先创建包:

catkin_create_pkg subscriber std_msgs rospy roscpp

然后构建订阅者节点:

// 1.包含头文件 
#include "ros/ros.h"
#include "std_msgs/String.h"
//这里创建了回调函数,接收信息后传递的是std_msgs::String类型的常指针
void doMsg(const std_msgs::String::ConstPtr& msg_p){ROS_INFO("作为订阅者,我接收到了:%s",msg_p->data.c_str());}
int main(int argc, char  *argv[])
{setlocale(LC_ALL,"");//2.初始化 ROS 节点:命名(唯一)ros::init(argc,argv,"listener");//3.实例化 ROS 句柄ros::NodeHandle nh;//4.实例化 订阅者 对象ros::Subscriber sub = nh.subscribe<std_msgs::String>("test",10,doMsg);//5.处理订阅的消息(回调函数)ros::spin();//循环读取接收的数据,并调用回调函数处理return 0;
}

对于cmakelist的操作相同,添加构造对象及对象所需的依赖:

add_executable(${PROJECT_NAME}_node src/subscriber.cpp)
target_link_libraries(${PROJECT_NAME}_node${catkin_LIBRARIES}
)

然后退回到工作空间所在的下层目录,进行catkin_make编译。

编写lanch文件自动启动节点

在功能包目录下新建launch目录,下面放launch文件。形如:

<launch><!-- screen表示输出到屏幕上 --><node pkg="publisher" type="publisher_node" name="talker" output="screen" />
</launch>

其中:
pkg=“包名”

节点所属的包

type=“nodeType”

节点类型(与之相同名称的可执行文件)

name=“nodeName”

节点名称(在 ROS 网络拓扑中节点的名称)

测试运行

激活工作空间环境变量:

source ./devel/setup.bash

启动:

rosluanch publisher start.launch
rosluanch subscriber start.launch

在这里插入图片描述

ROS的目录结构

在这里插入图片描述

相关文章:

【自动驾驶】话题通信

目录 构建发布者构建订阅者编写lanch文件自动启动节点测试运行ROS的目录结构 切换到工作空间的src目录下&#xff1a; 构建发布者 catkin_create_pkg publisher std_msgs rospy roscpp编写发布者程序&#xff1a; // 1.包含头文件 #include "ros/ros.h" #include &…...

【Linux】中的软件安装:深入探索RPM、SRPM与YUM

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Linux的起源与发展 2、RPM、SRPM与YUM的简要介…...

uniapp自定义请求头信息header

添加请求头&#xff1a;uniapp自定义请求头信息header&#xff0c;如下&#xff1a;添加tenant-id参数 代码...

SpringBoot整合Liquibase

1、是什么&#xff1f; Liquibase官网 Liquibase是一个开源的数据库管理工具&#xff0c;可以帮助开发人员管理和跟踪数据库变更。它可以与各种关系型数据库和NoSQL数据库一起使用&#xff0c;并提供多种数据库任务自动化功能&#xff0c;例如数据库迁移、版本控制和监控。Li…...

虚幻5|给武器添加碰撞检测与伤害

本章内容衔接上两章&#xff0c;需要完成上两章才能用本章内容 虚幻5|角色武器装备的数据库学习&#xff08;不只是用来装备武器&#xff0c;甚至是角色切换也很可能用到&#xff09;-CSDN博客虚幻5|普通攻击&#xff0c;使用接口更方便-CSDN博客 如有疑问&#xff0c;可访问…...

RESTful API设计指南:构建高效、可扩展的Web服务

目录 引言 一.RESTful API概述 二.设计原则 2.1. 资源导向 2.2. 使用标准的HTTP方法 2.3. 无状态通信 2.4. 可缓存响应 2.5. 分层系统 2.6. 按需加载代码&#xff08;可选&#xff09; 2.7. HATEOAS 三.最佳实践 3.1. 明确资源和子资源 3.2. 使用合适的HTTP状态码 …...

黑马头条vue2.0项目实战(九)——编辑用户资料

目录 1. 创建组件并配置路由 2. 页面布局 3. 展示用户信息 4. 修改昵称 5. 修改性别 6. 修改生日 7. 修改头像 7.1 图片上传预览 7.2 使用纯客户端的方式处理用户头像上传预览 7.3 头像裁切 7.4 纯客户端的图片裁切上传流程 7.5 Cropper.js 图片裁剪器的基本使用 …...

43.【C语言】指针(重难点)(F)

目录 15.二级指针 *定义 *演示 16.三级以及多级指针 *三级指针的定义 *多级指针的定义 17.指针数组 *定义 *代码 18.指针数组模拟二维数组 往期推荐 15.二级指针 *定义 之前讲的指针全是一级指针 int a 1; int *pa &a;//一级指针 如果写成 int a 1; int *pa &a…...

【STM32+HAL】杆球控制系统

一、前言 2017年电赛出了道板球控制系统题目&#xff0c;现写一个简化版本——杆球控制系统&#xff0c;以此记录电赛集训生活。 二、题目分析 最终采取的方案是&#xff1a;OpenMV读取小球的当前位置&#xff0c;并将坐标值传给STM32端&#xff0c;再由32通过电机改变杆的位置…...

用Python实现9大回归算法详解——04. 多项式回归算法

多项式回归 是线性回归的一种扩展&#xff0c;它通过将输入特征的多项式项&#xff08;如平方、立方等&#xff09;引入模型中&#xff0c;以捕捉数据中非线性的关系。虽然多项式回归属于线性模型的范畴&#xff0c;但它通过增加特征的多项式形式&#xff0c;使得模型能够拟合非…...

vue打包更新packge.json版本号

VUE项目打包自动更新版本号 此方法只针对 Vue 如果使用其他框架&#xff0c;可以此参照作为参考 一、先看效果 二、创建 buildVersion.js 文件 文件内容 目前只针对3位版本号 递增规则是 每次更新 加一次小版本&#xff0c;10次小版本向前递增一个版本。如&#xff1a;1.0.9 递…...

计算机视觉技术解析:从基础到前沿

第一部分&#xff1a;计算机视觉基础与基本原理 计算机视觉是人工智能领域的一个重要分支&#xff0c;旨在使计算机能够理解和处理图像和视频数据。随着深度学习技术的飞速发展&#xff0c;计算机视觉已经在许多实际应用场景中取得了显著的成果&#xff0c;如图像识别、目标检…...

unity游戏开发003:深入理解Unity中的坐标系

Unity游戏开发 “好读书&#xff0c;不求甚解&#xff1b;每有会意&#xff0c;便欣然忘食。” 本文目录&#xff1a; Unity游戏开发 Unity游戏开发深入理解Unity中的坐标系前言1. 坐标轴2. 左手坐标系3. 世界坐标系 vs. 局部坐标系4. 坐标变换5. 注意事项 总结 深入理解Unity中…...

伊索寓言两则

马和驴 马为自己精美的马具感到骄傲&#xff0c;在大马路上遇见了驴子子正驮着重担挪着步子&#xff0c;挡了路&#xff0c;马儿没法过去&#xff0c;就不耐烦叫道&#xff1a;真想踢你两脚&#xff0c;好让你走快点。驴子沉默不语&#xff0c;但没忘马儿的傲慢。不久后马儿患…...

嵌入式硬件产品开发:编码文件规则

目录 简介 文件内容的一般规则 文件名命名的规则 简介 一个工程是往往由多个文件组成。 这些文件怎么管理、怎么命名都是非常重要的。 文件内容的一般规则 【规则1】每个头文件和源文件的头部必须包含文件头部说明和修改记录。 源文件和头文件的头部说明必须包含的内容和次…...

设计模式 - 组合模式

💝💝💝首先,欢迎各位来到我的博客!本文深入理解设计模式原理、应用技巧、强调实战操作,提供代码示例和解决方案,适合有一定编程基础并希望提升设计能力的开发者,帮助读者快速掌握并灵活运用设计模式。 💝💝💝如有需要请大家订阅我的专栏【设计模式】哟!我会定…...

打靶记录11——Billu_b0x

靶机&#xff1a; https://download.vulnhub.com/billu/Billu_b0x.zip难度&#xff1a; 中&#xff08;两种攻击路线&#xff09; 目标&#xff1a; 取得root权限 涉及的攻击方法&#xff1a; 主机发现端口扫描Web信息收集SQL注入&#xff08;Sqlmap跑不出来&#xff09;…...

一、在cubemx上配置sd和fatfs示例演示

一、sd和fatfs的配置流程界面 1、选择sd4bits 根据自己的sd卡的硬件插槽进行选择。 2、fatfs配置由于使用的是sd卡所以直接选择sd选项 3、程序中对sd卡的初始化需要进行改动&#xff0c;直接使用默认的参数sd卡是挂载不上的。 4、在sd卡挂载好后&#xff0c;就可以使用文件系统…...

C++ 语言特性02 - 命名空间

一&#xff1a;概述 现代C中的命名空间是什么&#xff1f; C中的命名空间允许用户在命名空间范围内对类、方法、变量和函数等实体进行分组&#xff0c;而不是在全局范围内使用。这可以防止大型项目中的类、方法、函数和变量之间发生命名冲突。命名空间将开发人员编写的代码组织…...

drools规则引擎 规则配置文件drl语法使用案例

前提&#xff1a;环境搭建&#xff0c;参考博文springboot整合drools规则引擎 示例入门-CSDN博客案例1&#xff0c;商城系统消费赠送积分 100元以下, 不加分 100元-500元 加100分 500元-1000元 加500分 1000元 以上 加1000分订单pojo编写 package cn.beijing.model;import lom…...

如何用League-Toolkit提升30%游戏决策效率?完整指南

如何用League-Toolkit提升30%游戏决策效率&#xff1f;完整指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 价值定位&#xf…...

dll修复工具绿色版免安装,2026年最新版实测与风险提示

正急着用电脑&#xff0c;突然弹窗“缺少dll文件”&#xff0c;游戏或软件打不开。第一反应就是赶紧找个工具修好它&#xff0c;但又不想在电脑上装一堆乱七八糟的软件&#xff0c;就想找个绿色版、免安装的&#xff0c;用完就能删&#xff0c;不留痕迹。但网上这种小工具满天飞…...

老旧设备AI赋能:开源方案实现群晖NAS人脸识别功能升级

老旧设备AI赋能&#xff1a;开源方案实现群晖NAS人脸识别功能升级 【免费下载链接】Synology_Photos_Face_Patch Synology Photos Facial Recognition Patch 项目地址: https://gitcode.com/gh_mirrors/sy/Synology_Photos_Face_Patch 在数字化时代&#xff0c;NAS设备已…...

告别Vue组件匿名时代:用vite-plugin-vue-setup-extend给你的<script setup>加个名字

为Vue组件正名&#xff1a;vite-plugin-vue-setup-extend深度整合指南 在Vue 3的组合式API开发中&#xff0c;<script setup>语法糖以其简洁性赢得了开发者的青睐。但当你打开Vue DevTools准备调试时&#xff0c;满屏的"Anonymous Component"是否曾让你感到困扰…...

Clipy:macOS效率工具中的自动化剪贴板增强专家

Clipy&#xff1a;macOS效率工具中的自动化剪贴板增强专家 【免费下载链接】Clipy Clipboard extension app for macOS. 项目地址: https://gitcode.com/gh_mirrors/cl/Clipy 你是否曾遇到这样的窘境&#xff1a;刚复制的重要文本被新内容覆盖&#xff0c;不得不重新打开…...

Piping Server开发者指南:如何基于流传输构建自己的应用

Piping Server开发者指南&#xff1a;如何基于流传输构建自己的应用 【免费下载链接】piping-server Infinitely transfer between every device over pure HTTP with pipes or browsers 项目地址: https://gitcode.com/gh_mirrors/pi/piping-server Piping Server是一个…...

小白也能玩转AI绘画:LiuJuan20260223Zimage快速上手指南

小白也能玩转AI绘画&#xff1a;LiuJuan20260223Zimage快速上手指南 你是不是也刷到过那些用AI生成的、细节超棒的人像图片&#xff0c;心里痒痒的&#xff0c;但又觉得那些工具太复杂&#xff0c;光是安装部署就劝退了&#xff1f;别担心&#xff0c;今天要介绍的这个工具&am…...

告别散斑噪声困扰:用PyTorch手把手实现DenoDet的频域去噪模块(附完整代码)

频域魔法&#xff1a;用PyTorch实现SAR图像去噪的工程实践 当你在处理SAR图像时&#xff0c;是否曾被那些恼人的散斑噪声困扰&#xff1f;这些像胡椒粒一样随机分布的噪声点不仅影响视觉效果&#xff0c;更会严重干扰目标检测的准确性。传统方法试图在空间域直接对抗噪声&#…...

【进阶指南】VSCode + Clang-Format:从零定制你的专属代码风格(130+配置项实战解析)

1. 为什么需要定制代码风格&#xff1f; 当你第一次接触代码格式化工具时&#xff0c;可能会觉得默认配置已经足够好用。但当你参与过几个团队项目后&#xff0c;就会发现统一的代码风格有多重要。我曾经接手过一个遗留项目&#xff0c;里面混杂着五种不同的缩进风格——有用制…...

UG/NX Block UI Styler字符串控件避坑指南:常见问题与解决方案

UG/NX Block UI Styler字符串控件避坑指南&#xff1a;常见问题与解决方案 在UG/NX二次开发中&#xff0c;Block UI Styler作为可视化对话框设计工具&#xff0c;其字符串控件&#xff08;String Control&#xff09;是使用频率最高的交互元素之一。无论是参数输入、状态显示还…...