<microros> 如何自定义uROS2数据类型

如何自定义数据类型

在microros中,我们可以看到,官方给我们提供了很多数据类型。
在这里插入图片描述
如果我们在实际使用的时候,这些类型无法满足我们的传输要求怎么办呢?

官方也提供了自定义数据类型的办法。

参考:

https://github.com/micro-ROS/micro_ros_msgs

在这个库中给我们定义了三种demo 类型
在这里插入图片描述
我们也可以参考官方提供的interface增加我们的自定义数据类型

https://github.com/ros2/common_interfaces.git

假设我要增加这么一个结构体在传感器目录:

typedef struct sensor_msgs__msg__CustomerTestType
{
  bool test_bool;
  uint8_t test_uint8_array[32];
  uint16_t test_uint16;
  uint32_t test_uint32;
  float test_float32;
  double test_float64;
} sensor_msgs__msg__CustomerTestType;

通过以下两个步骤就可以实现:

step 1.创建CustomerTestType.msg

在这里插入图片描述

  • 注意两点:
    1. .msg 文件名必须满足驼峰式命名结构,不可以使用_*、等特殊符号
    2. 定义在.msg文件内的基础类型参考std_msg的base type

step 2.将CustomerTestType.msg加入CMAKE中编译
在这里插入图片描述
step 3: 将自定义msg加入rosidl_generate_interfaces生成数据结构

  1. cmake 中引用rosidl_generate_interfaces函数
    在这里插入图片描述
  2. package中加入到生成队列中
    在这里插入图片描述
    上面方法,我们直接将自定义的数据类型放在官方的sensor_msgs下面,只要实现step1/2就可以。

最后运行ros2编译

ros2 run micro_ros_setup build_firmware.sh $(pwd)/my_custom_toolchain.cmake $(pwd)/my_custom_colcon.meta

我们在编译好的interface中找到我们的自定义类型
在这里插入图片描述
和我们想要的完全一致

我们在后期项目引用的时候,只要包含我们的头文件即可:

1.包含头文件

#include <std_msgs/msg/customer_test_type.h>

2,定义自定义变量

sensor_msgs__msg__CustomerTestType msg;

3.初始化topic

 rclc_publisher_init_default(&publisher,&node,ROSIDL_GET_MSG_TYPE_SUPPORT(sensor_msgs, msg, CustomerTestType),"testtopic"));

4.sender送数据

	sensor_msgs__msg__CustomerTestType * Data = &msg;
	Data->data.data = &testdata;
	Data->data.size = sizeof(sensor_msgs__msg__CustomerTestType);
	RCSOFTCHECK(rcl_publish(&publisher, Data, NULL));

5.接收数据

