ROS修改rosbag中话题的frame_id,以及发布坐标在Rviz中与点云融合显示

2023-05-16

ROS修改rosbag中话题的frame_id,以及发布坐标在Rviz中与点云融合显示

  1. 读取rosbag,修改话题frame_id与话题名并循环发布
import rosbag
import rospy
import numpy as np
from sensor_msgs.msg import PointCloud2

bag_file = 'cumt_1204_2022-12-04-20-01-08.bag'
bag = rosbag.Bag(bag_file, "r")
rospy.init_node('change_frameid')
rate = rospy.Rate(10)
while 1:
    bag_data = bag.read_messages('/laser_cloud_surround')
    for topic, msg, t in bag_data:
        msg.header.frame_id = 'livox'
        point_pub = rospy.Publisher('laser_surround', PointCloud2, queue_size=50)
        point_pub.publish(msg)
        rate.sleep()
  1. 读取xlsx文件中的坐标并发布
#!/usr/bin/env python3

import xlrd
import rospy
from nav_msgs.msg import Path
from geometry_msgs.msg import PoseStamped, Quaternion
import tf
import math

# 起始运动状态
x, y, th = 0, 0, 0
data = xlrd.open_workbook('data.xlsx')
sheet1 = data.sheets()[0]
# 数据总行数
nrows = sheet1.nrows
# 数据总列数
ncols = sheet1.ncols

def DataUpdating(path_pub, path_record):
    """
    数据更新函数
    """
    global x, y, th

    # 时间戳
    current_time = rospy.Time.now()

           
    # 配置运动
    

    #print(nrows, ncols)
    # print(sheet1.col_values(0)[0])

    
    
    # 四元素转换
    #quat = tf.transformations.quaternion_from_euler(0, 0, th)
    
    # 发布tf
    br = tf.TransformBroadcaster()
    #br.sendTransform((0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 1.0),
                     #rospy.Time.now(), "/camera_init", "odom")       
    br.sendTransform((0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 1.0),
                     rospy.Time.now(), "livox", "odom")
    # 配置姿态
    pose = PoseStamped()
    pose.header.stamp = current_time
    pose.header.frame_id = 'livox'
    pose.pose.position.x = x
    pose.pose.position.y = y
    pose.pose.orientation.x = 0
    pose.pose.orientation.y = 0
    pose.pose.orientation.z = 0
    pose.pose.orientation.w = 0


    # 配置路径
    path_record.header.stamp = current_time
    path_record.header.frame_id = 'livox'
    path_record.poses.append(pose)

    # 路径数量限制
    if len(path_record.poses) > 200:
        path_record.poses.pop(0)

    # 发布路径
    path_pub.publish(pose)


def node():
    """
    节点启动函数
    """
    try:
        # 初始化节点path
        rospy.init_node('PathRecord')
        # 定义发布器 path_pub 发布 trajectory
        path_pub = rospy.Publisher('trajectory', Path, queue_size=50)
        #point_pub = rospy.Publisher('point', PoseStamped, queue_size=50)
        # 初始化循环频率
        rate = rospy.Rate(10)
        # 定义路径记录
        path_record = Path()
        for i in range(1, nrows):
            # 时间戳
            current_time = rospy.Time.now()
            x=sheet1.cell(i,0).value
            y=sheet1.cell(i,1).value
            x=float(x)/1000
            y=float(y)/1000
            # 发布tf
            br = tf.TransformBroadcaster()
            #br.sendTransform((0.0, 0.0, 0.0), (0.0, 0.0, 0.0, 1.0),
                     #rospy.Time.now(), "/camera_init", "odom")       
            br.sendTransform((0, -1.6, 0.6), (0.001, 0.025, 0.032,  0.999),
                     rospy.Time.now(), "base", "livox")
            br.sendTransform((x, y, 0.0), (0.0, 0.0, 0.0,  1.0),
                     rospy.Time.now(), "odom", "base")
            # 配置姿态
            pose = PoseStamped()
            pose.header.stamp = current_time
            pose.header.frame_id = 'base'
            pose.pose.position.x = x
            pose.pose.position.y = y
            pose.pose.position.z = 0.0
            pose.pose.orientation.x = 0
            pose.pose.orientation.y = 0
            pose.pose.orientation.z = 0
            pose.pose.orientation.w = 1
            # 配置路径
            path_record.header.stamp = current_time
            path_record.header.frame_id = 'base'
            path_record.poses.append(pose)
            # 路径数量限制
            if len(path_record.poses) > 100:
                path_record.poses.pop(0)
            # 发布路径
            path_pub.publish(path_record)
        # 在程序没退出的情况下
        #while not rospy.is_shutdown():
            # 数据更新函数
            #DataUpdating(path_pub, path_record)
            # 休眠
            rate.sleep()
    except rospy.ROSInterruptException:
        pass
