ROS消息-数组(固定长度与可变长度)及结构体实例

2023-05-16

ROS消息-数组(固定长度与可变长度)及结构体实例

说明

当利用ROS创建节点进行CAN通信时,单个can报文的消息格式通常为:
candata.msg
uint32 id
uint8[8] data//这里采用固定长度数组
由于CAN通信同时需要收发多条can报文,需要采用结构体数组的消息格式,可以定义为:
candata_multi.msg
candata[] frame//这里采用固定长度数组

单消息报文的发布和订阅

Publisher:

#include "ros/ros.h"
#include <canbus/candata.h>
int main(int argc, char **argv)
{
  ros::init(argc, argv, "cansend");
  ros::NodeHandle nh;
  ros::Publisher chatter_pub = nh.advertise<canbus::candata>("chatter", 2000);
  uint8_t i=0;
  uint8_t j=0;
  ros::Rate loop_rate(1);
  while (ros::ok())
  {
    canbus::candata msg;
    for(i=0;i<8;i++)
      msg.data[i]=i;
    msg.id =i++;
    chatter_pub.publish(msg);
    ros::spinOnce();
    loop_rate.sleep();
  }

  return 0;
}

Subscriber:

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <canbus/candata.h>

void chatterCallback(const canbus::candata::ConstPtr& msg)
{
  boost::array<uint8_t, 8> arr=msg->data;//fixed length array, need to use boost::array
  ROS_INFO("I heard: %d", arr[0]);
  ROS_INFO("I heard: %x", msg->id);
}
int main(int argc, char **argv)
{
  ros::init(argc, argv, "test");
  ros::NodeHandle nh;
  ros::Subscriber sub = nh.subscribe("chatter", 2000, chatterCallback);
  ros::spin();
  return 0;
}

显示结果:
在这里插入图片描述

结构体数组消息报文的发布和订阅

Publisher:

#include "ros/ros.h"
#include <canbus/candata.h>
#include <canbus/candata_multi.h>
int main(int argc, char **argv)
{
  ros::init(argc, argv, "cansend");
  ros::NodeHandle nh;
  ros::Publisher chatter_pub = nh.advertise<canbus::candata_multi>("chatter", 2000);
  uint8_t j=0;
  ros::Rate loop_rate(1);
  while (ros::ok())
  {
    canbus::candata msg;
    canbus::candata_multi msg_multi;
    for(uint8_t i=0;i<8;i++)
      msg.data[i]=i;
    msg.id =j++;
    msg_multi.frame.push_back(msg);
    msg.id =j++;
    msg_multi.frame.push_back(msg);
    msg.id =j++;
    msg_multi.frame.push_back(msg);
    chatter_pub.publish(msg_multi);
    ros::spinOnce();
    loop_rate.sleep();
  }
  return 0;
}

Subscriber:

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <canbus/candata.h>
#include <canbus/candata_multi.h>
void chatterCallback(const canbus::candata_multi::ConstPtr& msg)
{
  for(uint8_t i=0;i<msg->frame.size();i++){
  boost::array<uint8_t, 8> arr=msg->frame[i].data;//fixed length array, need to use boost::array
  ROS_INFO("I heard: %d", arr[0]);
  ROS_INFO("I heard: %x", msg->frame[i].id);
  }
}

int main(int argc, char **argv)
{
  ros::init(argc, argv, "test");
  ros::NodeHandle nh;
  ros::Subscriber sub = nh.subscribe("chatter", 2000, chatterCallback);
  ros::spin();
  return 0;
}

显示结果:
在这里插入图片描述

总结

1.固定长度数组,可以直接对元素进行赋值;订阅时,需要利用boost::array来进行接收,否则会报segmentation fault(段错误);
2.可利用消息嵌套定义实现结构体数组形式的消息;
3.对于可变长度数组,需要利用push_back函数实现赋值,接收时需要判断可变数组的size大小.

参考