void subscription_callback(const void * msgin)
{
	const sensor_msgs__msg__CustomerTestType * msg = (const sensor_msgs__msg__CustomerTestType *)msgin;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Allegro添加区域规则

阿里狗添加区域规则 前言 当芯片的引脚间距很小&#xff0c;比设置的规则线距小时&#xff0c;拉线就会报错&#xff0c;此时需要添加区域规则去避免这种报错 一、报错详情 规则设置的最小线距是6mil&#xff0c;但是芯片引脚间距是4.5mil&#xff0c;此时线拉出来的间距也…

GD32如何配置中断优先级分组以及中断优先级

使用GD32 MCU的过程中&#xff0c;大家可能会有以下疑问&#xff1a;中断优先级如何配置和使用&#xff1f; 本文将会为大家解析中断优先级分组以及中断优先级的配置使用&#xff1a; 中断优先级分组配置 一个GD32 MCU系统需要大家明确系统中使用的中断优先级分组&#xff0…

linux中xterm窗口怎么调整字体大小

需求&#xff1a;打开的xterm窗口字体比较小&#xff0c;怎么才能调整字体大小&#xff0c;打开的大写&#xff1a; 解决方法&#xff1a; 在home目录下搞一个设置文件 .Xresource&#xff0c;里面内容如下 然后把设置文件添加到 .tcshrc 文件中生效 这样重新打开的xterm字…

11C++常用函数

C学习笔记 文章目录 C学习笔记1.C 迭代器1.1emplace_back()1.1.1用法同push_back()1.1.2emplace_back() 2.erase()3.to_string()4.vector容器的resize()和reserve()6.for(auto x : num) 语法6.1关于是否要加 & 7.内联函数7.1为什么要用内联函数?7.2将内联函数放入头文件7.…

袋鼠云产品功能更新报告10期|智能进化,近百项功能升级加速数智化转型

欢迎查阅袋鼠云第10期产品功能更新报告。本期&#xff0c;我们精心推出了72项新增和优化功能&#xff0c;致力于在数字化浪潮中为您提供更高效、更智能的服务。我们相信&#xff0c;这些新特性将为您的业务注入新活力&#xff0c;确保您在数字化转型的每一步都坚实而有力。 以…

大模型学习之菜鸟的进阶道路---工程迭代

我们的大模型学习开始了新篇章&#xff0c;这一章还是比较基础的调用api&#xff0c;有些朋友建议直接搞构造大模型&#xff0c;很显然这是很不科学的&#xff0c;我们先从基础学习&#xff0c;大模型本来就是很晦涩难懂的东西&#xff0c;并且知识体系十分庞大&#xff0c;所以…

618数码产品有什么推荐?四大2024“宝藏”数码产品推荐!

随着618购物节的热情逐渐升温&#xff0c;你是否在繁多且诱人的商品海洋中迷失方向&#xff0c;难以找到那最心仪的宝贝&#xff1f;团团在此特别为你精心挑选了一系列经过亲身体验的优质好物。这些推荐不仅时尚前沿&#xff0c;更贴合你的日常生活需求&#xff0c;确保实用与品…

电脑ip地址查询:快速定位你的网络位置(4种方法)

在互联网的浩瀚海洋中&#xff0c;每台联网的电脑都有一个独特的身份标识&#xff0c;那就是IP地址。无论是进行网络通信、定位问题还是安全防护&#xff0c;了解自己或他人的电脑IP地址都是非常关键的。那么&#xff0c;电脑ip地址查询怎么操作呢&#xff1f;本文将为你提供一…

RabbitMQ消息的发布确认机制详解

RabbitMQ发布确认机制确保消息从生产者成功传输到交换机和队列&#xff0c;提高系统可靠性。在Spring Boot项目中&#xff0c;通过配置publisher-confirm-type和publisher-returns&#xff0c;启用发布确认和消息返回机制。配置RabbitTemplate的确认回调和返回回调&#xff0c;…

黑龙江等保测评流程

黑龙江的等保测评过程是一个系统严谨的过程&#xff0c;目的在于保证信息系统的安全与机密性符合国家规定的要求。下面将详细介绍黑龙江等保测评的流程&#xff1a; 一、定级与备案 首先&#xff0c;企业要依据自身的业务特点、信息系统的重要性和所承载的信息的敏感程度&…

MyEclipse新手使用介绍

目录 1.MyEclipse诞生背景 2.作用 3.版本历史 4.优缺点 5.应用场景 6.如何使用 6.1.下载与安装 6.2.MyEclipse 菜单及其菜单项 7.创建和发布一个 Java 程序 7.1.创建 Java 程序 7.2.发布 Java 程序 8.示例 8.1. Hello World 示例 8.2. 简单Spring Boot 应用 8.3…

手动安装Nvidia驱动和CUDA Toolkit

1、打开cuda-toolkit 网站 CUDA Toolkit Archive | NVIDIA Developer 根据自己需要选择CUDA Toolkit版本&#xff0c;这里选择12.0.0 2、点击链接跳转到下载页面&#xff0c;选择操作系统类型和安装包类型 3、下载CUDA Toolkit 安装包 4、执行下载命令 wget https://develo…

Sora简介与其对新媒体短视频行业的影响

Sora简介 官网&#xff1a;https://openai.com/sora 当大家还在沉浸在GPT各种大语言模型的时候&#xff0c;OpenAI 悄无声息地发布了文生视频&#xff08;text-to-video&#xff0c;简称 t2v&#xff09;模型 Sora&#xff0c;这又是一个对AI冲击很大的突破了。Sora可以根据文…

什么是广告联盟变现

广告联盟变现&#xff0c;作为一种连接广告主与各类媒体平台的机制&#xff0c;正展现出强大的生命力和影响力。它为拥有流量资源的一方提供了将其转化为实际经济收益的有效途径。通过广告联盟&#xff0c;媒体平台可以与众多广告主建立合作关系&#xff0c;获取多样化的广告内…

Ubuntu系统安装docker以及安装yg系统所能使用到的插件

Ubuntu系统安装docker以及安装yg系统所能使用到的插件 前言&#xff1a;建议大家使用ubuntu系统的时候&#xff0c;直接永久关闭防火墙目前我们处于学习状态&#xff0c;这样有利于提高开发效率。 文章目录 Ubuntu系统安装docker以及安装yg系统所能使用到的插件一、安装docker二…

docker 拉取不到镜像的问题:拉取超时

error pulling image configuration: download failed after attempts6: dial tcp 31.13.94.10:443: i/o timeout 首先设置国内的镜像源&#xff1a;复制下面直接执行 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF{"registry-mirrors"…

通过在idea上搭建虚拟hadoop环境使用MapReduce做词频去重

idea上的MapReduce ​ 一般在开发中&#xff0c;若是等到环境搭配好了再进行测试或者统计数据&#xff0c;数据处理等操作&#xff0c;那会很耽误时间&#xff0c;所以一般都是2头跑&#xff0c;1波人去在客户机上搭建环境&#xff0c;1波人通过在idea上搭建虚拟hadoop环境&am…

uni-app uni-swipe-action 滑动操作状态恢复

按照uni-app官方文档的写法 当前同一条滑动确认之后 页面列表刷新 但是滑动的状态还在 入下图所示&#xff1a; 我们需要在滑动确认之后 页面刷新 滑动状态恢复 那么我们就来写一下这部分的逻辑&#xff1a; 首先&#xff0c;配置一下:show"isOpened[item.id]" chan…

学习笔记——网络参考模型——TCP/IP模型(网络层)

三、TCP/IP模型-网络层 1、IPV4报头 (1)IPV4报文格式 IP Packet(IP数据包)&#xff0c;其包头主要内容如下∶ Version版本∶4 bit&#xff0c;4∶表示为IPv4; 6∶表示为IPv6。 Header Length首部长度∶4 bit&#xff0c;代表IP报头的长度(首部长度)&#xff0c;如果不带Opt…

传输协议TCP-原理部分

传输控制协议TCP&#xff08;Transmission Control Protocol&#xff09;一种基于连接的可靠的稳定的无重复的传输协议。 1、TCP头部信息 TCP协议头部信息如下&#xff1a; 一共占用20个字节 16位源端口号&#xff1a;发送进程的主机端口16位目的端口号&#xff1a;接收主机…