ROS中Rviz实时路径可视化的高效性能优化技巧

摘要

在ROS环境下使用Rviz时,随着时间的增加,通过Python可视化函数visualize_actual_path不断向Path消息中追加新的位置数据会导致处理和传输数据的时间显著增长,进而影响到rviz的刷新率和仿真流畅性。为了解决这一问题,本博客提出了两种应对方法,并提供了代码模板,实现高效地绘制和更新机器人的实际路径。

关键词

ROS、Rviz、实时路径可视化、Python、性能优化

前言

由于要在rviz中绘制实际路径,在每一次循环的时候,都要调用下面函数:

def visualize_actual_path(self, n, e):msg_pose = PoseStamped()msg_pose.pose.position.x, msg_pose.pose.position.y = n, eself.msg_path.poses.append(msg_pose)self.msg_path.header.frame_id = "NED"self.pub_path.publish(self.msg_path)

其中,

self.pub_path = rospy.Publisher("/topic_msgs_path", Path, queue_size=10)
self.msg_path = Path() 

这个函数的作用是可视化机器人的实际运动路径。然而随着时间的推移, self.msg_path.poses 数组会变得越来越大。由于在每次迭代中都会向该数组中追加新的位置,而没有清除旧的数据,因此发布到 ROS 主题 /topic_msgs_path 的 Path 消息将会越来越大,进而导致处理和传输这些消息的时间变长,三分钟以后,光是执行这个函数的时间就达到了一开始的将近10倍。如果开了Rviz,那么仿真的刷新率会越来越低,运动动画会越来越卡顿。该如何控制住这个函数的时长呢?

基本思路

  1. 限制 Path 消息中的 Pose 数量,即只保留 self.msg_path.poses 数组中的最新 N 个位置。
  2. 由于实际运动路径不需要每次循环(一般主程序的循环频率都是100HZ这个量级的,非常快)都作更新,完全可以在一个列表中积累一定数量的路径点,然后在一个较慢的频率下发布它们。

代码模板

下面提供了代码模板,以供日后复用。代码已经过测试。

def visualize_actual_path(self, n, e, MAX_PATH_LENGTH = 10000):msg_pose = PoseStamped()msg_pose.pose.position.x, msg_pose.pose.position.y = n, eif len(self.msg_path.poses) >= MAX_PATH_LENGTH:self.msg_path.poses.pop(0)  # 移除最老的位置信息self.msg_path.poses.append(msg_pose)self.msg_path.header.frame_id = "NED"# self.pub_path.publish(self.msg_path)if rospy.Time.now() - self.last_publish_time > rospy.Duration(1):  # 比如每1秒发布一次self.pub_path.publish(self.msg_path)self.last_publish_time = rospy.Time.now()

代码解释

结果

延伸阅读

参考文献

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

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

相关文章

聊一聊,今年参加软考高级的一些总结

先上结论,系统架构设计师考题难度不高,总之多读书,多刷题,多写博客,多总结,有一定工作经验的基本上都非常容易过。但是我估计自己考不过,主要是论文这块没写好,思路不清晰&#xff0…

GD32单片机远程升级下载,手机在线升级下载程序,GD32在线固件下载升级,手机下载程序固件方法

GD32、STM32单片机,是我们最常见的一种MCU。通常我们在使用STM32单片机都会遇到程序在线升级下载的问题。 GD32/STM32单片机的在线下载通常需要以下几种方式完成: 1、使用ST/GD提供的串口下载工具,本地完成固件的升级下载。 2、自行完成系统B…

SpringBoot文件上传

SpringBoot文件上传 上传文件是互联网中常常应用的场景之一&#xff0c;最典型的情况就是上传头像等&#xff0c;今天就带着带着大家做一个 Spring Boot 上传文件的小案例。 1、pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xml…

【NI-DAQmx入门】NI-DAQmx之MATLAB/SIMULINK支持

Data Acquisition Toolbox™ 提供用于配置数据采集硬件、将数据读入 MATLAB 和 Simulink 以及将数据写入 DAQ 模拟和数字输出通道的应用程序和函数。该工具箱支持多种 DAQ 硬件&#xff0c;包括来自 National Instruments™ 和其他供应商的 USB、PCI、PCI Express 、PXI 和 PXI…

torch.cuda.is_available()=false的原因

1、检查是否为nvidia显卡&#xff1b; 2、检查GPU是否支持cuda; 3、命令行cmd输入nvidia-smi&#xff08;中间没有空格&#xff09;&#xff0c;查看显卡信息&#xff0c;cuda9.2版本只支持Driver Version>396.26&#xff1b;如果小于这个值&#xff0c;那么你就需要更新显…

详解--Hash(中文也称散列、哈希)

参考链接 参考链接2 1. hash 概念 1.1 什么是 hash Hash 也称散列、哈希&#xff0c;对应的英文都是 Hash。 基本原理就是把任意长度的输入&#xff0c;通过 Hash 算法变成固定长度的输出。这个映射的规则就是对应的 Hash 算法&#xff0c;而原始数据映射后的二进制串就是哈希…

不用流氓软件,如何在户外使用手机听下载到家中电脑里的音乐文件呢?

文章目录 本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是本教程使用环境&#xff1a;1 群晖系统安装audiostation套件2 下载移动端app 很多老铁想在上班路上听点喜欢的歌或者相声解解闷儿&#xff0c;于是打开手机上的某雅软件和某音乐软件点进去…