1.https://answers.ros.org/question/60614/how-to-publish-a-vector-of-unknown-length-of-structs-in-ros/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS消息-数组(固定长度与可变长度)及结构体实例 的相关文章

  • 文件权限_前进的火车_新浪博客

    1 文件权限简介 linux文件权限有9个 xff0c 三组表示 xff0c owner group others 每组又包含r xff0c w xff0c x三种状态 2 根据数字修改权限 r xff0c w xff0c x三种权限通过数
  • python实现爬取网页将特定信息存入excel

    python爬虫爬取网页将特定信息存入excel 背景 1 最近遇到一个需要进行数据分析的项目 xff0c 主要是将网页上需要的信息 xff0c 进行归拢 xff0c 分析 当信息量少的时候 xff0c 采用复制粘贴 excel分析还比较快
  • ESP32实验-自建web服务器配网01

    目标 通过esp32自建web服务器实现配网 具体来说 xff1a 1 esp32上电 xff0c 手机 电脑 平板连上esp32的wifi 2 用浏览器访问esp32的网址esp32默认是192 168 4 1 3 在web页面中输入需要
  • ESP实验02-读取DS1307&eerom34c32

    1 模块介绍 本实验主要用到两个模块 esp32 tinyRTC 模块的图片如下所示 xff1a esp32模块型号为ESP32Devkitc v4 xff0c 是启明云端官方的开发板 与乐鑫官方的完全一致 xff0c 引脚顺序 xff0c
  • stm32f407 RTC不更新问题排查

    1 问题 在做stm32f407rtc实验时 xff0c 代码是用cubemx生成的 xff0c 通过串口打印出时间值 xff0c 1s打印一次 但是结果与料想中的不一致 发现打印出来的值一直不更新 按下复位键 xff0c 后时间会更新一次
  • GD32 can发送报no mailbox 故障

    1 问题描述 在使用GD32can通信时 xff0c 发现如果can线断开了 xff0c 再把can线连上 xff0c 用can分析仪监测不到总线数据 xff0c 调试后发现can发送没有成功 xff0c 通过串口打印出错误 xff0c 显
  • windows配置c语言编译系统-wingw gcc cmake

    前言 笔者在做嵌入式mcu编程的时候 xff0c 有时候想要验证一下部分代码的功能 xff0c 需要先编译成bin文件 xff0c 然后烧录到mcu内执行 每次编译烧录运行耗时较久 于是想到是不是可以在电脑上配置一个c的编译环境 xff0c
  • MacOS Python安装which is required to install pyproject.toml-based projects解决办法

    问题 使用pip安装的时候 xff0c 很多时候报错 xff1a which is required to install pyproject toml based project 使用pip instll pyproject toml无法
  • 自动以版本号命名keil生成的bin文件

    0 前言 在做项目中一直遇到一个小问题 一直也没管 xff0c 最近花了点时间处理了 xff0c 效果还不错 问题是这样的 xff1a 每次编译后的生成的bin文件需要给客户 xff0c 烧录到设备里进行更新 每次生成的bin文件都是固定的
  • protobuf编码格式解析

    示例 假如定义一个如下的protobuf类型 message Person span class token punctuation span required string user name span class token opera
  • 初探STM32掉电复位PDR

    STM32F407 144脚封装的第143脚PDR xff0c 一直没有关注过 xff0c 板子上是直接对其悬空处理 xff0c 悬空到底对系统有没有什么影响 xff0c 查看了STM32F4系列的技术手册也没有发祥有相关说明 只是说明了P
  • keil中自定义输出信息到编译窗口

    写程序的过程中 xff0c 会有不少的条件编译命令 xff0c 但是条件编译过多会导致忘记了定义那些条件 xff0c 排查起来也非常麻烦 xff0c 有没有什么好的方法来查找是否是否有该定义呢 xff1f 答案是有的 xff1a 那就 wa
  • STM32F4 FPU简单设置

    第一步 xff1a 在stm32f4xx h中定义宏 FPU PRESENT FPU USED span class hljs preprocessor span class hljs keyword define span CM4 REV
  • PX4飞控bootloader编译

    以前在使用pix4中 xff0c bootloader是在出厂的时候默认烧写好的 xff0c 我们直接可以通过USB更新固件 xff0c 但是要做二次开发过程中 xff0c 我们需要编译代码并进行烧写 xff0c 我们以前用的编译命令是默认
  • 如何转行游戏行业及我眼中的理想游戏开发团队

    前置内容 xff1a 很久没有写文章啦 xff0c 今天就来继续和大家聊一聊关于游戏制作的一些东西 今天主要聊两个方面 xff0c 一个是其他行业转游戏行业的一些注意事项以及需要具备的东西 xff1b 第二是和大家聊一聊我心目中理想的游戏开
  • W: GPG error: ...the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8

    在debian10上执行命令 xff1a sudo apt get update 更新清华源时 xff0c 报错如下 xff1a Cannot initiate the connection to mirrors tuna tsinghua
  • 四旋翼无人机的动力学模型

    1 四旋翼无人机UAV unmanned aerial vehicles 简介 四旋翼无人机是一种能够垂直起降的非共轴的多旋翼飞行器 xff0c 同一对角线上的一组旋翼采用逆时针旋转 xff0c 另一组旋翼采用顺时针旋转 xff0c 相互抵
  • 植保无人机PID调参经验

    1 P I D输出要限幅 2 P D是相对的 xff0c 如果系统震荡 xff0c 降低P或者加大D xff0c 在不震荡的条件下 xff0c 尽量让P大 3 I是可以不用的 xff0c 基本上PD控制器就可以控地很稳了 xff0c 如果感
  • 测试环境建设原则和管理实践

    1 问题 测试环境是指为了完成软件测试工作所必需的计算机硬件 软件 网络设备 历史数据等的总称 即够支持完成测试工作所需要的软件和硬件 测试环境是测试活动的基础 正确模拟生产环境 稳定支持测试活动是测试环境的基本要求 稳定可控的测试环境能够
  • ESP8266 WIFI数传 Pixhaw折腾笔记

    最近3DR数传老是断线 xff0c 重连 xff0c 数据刷不出来 xff0c 折腾了几天数传问题 xff0c 总结如下 xff1a 3DR RADIO xff1a 淘宝100多一对的 xff0c 别的无线数传也可以 xff0c 但一定保证

