从零搭建ros间的通信,各功能包、节点之间的通信

news2025/1/10 10:18:41

新建消息类型

catkin_create_pkg car_interfaces roscpp rospy std_msgs message_generation message_runtime

书写自定义的msg:
比如我写一个GlobalPathPlanningInterface.msg:

float64  timestamp  #时间戳
float32[]  startpoint   #起点位置,先经后纬
float32[]   endpoint    #终点位置,先经后纬
float32[]   routedata   #路径集合(所有途径点的集合)
float32  process_time    # 进程处理时间

接着再处理编译文件CMakeLists.txt:

add_message_files(
  FILES
  GlobalPathPlanningInterface.msg
  # Message2.msg
)


generate_messages(
  DEPENDENCIES
  std_msgs  
)


catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES car_interfaces
  CATKIN_DEPENDS message_generation message_runtime roscpp rospy std_msgs
#  DEPENDS system_lib
)

修改package.xml文件:
添加上:

  <build_depend>message_runtime</build_depend>
  <exec_depend>message_generation</exec_depend>

这样就定义好了。
rosmsg show msg包/msg类型
请添加图片描述

新建一个功能包

catkin_create_pkg planning roscpp rospy std_msgs
catkin_make # 编译一次即可
接着就能直接新建py写了,比cpp简单太多了。

global_path_planning.py文件:

#!/usr/bin/env python3
#coding=utf-8

import rospy
from car_interfaces.msg import GlobalPathPlanningInterface


if __name__ == "__main__":
    rospy.init_node("chao_node")  # 节点名称
    rospy.logwarn("我的枪去而复返")

    pub = rospy.Publisher("global_path_planning_data", GlobalPathPlanningInterface, queue_size = 10) # 话题名称

    rate = rospy.Rate(10)

    while not rospy.is_shutdown():
        rospy.loginfo("我要开始刷屏了")  #发一次显示一个,不是实际的消息,只是一个info
        msg = GlobalPathPlanningInterface()
        msg.timestamp = 2.7
        msg.startoint = [1.0, 2.0, 3.0]
        msg.endpoint = []
        msg.routedata = []
        msg.process_time = 3.1
        
        pub.publish(msg)
        rate.sleep()

注意
(这样的话其实也可以直接再创建的时候添加,就不用改这两个文件了)

catkin_create_pkg self_start roscpp rospy std_msgs car_interfaces

如果没有动car_interfaces,那就添加就好了
修改CMakeLists.txt:
find_package:
增加car_interfaces

修改package.xml:
<build_depend>car_interfaces</build_depend>
<exec_depend>car_interfaces</exec_depend>
测试效果还可以
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/752075.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【技能实训】DMS数据挖掘项目-Day01

文章目录 任务1 项目准备一、开发环境二、系统简介三、项目创建 任务2【任务2.1】菜单项设计及其测试【任务2.2】使用数组存储采集的数据【任务2.3】控制显示采集的数据 任务1 项目准备 一、开发环境 1.JDK8下载及其环境变量配置(JDK8以上版本) 2.IDE &#xff1a;Eclipse 或…

马可·坎图 (Marco Cantú) 荣获尼克劳斯·沃斯奖 (Niklaus Wirth Award) Pascal最具价值贡献者奖

我们非常高兴地宣布&#xff0c;我们自己的Marco Cant荣获由西班牙萨拉曼卡大学主办的国际Pascal大会颁发的Niklaus Wirth奖。 评审团的引文最后这样一句话&#xff1a;“ Marco Cant 是Pascal社区最杰出、最原创、最杰出的人物之一”。我不认为我们自己可以说得更好。 国际Pa…

rabbitmq使用笔记

前言 mq的优点&#xff1a;异步提速、解耦、流量削峰 mq的缺点&#xff1a; mq宕机可能导致消息丢失、消费者未成功消费如果保证整个系统架构的事务安全、消息可能被重复消费出现幂等问题、消息未被消费到引发死信问题、消息出现消费延迟或消费异常引发的顺序消费错乱问题...…

Linux 修改网卡 MAC 地址

使用 iproute2 修改网卡 MAC 地址 1. 使用如下命令查看当前所有网卡及其 MAC 地址&#xff1b; sudo ip link show2. 如笔者这里想要修改网卡 ens224 的 MAC 地址&#xff0c;先使用如下命令关闭该网卡&#xff1b; sudo ip link set dev ens224 down3. 设置该网卡的 MAC 地…

阿里云:机器学习平台及OpenSearch

机器学习流程 相关项目 BladeDISC-AI编译优化 EasyRec-推荐算法库 EasyCV-视觉图像算法库 EasyNLP-NLP/多模态算法库 模型开发中算法团队面临的工程挑战 Develop platform OpenSearch 向量检索库

亚马逊云科技迁移只需5个简单步骤(2023年迁移到云)

您是否正在考虑亚马逊云科技迁移&#xff0c;并将本地项目迁移到云中&#xff1f; 但是不知道从哪里开始以及如何去做&#xff1f; 在这篇文章中&#xff0c;我将指导您完成亚马逊云科技迁移。 什么是亚马逊云科技&#xff1f; 亚马逊云科技或亚马逊网络服务是最受欢迎的云平…