if __name__ == '__main__':
    node()


效果视频

定位与地图融合

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

ROS修改rosbag中话题的frame_id,以及发布坐标在Rviz中与点云融合显示 的相关文章

  • 恒定 FPS Android OpenGLES

    你好安卓开发者 我正在 Eclipse 中使用 OpenGLES 1 0 为 Android 开发一个简单的游戏 我使用 Samsung Galaxy S2 Android 2 3 作为开发设备 我有一个关于双核和使帧速率恒定的问题 因此
  • 为什么这段代码的JTextArea占据了整个JFrame?

    我希望框架的一部分包含 JTextArea 但它完全占据了 我无法在这里追踪错误 import java awt import javax swing public class EchoServer public static void m
  • android TrafficStats getUidRxBytes 不准确

    我编写了一个小 Android 应用程序 发送 Http 请求 接收来自服务器的响应 并计算传输和接收的字节数 代码如下 long receivedBytes TrafficStats getUidRxBytes uid lastNumer
  • boundingRectWithSize 不考虑自动换行

    我创建一个 UITextView 向其中添加文本 然后将其放入视图中 使用容器 UITextView lyricView UITextView alloc initWithFrame screen lyricView text NSStri
  • catkin_make 编译报错 Unable to find either executable ‘empy‘ or Python module ‘em‘...

    文章目录 写在前面 一 问题描述 二 解决方法 参考链接 写在前面 自己的测试环境 Ubuntu20 04 一 问题描述 自己安装完 anaconda 后 再次执行 catkin make 遇到如下问题 CMake Error at opt
  • 所有页面的 Windows Phone 标头均相同

    我正在创建一个应用程序 并且我有一个所有页面都相同的页眉 还有页脚 但该页脚将使用应用程序栏创建 我的问题是 如果我不想在每个页面中重复标题 对其进行编码 那么最好的方法是什么 谢谢 最好的方法是创建以下内容 标题的用户控件 页脚的用户控件
  • 在 iPhone 中重新定位后,框架/窗口尺寸“不正确”

    在我的 iPhone OS 应用程序中 我想要 需要 观察设备方向的变化 以便重新排列屏幕的某些部分 我使用的方法是使用CGRect frame UIScreen mainScreen applicationFrame获取屏幕尺寸 并从那里
  • 如何使用 Webdriver 和 C# 通过 Selenium 定位并单击嵌套在多个框架和框架集中的元素

    我有如下所示的 html 页面 我需要单击 clslogin 类中的 登录 如何遍历找到登录名 我正在使用 C 和 selenium Webdriver 使用 XPath html body div table tbody tr 1 td
  • 改变UIView位置的简单方法?

    我使用以下代码更改 UIView 的位置 而不更改视图的大小 CGRect f aView frame f origin x 100 new x f origin y 200 new y aView frame f 有没有更简单的方法来仅更
  • 如何从框架中获取页面实例?

    我有一个在 xaml 中初始化的框架 如下所示
  • 如何通过我的切换帧函数将 Tkinter 条目值从一个帧传递到另一个帧

    我的 Tkinter 应用程序添加了笔记本 在笔记本内我想使用按钮切换框架 实现了笔记本开关和框架开关 当我单击 确定 按钮时 我想将笔记本的一帧输入输入到另一帧enter code here 我尝试将值作为框架类初始化的参数传递 将输入字
  • 更改 UICollectionViewCell 中的标签位置

    我们有一个UICollectionView故事板上有一个原型单元 该细胞有一个UILabel label 其中 其定位没有自动布局 我们有条件地设置标签的框架 collectionView cellForItemAtIndexPath 像这
  • 将预览帧转换为位图

    我知道这个主题已经在黑板上出现过很多次了 但无论如何我都无法让它发挥作用 我想将预览中的视图帧保存为 jpeg 文件 它看起来或多或少 代码被简化 没有额外的逻辑 异常等 像这样 public void onPreviewFrame byt
  • 无法在 Ubuntu 20.04 上安装 ROS Melodic

    我正在尝试使用这些命令在 Ubuntu 20 04 上安装 ROS Melodic sudo sh c echo deb http packages ros org ros ubuntu lsb release sc main gt etc
  • UIView框架、边界和中心

    我想知道如何以正确的方式使用这些属性 我认为 frame可以从我正在创建的视图的容器中使用 它设置相对于容器视图的视图位置 它还设置该视图的大小 Also center可以从我正在创建的视图的容器中使用 此属性更改视图相对于其容器的位置 最
  • 如何为WinForm、C#制作框架?

    我一直在研究改变Windows窗体边框的颜色 发现它是由Windows决定的 好吧 这是有道理的 所以我看到以前问过这个问题的人被告知去这里http customerborderform codeplex com http customer
  • ROS中spin和rate.sleep的区别

    我是 ROS 新手 正在尝试了解这个强大的工具 我很困惑spin and rate sleep功能 谁能帮助我了解这两个功能之间的区别以及何时使用每个功能 ros spin and ros spinOnce 负责处理通信事件 例如到达的消息
  • 如何从框架的历史记录中删除页面?

    如何在 WinRT XAML 应用程序中操作框架的历史记录 用户将从我的中心页面开始 他们可以在其中选择现有项目以转到其编辑屏幕 也可以选择 新项目 新建项目 将引导他们通过一个简短的向导 然后将他们带到 编辑项目 屏幕 向导页面只是我在框
  • 框架可以用什么代替?

    假设我有一个包含 50 个网页的网站 每个页面由 A Header 导航 左侧内容 右侧内容 Footer 不使用 Frames 服务器端编程 第三方工具和软件 构架 我需要将这 5 个部分的代码 HTML 标记 分别放入这 50 个页面中
  • Tkinter 框架滚动条

    我的目标是向其中有多个标签的框架添加一个垂直滚动条 一旦框架内的标签超过框架的高度 滚动条就会自动启用 经过一番搜索 我发现this https stackoverflow com questions 3085696 adding a sc