微信图片变小kb电脑怎么改?手机图片压缩的方法

平时在使用微信发送图片的时候&#xff0c;如果图片太大超出了平台限制是无法顺利发送的&#xff0c;很多小伙伴都不知道怎么处理这样的情况&#xff0c;其实可以直接使用压缩图的图片压缩来处理&#xff0c;打开浏览器就能直接完成微信图片压缩&#xff0c;在图片压缩大小时&a…

华为政企园区网络交换机产品集

产品类型产品型号产品说明 核心/汇聚交换机CloudEngine S5731-H24P4XCCloudEngine S5731-H24P4XC 提供 24个10/100/1000BASE-T以太网端口&#xff0c;4个万兆SFP&#xff0c;CloudEngine S5731-H 系列交换机是华为公司推出的新一代智能千兆交换机&#xff0c;基于华为公司统…

x264交叉编译(ubuntu+arm)

1.下载源码 https://code.videolan.org/videolan/x264 在windows下解压&#xff1b;复制到ubuntu&#xff1b; 2.进入源码文件夹-新建脚本文件 touch sp_run.sh 3.在sp_run.sh文件中输入 #!/bin/sh./configure --prefix/home/alientek/sp_test/x264/sp_install --enable-…

大数据管理平台有什么用?如何利用大数据管理平台优化企业运营?

在数字化时代&#xff0c;大数据管理平台已经成为了企业和组织不可或缺的工具。它不仅可以帮助企业跟踪和解决报修问题&#xff0c;还为数据分析提供了丰富的信息。通过合理利用大数据管理平台进行数据分析&#xff0c;企业可以更好地了解其运营情况&#xff0c;优化设备维修和…

python selenium 点击表格中的一系列按钮并输出弹窗内容到csv

一个python selenium的实用实例&#xff0c;比demo重&#xff0c;但也不算太复杂。 trick总结如下&#xff1a; 最新chromedriver的地址&#xff0c;https://googlechromelabs.github.io/chrome-for-testing&#xff0c;这很重要&#xff0c;不然就要处理chrome自动更新之类的…

【数据结构】败者树的建树与比较过程

文章目录 前置知识归并段 建树过程比较过程疑问为什么比较次数减少了&#xff1f;如果某个归并段的元素一直获胜&#xff0c;没有元素了怎么办&#xff1f;处理方法 1处理方法 2 前置知识 归并段 外部排序算法通常用于处理大规模数据&#xff0c;其中数据量远超过计算机内存的…

擎创动态 | 开箱即用!擎创科技联合中科可控推出大模型一体机

一、金融行业大模型一体机发布 10月26日至27日&#xff0c;2023金融科技安全与创新大会顺利召开。会上&#xff0c;中科可控联合擎创科技、卓世科技、文因互联、百川智能、捷通华声、智谱华章、易道博识等9大厂商&#xff0c;发布了9款金融行业大模型一体机&#xff0c;为金融…

云贝教育 |【PGCA题目解析-1】psql元命令\du和\dg都可以列出角色或用户,请问这两个命令是否等价?

考试科目&#xff1a;PGCA-E-090 考试题量&#xff1a;40 道单项选择题、10 道多项选择题&#xff08;每题 2 分&#xff09; 通过分数&#xff1a;60% 考试时间&#xff1a;60min 本文为云贝教育刘峰&#xff08;微信&#xff1a;yunbee_DBA&#xff09;原创&#xff0c;请…

Netty入门指南之NIO Channel详解

作者简介&#xff1a;☕️大家好&#xff0c;我是Aomsir&#xff0c;一个爱折腾的开发者&#xff01; 个人主页&#xff1a;Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏-CSDN博客 当前专栏&#xff1a;Netty应用专栏_Aomsir的博客-CSDN博客 文章目录 参考文献前言Channe…

‘vite‘ is not recognized as an internal or external command

标题翻译后就是&#xff1a;‘vite‘ 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文 运行一个由 Vite 构建的 Vue3 项目&#xff0c;之前还好好的能正常跑&#xff0c; 但拉取新代码之后再次执行 npm run dev 就提示 ‘vite’ 不是内部或外部命令&#xff0…

vue 实现在线预览Excel-LuckyExcel/LuckySheet实现方案

一、准备工作 1. npm安装 luckyexcel npm i -D luckyexcel 2.引入luckysheet 注意&#xff1a;引入luckysheet&#xff0c;只能通过CDN或者直接引入静态资源的形式&#xff0c;不能npm install。 个人建议直接下载资源引入。我给你们提供一个下载资源的地址&#xff1a; …

11月7日,每日信息差

今天是2023年11月07日&#xff0c;以下是为您准备的17条信息差 第一、五粮液否认内部讨论提价传闻 第二、雷军证实小米14销量已超百万台 第三、支付宝生活号全面开放UGC入口。据了解&#xff0c;今年以来&#xff0c;支付宝生活号陆续上线了创作者中心、热点榜单等多个内容产…

【NeurIPS 2020】基于蒙特卡罗树搜索的黑箱优化学习搜索空间划分

Learning Search Space Partition for Black-box Optimization using Monte Carlo Tree Search 目标&#xff1a;从采样&#xff08;Dt ∩ ΩA&#xff09;中学习一个边界&#xff0c;从而最大化两方的差异 先使用Kmeans在特征向量上&#xff08; [x, f(x)] &#xff09;聚类…