Python订阅自定义ROS topic并读取message

2023-05-16

背景

最近部署了基于ROS的实时稠密场景建图, 参考Elastic_bridge. 现在需要用python获取相机每一时刻的pose。该pose的消息类型定义在FrameState.msg 文件中。具体内容如下

uint64 seq
uint64 width
uint64 height

# intrinsics, in pixels
float32 focal_x
float32 focal_y
float32 center_x
float32 center_y

# current sensor pose
geometry_msgs/Pose pose

# SYNTHETIC, generated by ElasticFusion
float32[] color    # 3 float per pixel
float32[] depth    # 1 float per pixel
float32[] position # 3 float per pixel

uint64[] guid         # 1 guid per pixel
uint32[] luid         # 1 luid per pixel
uint32[] luid_removed # luids of surfels removed in this frame
uint32 max_luid

float32[] normal  # 3 float per pixel
float32[] radius  # 1 float per pixel

# INPUT for this frame, from the RGB-D sensor
uint8[] input_color   # RGB, 3 byte per pixel
uint16[] input_depth  # DEPTH, in mm

目录结构

创建如下的文件结构。
catkin_ws/
├── src
│ ├── msg
│ │ └── FrameState.msg
│ ├── listener.py
│ ├── CMakeLists.txt
│ └── package.xml
└──
其中CMakeLists.txt和package.xml参考了其他博客的写法。如下:

CMakeLists.txt
cmake_minimum_required(VERSION 2.8.3)
project(elastic_bridge)

find_package(catkin REQUIRED COMPONENTS
  rospy
  std_msgs
  geometry_msgs
  trajectory_msgs
  message_generation
)

add_message_files(
  FILES
  FrameState.msg
)

generate_messages(
DEPENDENCIES
std_msgs
geometry_msgs
trajectory_msgs
elastic_bridge
)

catkin_package(
#INCLUDE_DIRS include
#LIBRARIES test_py
CATKIN_DEPENDS rospy message_runtime
DEPENDS system_lib
)

include_directories(
  ${catkin_INCLUDE_DIRS}
)

package.xml
<package>
  <name>elastic_bridge</name>
  <version>0.0.0</version>
  <description>The elastic_bridge package</description>

  <maintainer email="zh@todo.todo">smile</maintainer>

  <license>TODO</license>

  <buildtool_depend>catkin</buildtool_depend>

  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_depend>message_generation</build_depend>

  <run_depend>rospy</run_depend>
  <run_depend>std_msgs</run_depend>
  <run_depend>message_runtime</run_depend>

</package>

listener.py
# !/usr/bin/env python

import rospy
from elastic_bridge.msg import FrameState


def callback(data):
    rospy.loginfo('Debug info')
    rospy.loginfo(data.pose)

def listener():
    rospy.init_node('listener', anonymous=True)

    rospy.Subscriber('/elastic_frame_state_stable', FrameState, callback)

    rospy.spin()

if __name__ == '__main__':
    listener()

编译workspace

按如上目录结构设置好代码之后,对python脚本添加可执行权限

chmod +x src/listener.py

然后切换到~/catkin_ws目录下编译, 编译完成后会生成builddevel文件夹

cd ~/catkin_ws
catkin_make

完成后按照如下命令运行即可。最终我们可以通过python订阅到ROS topic发送过来的消息

source devel/setup.bash
python listerner.py

注意事项

  • package.xmlCMakeLists.txt中project的名字要和想订阅的topic对应的工程名相同。也可能不需要,但是在这个项目中如果随意指定project名字的话会报错。报错信息如下

    [ERROR] [1319162712.616980036]: Client [/clientNodeA] wants topic /server_msgs/Swarm 
    to have datatype/md5sum [server_msgs/Swarm/6a727e7bfd7e4aadf9d23c4a779b268e], 
    but our version has [geometry_msgs/Point/4a842b65f413084dc2b10fb484ea7f17]. 
    Dropping connection.
    