jar程序部署的外部依赖和按名传参和shellUtil传参json串及返回pid问题

文章目录 指定jar程序运行的外部依赖指定参数名称传参给程序shellUtil命令传参JSON串shellUtil获取回调nohub启动程序后的pid 指定jar程序运行的外部依赖 nohup java -Djava.ext.dirs./lib/ -cp DataSourceAccessPage.jar com.sitech.adapter.JsonAdapter arg0 arg1java -cp 命…

10_SPI_Flash 连续写实验

10_SPI_Flash 连续写实验 1. 实验目标2. 连续写方法3. 操作时序4. 流程框图4.1 顶层模块4.2 连续写模块 5. 波形图6. RTL6.1 flash_seq_wr_ctrl6.2 spi_flash_seq_wr 7. Testbench 1. 实验目标 使用页写指令&#xff0c;将串口发送过来的连续不定量数据写入 Flash。本实验中&a…

Linux开发环境的搭建

文章目录 系统安装工具软件安装Xshell远程登录VScode远程登录Linux 下GCC安装 系统安装 &#xff08;虚拟机安装、云服务器&#xff09;Ubuntu18.04 网络类型&#xff1a;桥接模式网络、NAT&#xff08;network access transation)网络地址转换模式、仅主机模式 注意&#xff…

模拟电压与数字脉冲占空比控制的应用与发展前景

摘要&#xff1a;本文将讨论模拟电压控制和数字脉冲占空比控制在嵌入式控制方面的应用场景、共同点和不同点&#xff0c;并探讨它们在未来发展中的前景。 引言&#xff1a; 模拟电压控制和数字脉冲占空比控制都是嵌入式系统中常用的控制方式。模拟电压控制将电压作为控制信号&…

electron 应用优雅的配置 about 信息

使用 electron 的 dialog tray 托盘栏菜单优雅简单的配置 about 关于本应用的信息&#xff0c;效果下图所示。 项目依赖 {"electron": "^24.4.1","electron-builder": "^23.6.0","electron-builder-squirrel-windows": &q…

线程那些事

线程锁 线程锁&#xff08;Thread Lock&#xff09;&#xff0c;也被称为互斥锁&#xff08;Mutex Lock&#xff09;&#xff0c;是一种用于多线程编程中的同步机制。它用于保护共享资源在多个线程之间的访问&#xff0c;以避免出现竞态条件&#xff08;Race Condition&#x…

企业内容建站系统 ModStartCMS v6.8.0 内容页面自定义模板,内容区块功能增强

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议&#xff0c;免费且不限制商业使用。 功能特性 丰富的模块市…

【状态估计】一维粒子滤波研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

虚函数表的地址

结论 1. c多态的实现是靠虚函数表来实现的&#xff0c;有虚函数的类有虚函数表&#xff0c;没虚函数的类就没有虚函数表 2. 虚函数表是类的所有对象共用&#xff0c;切记是共同所有&#xff0c;不是一个对象所有 3. 每个虚函数成员占据虚函数表的一行&#xff0c;是个指针&a…

机械设计制造及其自动化专业向PLC方向发展的可行性

是的&#xff0c;机械设计制造及其自动化专业往PLC&#xff08;可编程逻辑控制器&#xff09;方向发展是可行的。PLC是一种用于控制和自动化各种机械设备和工业过程的计算机控制系统。它被广泛应用于工业自动化领域&#xff0c;包括制造业、能源行业、交通运输等。 我这里刚好…

001- database - 数据库

1、新的数据库进入默认有四个数据库&#xff0c;一般不要轻易删除&#xff1b; -- 创建数据库 CREATE DATABASE 数据库名 -- 查询所有数据库 SHOW DATABASES -- 使用数据库 -- USE 数据库名 -- 查询当前使用的数据库 SELECT DATABASE() -- 删除数据库 DROP DATABASE 数据库名

Rdkit|分子3D构象生成与优化

github; 地址 文章目录 Rdkit|分子3D构象生成与优化构象生成算法概述基于距离&#xff08;distance-based&#xff09;代码示例 距离几何算法生成3D结构距离几何ETKDG生成3D构象距离几何ETKDG生成多构象将Conformer类转为Mol类手动对齐 距离几何ETKDGMMFF生成3D构象距离几何ETK…

Sevlet规范:HttpServlet类 和 HttpServletRequest接口 源码解析

1. HTTP协议解读 什么是协议&#xff1f; 协议实际上是某些人&#xff0c;或者某些组织提前制定好的一套规范&#xff0c;大家都按照这个规范来&#xff0c;这样可以做到沟通无障碍。 协议就是一套规范&#xff0c;就是一套标准。由其他人或其他组织来负责制定的。 我说的话你…

PyCharm 自动添加作者信息、创建时间等信息

PyCharm 自动添加作者信息、创建时间等信息‘ 第一步 找到settings 第二步&#xff0c;找到下图所示位置输入下面代码&#xff0c;作者改成你自己的缩写&#xff0c;你也可以添加其他的 Project &#xff1a;${PROJECT_NAME} File &#xff1a;${NAME}.py IDE &…