随机推荐

  • PX4的CMake解析

    home yanlei src Firmware cmake common 中定义了其他CMakeLists txt中所使用的一些函数 使用最多的函数px4 add module在px4 base cmake中 ekf2的CMakeList
  • PX4的软件仿真(SITL)环境配置过程

    官方地址 xff1a https dev px4 io en simulation gazebo html 框架图 xff0c 各个UDP端口一目了然 xff0c 仅有连接到模拟器的udp端口是随机的 xff0c 从下图的启动界面可以看出
  • PX4的硬件仿真(HITL)环境配置过程

    官方链接 xff1a https dev px4 io en simulation hitl html 硬件在环仿真 HITL 结构图 A HITL configuration is selected via QGroundControl
  • ubuntu 分区安装

    分配大小 60G 选择安装Ubuntu 安装选项 安装类型 xff1a 选择其他选项 新建分区表 1 swap区 xff1a 设为逻辑分区 xff1b 作用跟电脑内存类似 xff0c 大小也可以和电脑内存一样大 xff1b 一般2G就可以2
  • 飞控

    现在市面上的飞行控制器 xff08 下面简称飞控 xff09 分为两种 一种是由商业公司设计生产的 xff0c 例如DJI的Naze系列飞控 xff0c 一般都是闭源的 xff0c 并且经过正规系统的测试 xff0c 稳定性方面有保障 另外
  • Ubuntu16.04下编译Pangolin时失败的解决方法

    从github上下载了最新版本的Pangolin xff0c 依赖项都安齐了 xff0c 但是编译时提示找不到libopencv core so 2 4和libopencv imgproc so 2 4 xff0c 然后处理libavfil
  • Windows10+Ubuntu16.04LTS双系统,卸载Ubuntu16.04LTS并安装Ubuntu18.04LTS

    1 背景 xff1a 本来是Windows10 43 Ubuntu16 04双系统 xff0c 想直接从Ubuntu16 04升级到18 04 xff0c 点的软件更新器里的更新 xff0c 结果重启之后一直黑屏 xff0c 左上角有光标闪
  • 深度学习环境配置(Ubuntu18.04+PyTorch1.9.0)

    准备一台有GPU的电脑 一个Ubuntu18 04 xff0c 把软件源换成清华源 xff0c 安装gcc xff08 这个若版本不对可以后续再调整 xff09 安装Anaconda xff1a 选取版本3 5 2 0 xff0c 这个版本
  • 拯救者Y9000P2022版安装Ubuntu

    前言 当我们买了一个新电脑 新笔记本时 xff0c 如果型号比较新 xff08 通常为了追求性能 xff0c 我们总会选择新型号 xff09 xff0c 大概率Ubuntu会没有相应的硬件驱动支持 xff0c 通常是显卡和网卡不支持 配置
  • 一页PPT自动生成短视频的研究

    希望通过一些技术 xff0c 将以前自己讲过的PPT转换成有解说的短视频 xff0c 从而进行一些分发 旁白到语音 从文字转换成语音我们首先想到的就是TTS xff0c 这其中我也是用了各式各样的TTS xff0c 发现发音电子音非常强 x
  • 选择Mathtype数学公式编辑器的N个理由

    Mathtype是一款强大的数学公式编辑器 xff0c 是理科 生必备的工具 为什么选择这款软件呢 xff1f 不仅仅是因为它有很强的实用性 xff0c 而且他还有许多公式编辑器无可替代的强大功能 今天就来和大家一起细数细数为什么选 择ma
  • Python中局部变量、全局变量和修改全局变量

    局部变量 1 什么是局部变量 如下图所示 2 小总结 局部变量 xff0c 就是在函数内部定义的变量不同的函数 xff0c 可以定义相同的名字的局部变量 xff0c 但是各用个的不会产生影响局部变量的作用 xff0c 为了临时保存数据需要在
  • 用Python抓包工具查看周边拼车情况

    说起Python爬虫 xff0c 很多人第一个反应可能会是Scrapy或者Pyspider xff0c 但是今天文章里用到是Python下一个叫Mitmproxy的抓包工具 xff0c 对付一些非常规的数据获取还是很有效的 不过凡事都是有利
  • 在Python中定义Main函数

    许多编程语言都有一个特殊的函数 xff0c 当操作系统开始运行程序时会自动执行该函数 这个函数通常被命名为main xff0c 并且依据语言标准具有特定的返回类型和参数 另一方面 xff0c Python解释器从文件顶部开始执行脚本 xff
  • realsense D435i安装及标定遇到的问题

    realsense D435i安装 这里的安装是基于ros的安装 xff0c 前提是要安装ros系统 下载realsense ros包 span class token function mkdir span p catkin ws src
  • 【ROS】使用C++编写简单moveit终态位姿控制以及position数据可视化

    1 前言 这几天主要还是在研究用C 43 43 编写moveit target pose的例程 xff0c 中途出现了各种问题 xff0c 一度怀疑人生 xff0c 好在现在也算是磕磕碰碰的解决了一点 虽然还是不知道why xff0c 不过
  • ERROR Session/line number was not unique in database. History logging moved to new session 18

    ERROR Session span class token operator span line number was span class token keyword not span unique span class token k
  • 关于卫星姿态

    坐标系 注意 xff1a 卫星旋转飞行时 xff0c 主轴也转是一个锥角的形式 转动主轴指向 xff0c 和转动惯量主轴指向是一个 xff08 卫星对称均匀情况下 xff0c 质心在中心 xff09
  • VS Code / CMake创建嵌入式Linux C/C++应用

    VS Code是目前最流行的C C 43 43 程序开发环境之一 xff0c 利用VS Code对CMake工程模式的支持 xff0c 创建面向嵌入式Linux平台的C C 43 43 应用 xff0c 对工程管理非常方便 xff0c 值得
  • ROS消息-数组(固定长度与可变长度)及结构体实例

    ROS消息 数组 xff08 固定长度与可变长度 xff09 及结构体实例 说明 当利用ROS创建节点进行CAN通信时 xff0c 单个can报文的消息格式通常为 xff1a candata msg uint32 id uint8 8 da