注意事项2

  • package.xmlCMakeLists.txt中project的名字要和想订阅的topic对应的工程名相同。也可能不需要,但是在这个项目中如果随意指定project名字的话会报错。报错信息如下

    [ERROR] [1319162712.616980036]: Client [/clientNodeA] wants topic /server_msgs/Swarm 
    to have datatype/md5sum [server_msgs/Swarm/6a727e7bfd7e4aadf9d23c4a779b268e], 
    but our version has [geometry_msgs/Point/4a842b65f413084dc2b10fb484ea7f17]. 
    Dropping connection.
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python订阅自定义ROS topic并读取message 的相关文章

  • 自己总结的QT相关资料和网址汇总

    QT官网 xff1a http www qt io download QT项目源码 xff1a http download qt io QT编程指南 xff1a https lug ustc edu cn sites qtguide QTD
  • QT程序异常结束 处理方式

    运行几个网上的程序都出现如下程序异常结束 xff0c 感觉没有任何错误 xff0c 所以就去网上搜索解决方案 xff1a 很多人都说是 xff1a 1 环境问题 2 要不就是编译器选择不符 3 还有就是有的人是在动态编译的时候提示缺少一些d
  • 【Windows版】CMake安装教程

    一 参考资料 windows 43 cmake 43 mingw 搭建c c 43 43 开发环境 二 步骤 1 官网下载CMake安装包 CMake官网 2 解压安装包 D 360Downloads Software CMake cmak
  • GNSS入门2-RTD, RTK,精度

    2 1 RTD vs RTK RTD xff08 Real Time Differential xff09 xff1a 实时码 xff08 C A码 P码 xff09 相位差分技术 xff0c 流动站与基站距离需小于100km xff0c
  • 关于嵌入式开发的C语言基础总结

    一 位操作 C语言支持的6种位操作符如下 xff1a 1 不改变其他位的值的状况下 xff0c 对某几个位进行设值 方法 xff1a 先对需要设置的位用 amp 操作符 xff08 对应位 amp 0 xff09 进行清零操作 xff0c
  • STM32 ASSERT断言机制

    调试代码经常会有跑崩的时候 xff0c 当整机调试是出问题特别让人崩溃 xff0c 断言机制能很好的定位由于参数错误导致的系统异常的情况 在代码重要的代码区 xff0c 添加断言 xff0c 相当于对出入参数做了预判操作 xff0c 当参数
  • 舵机抖动的原因分析

    舵机抖动 舵机在很多场合都会用到 xff0c 比如航模 云台等 但有时候舵机会莫名的出现抖动 xff0c 最近我也遇到了这个问题 xff0c 花了两天的时间终于解决了 舵机抖动的原因主要有以下几点 xff1a 1 电源电压不足 xff1a
  • ubuntu系统python实现串口通信

    我使用的是USB TTL串口 xff0c 下面是测试之前的一些准备工作 span class token function ls span dev span class token comment 查看设备 xff0c 插拔串口设备注意有没
  • __FILE__,__func__,__LINE__用法举例

    C语言中 xff0c FILE func LINE 常用于logout xff0c 打trace xff0c debug调试 注意 xff1a 其使用不需要定义 xff0c FILE 指示当前文件名 func 指示当前函数名 LINE 指示
  • STM32 串口超时中断+DMA接收不定长数据 比 空闲中断(IDLE)更加灵活、稳定(一)

    前言 xff1a 最近项目有使用串口接收大段不定长GPS数据的需求 xff0c 调试了很久 xff0c 终于找到一个比较好的解决办法 我觉得这个项目需求 xff08 高波特率 大段数据 不定长 xff09 十分典型 xff0c 所以在这里记
  • STM32串口通信(基于缓冲区)

    一 串口的初始化和中断设置 1 初始化GPIO xff1a 根据手册的8 1 11节 xff0c 我们可以找到下表 xff1a 在全双工的模式下 xff0c 发送引脚需要设置为推挽复用输出 xff0c 接收引脚则设置为浮空输入或带上拉的输入
  • STM32与C#上位机串口通信示例

    1 概述 串口通信是一种非常常用的通信方式 xff0c 本文首先介绍了串口硬件和协议的相关内容 xff0c 然后给出一个STM32与C 上位机通过串口通信的示例 2 串口介绍 参考这份文档 3 通信协议 为了方便数据传输 xff0c 定义了
  • 【转】23个常用的VSCode快捷键(动图演示)

    尽管我们经常使用 VS Code中的许多快捷方式 xff0c 但是我们有可能会忘记它们 这里用可视化制作了一些GIF xff0c 以便更好地记住它们 xff0c 希望对你有所帮助 VSCode中的每个命令也可以通过使用CTRL 43 SHI
  • HI3531编码h.264文件播放偏慢分析随笔

    现象 xff1a 编码h 264文件播放时 xff0c 无论帧率是30fps还是60fps xff0c 播放器显示帧率为25 fps 探索过程 xff1a cat proc umap venc 显示得知 xff0c 编码的的确是30fps和
  • C++ const用法详解

    const 是C 43 43 中常用的类型修饰符 常类型是指使用类型修饰符const说明的类型 xff0c 常类型的变量或对象的值是不能被更新的 目录 一 const的作用 二 const修饰普通类型的变量 三 const修饰指针变量 四
  • Source Insight 4.0打开一会就闪退 解决方法

    遇到Source Insight 4 0打开直接闪退 xff0c 请不要着急卸载 xff0c 在Source Insight 4 0快捷键上 xff0c 点击属性 xff0c 选择兼容性如下 xff1a
  • secureCRT连接ubuntu18.04

    1 安装ssh服务器 sudo apt get install openssh server 2 ssh服务器安装失败 错误提示 xff1a 下列软件包有未满足的依赖关系 xff1a openssh server 原因 xff1a 系统预置
  • STM32——USART串口通信与串口重定向

    简介 UART 通用异步收发传输器 xff08 Universal Asynchronous Receiver Transmitter xff0c 通常称 作 UART 它将要传输的资料在串行通信与并行通信之间加以转换 作为把并行输入信 号
  • 海思文件系统缺少文件himm 、i2c_read 、i2c_write 、ssp_read 、ssp_write

    原因 xff1a 海思根文件默认没有把himm i2c read i2c write ssp read ssp write工具集成在bin里 xff0c 但是在sdk中 解决办法 xff1a cd osdrv tools board reg
  • Ubuntu 18.04 Samba服务器的安装和配置(详解)

    具体步骤 xff1a 1 设置为静态IP xff1a 点击静态IP设置链接 2 更新当前软件 sudo apt get upgrade sudo apt get update sudo apt get dist upgrade 3 安装sa

随机推荐