随机推荐

  • vncviewer黑屏问题解决

    最近在重启服务器后 xff0c 用vnc进行远程桌面连接时 xff0c vnc能够连上 xff0c 或有提示错误 xff0c 或无提示错误 xff0c 但显示黑屏 在网上搜索了甚久 xff0c 各种google xff0c 各种baidu
  • Unbuntu 系统及VNC Viewer显示中文

    一行命令搞定 xff1a apt get install ttf wqy zenhei
  • 在嵌入式Linux系统上安装打印机

    简介 xff1a 在Linux环境中安装打印机 xff0c 通常是cups ghostscript等 xff0c 但体积通常很大 xff0c 几十兆 在我应用的环境 xff0c 要求打印模块不大于5M xff0c 在网上搜索的方案是将cup
  • 深度学习环境搭建:win10+GTX1060 + tensorflow1.5+keras+cuda9.0+cudnn7

    2018年 2月8日下午 xff0c 开始搭建环境 我新买了联想Y720笔记本电脑一台 xff0c 希望用它来开展深度学习的探索 根据之前的一点点经验 xff0c 搭建深度学习的环境 本篇博客主要记录的是流程 xff0c 不提供相关数据的下
  • Linux C/C++面试题汇总

    Linux C C 43 43 面试题汇总 前言计算机基础程序的内存空间进程和线程相关 关键字conststaticvolatile C C 43 43 指针 前言 最近面试的比较多 xff0c 看了很多关于面试的内容 xff0c 有些平时
  • NVIDIA TX2--3--NVIDIA Jetson TX2 查看系统版本参数状态及重要指令

    Yolov 1 TX2上用YOLOv3训练自己数据集的流程 VOC2007 TX2 GPU Yolov 2 一文全面了解深度学习性能优化加速引擎 TensorRT Yolov 3 TensorRT中yolov3性能优化加速 xff08 基于
  • freertos之timer浅析

    背景 freertos的定时器与我所见得到其他RTOS不一样 xff0c 我知道的ucosii是在每次tick 43 43 的时候会检查定时器链表 xff0c smc rtos也是这样做的 xff0c rtt没看过源码不清楚 xff0c 而
  • vins-fusion gps融合相关总结

    1 简介 xff1a VINS Fusion在VINS Mono的基础上 xff0c 添加了GPS等可以获取全局观测信息的传感器 xff0c 使得VINS可以利用全局信息消除累计误差 xff0c 进而减小闭环依赖 相比于局部传感器 xff0
  • vins-mono里的坐标系

    vins mono里主要涉及三个坐标系 xff1a word坐标系 xff0c body坐标系即IMU帧坐标系 xff0c cam坐标系即相机帧坐标系 对于单目系统而言 xff0c 初始化时就会确定世界坐标系 首先进行纯视觉初始化 SFM
  • 华三交换机配置telnet远程登录和http、https登录

    1 配置管理IP地址 lt H3C gt system view 进入系统视图 H3C int vlan 1 进入管理VLAN1 H3C Vlan interface1 ip address 1 1 1 1 24 配置默认管理IP地址 H3
  • C——char(字符串)转int

    有时候需要对输入的数字进行计算之类的操作 xff0c 这时候需要将char转int类型 char是一个单独字节 xff0c 可以保存一个本地字符集的内容的类型 一般使用char 的格式来使用 int就是一个范围较小的无符号整数类型 注意 x
  • Linux设备驱动——第三章字符驱动

    当对幸福的憧憬过于急切 xff0c 那痛苦就在人的心灵深处升起 加缪 本章的目的是编写一个完整的字符设备驱动 我们开发一个字符驱动是因为这一类适合大部分简单的硬件设备 字符驱动也比块驱动易于理解 本章的最终目的是编写一个模块化的字符驱动 x
  • FreeRTOS(一)系统时钟和中断

    RTOS系统运行必需要有时钟 xff0c FreeRTOS可以选择SysTick或TIM作为时钟源 本文以再stm32f1上的移植介绍 选择SysTick需要在FreeRTOSConfig h中取消SysTick Handler 函数的映射
  • 对于USB Bulk通信发送0包的理解

    写Device USB驱动的时候 xff0c 当Bulk送信发送的数据长度恰好是wMaxPacketSize的整数倍时 xff0c 是否应该发送0包的问题搞得我焦头烂额 查找了好多资料 xff0c 有的说要加 xff0c 这是USB协议的一
  • upload漏洞专题

    一 upload上传绕过专题 后缀检验绕过 1 黑名单检测绕过 1 上传文件重命名 span class token comment 由于只有后缀是可控的 span 所以常见的后缀为php中 php2 php3 php4 php5 phtm
  • Pony语言学习(七)——表达式(Expressions)语法(单篇向)

    一 字面量 xff08 Literals xff09 xff08 一 xff09 Bool值 xff1a 没啥要说的 xff0c 就是true和false x1f44a xff08 二 xff09 数值 xff08 Numeric Lite
  • Pony语言学习(八):引用能力(Reference Capabilities)

    xff08 如果你有更好的翻译 xff0c 请务必联系我 我们需要和Rust术语做到翻译看齐 xff09 一 总览 xff08 特译 xff1a https tutorial ponylang io reference capabiliti
  • Pony语言学习(二):基础类型 之 Class

    写在前面的 xff1a 这次咱们来唠唠Pony的基础类型 xff0c 这里说的基础类型指的不是int string boolean float什么内置数据类型 xff0c 而是Pony中用来定义类型的几种方法 xff0c 分别是 Class
  • 匿名管道和命名管道

    进程间通信 xff08 IPC xff09 每个进程有各自不同的用户地址空间 xff0c 任何一个进程的全局变量在另一个进程中都看不到 所以进程之间要交换数据必须通过内核 xff0c 在内核中开辟一块缓冲区 xff0c 进程1把数据从用户空
  • ROS修改rosbag中话题的frame_id,以及发布坐标在Rviz中与点云融合显示

    ROS修改rosbag中话题的frame id xff0c 以及发布坐标在Rviz中与点云融合显示 读取rosbag xff0c 修改话题frame id与话题名并循环发布 span class token keyword import s