【ROS学习】ROS中 use_sim_time 参数的含义与作用
文章目录
- 写在前面
- 一、背景描述
- 二、 use_sim_time 参数的含义与作用
- 三、举例说明
- 1. 不设置`use_sim_time` (也即 `use_sim_time = false`),播放数据集使用`rosbag play **.bag `
- 2. 不设置`use_sim_time` (也即 `use_sim_time = false`),播放数据集使用`rosbag play **.bag --clock`
- 3. 设置`use_sim_time = true`,播放数据集使用`rosbag play **.bag `
- 4. 设置 `use_sim_time = true`,播放数据集使用`rosbag play **.bag --clock`
- 参考链接
写在前面
自己的测试环境:
Ubuntu20.04
ROS-Noetic
一、背景描述
在程序运行是经常会看到 launch
文件中出现如下程序:
<param name="/use_sim_time" value="true" />
但是这句程序的具体含义和作用是什么,并不清晰。这里对当前这个参数进行解析,便于同行参考。
二、 use_sim_time 参数的含义与作用
use_sim_time
的字面含义是(是否)使用仿真时间
。当设置参数 use_sim_time
为 true
时,意味着使用仿真时间
。它的作用是当前ros
程序中使用rospy.Time.now()
进行读取,则读取到的是仿真时间。
三、举例说明
首先这里附上读取当前ros
时间的 python
程序:
#!/usr/bin/env python
import rospydef main():# 初始化节点rospy.init_node('get_ros_time')# 等待rospy的内部通信建立# rospy.wait_for_service('rospy.set_param')# 设置循环的速率为1Hzrate = rospy.Rate(1)# 循环直到节点被关闭while not rospy.is_shutdown():rospy.loginfo("====================")current_time = rospy.Time.now()# 打印当前ROS时间rospy.loginfo("Current ROS time is: %f", current_time.to_sec())# 等待下一次循环rate.sleep()
if __name__ == '__main__':try:main()except rospy.ROSInterruptException:pass
1. 不设置use_sim_time
(也即 use_sim_time = false
),播放数据集使用rosbag play **.bag
运行指令:
roscore
rosparam set use_sim_time false # 这句指令是否执行,结果都是一样的
rosbag play **.bag
这种设置就是典型的使用ROS
当前的时间,即使用 ROS
系统的最新时间。此时上述 python
程序打印如下:
[INFO] [1722673831.056924]: ====================
[INFO] [1722673831.059255]: Current ROS time is: 1722673831.059109
[INFO] [1722673832.058092]: ====================
[INFO] [1722673832.061643]: Current ROS time is: 1722673832.061444
[INFO] [1722673833.058037]: ====================
[INFO] [1722673833.061723]: Current ROS time is: 1722673833.061501
[INFO] [1722673834.058022]: ====================
[INFO] [1722673834.060917]: Current ROS time is: 1722673834.060722
[INFO] [1722673835.058394]: ====================
[INFO] [1722673835.061902]: Current ROS time is: 1722673835.061656
[INFO] [1722673836.058457]: ====================
[INFO] [1722673836.061843]: Current ROS time is: 1722673836.061635
[INFO] [1722673837.058018]: ====================
[INFO] [1722673837.061253]: Current ROS time is: 1722673837.061034
2. 不设置use_sim_time
(也即 use_sim_time = false
),播放数据集使用rosbag play **.bag --clock
运行指令:
roscore
rosparam set use_sim_time false # 这句指令是否执行,结果都是一样的
rosbag play **.bag --clock
这种设置和《1. 不设置use_sim_time
(也即 use_sim_time = false
),播放数据集不使用--clock
》是一样的,即使用``ROS系统的最新时间。此时上述
python 程序打印和《1. 不设置
use_sim_time(也即
use_sim_time = false),播放数据集不使用
–clock `》是一样的。
3. 设置use_sim_time = true
,播放数据集使用rosbag play **.bag
这种设置就是典型的使用ROS
当前的时间,即``ROS系统的最新时间。此时上述
python` 程序打印如下:
运行指令:
roscore
rosparam set use_sim_time true
rosbag play **.bag
这种设置就是是有问题的,因为设置了use_sim_time = true
,但是没有仿真时间发出来,因此这种设置是错误的。此时上述python
程序不能打印,因为ROS
系统没有始终,程序不能运行。
4. 设置 use_sim_time = true
,播放数据集使用rosbag play **.bag --clock
运行指令:
roscore
rosparam set use_sim_time true
rosbag play **.bag --clock
这种设置就是典型的使用仿真时间,即使用数据集时间
作为整个ROS
系统的时间。此时上述python
程序打印如下:
[INFO] [1722673596.663416, 0.000000]: ====================
[INFO] [1722673596.666444, 0.000000]: Current ROS time is: 0.000000
[INFO] [1722673596.668134, 1317357628.400755]: ====================
[INFO] [1722673596.669762, 1317357628.400755]: Current ROS time is: 1317357628.400755
[INFO] [1722673597.671652, 1317357629.405819]: ====================
[INFO] [1722673597.674328, 1317357629.405819]: Current ROS time is: 1317357629.405819
[INFO] [1722673598.669123, 1317357630.403105]: ====================
[INFO] [1722673598.672169, 1317357630.403105]: Current ROS time is: 1317357630.403105
[INFO] [1722673599.667219, 1317357631.401356]: ====================
[INFO] [1722673599.670245, 1317357631.401356]: Current ROS time is: 1317357631.401356
[INFO] [1722673600.674717, 1317357632.408664]: ====================
[INFO] [1722673600.678019, 1317357632.408664]: Current ROS time is: 1317357632.408664
参考链接
无
相关文章:
【ROS学习】ROS中 use_sim_time 参数的含义与作用
文章目录 写在前面一、背景描述二、 use_sim_time 参数的含义与作用三、举例说明1. 不设置use_sim_time (也即 use_sim_time false),播放数据集使用rosbag play **.bag 2. 不设置use_sim_time (也即 use_sim_time false),播放数据集使用rosbag play **…...

python-查找元素3(赛氪OJ)
[题目描述] 有n个不同的数,从小到大排成一列。现在告诉你其中的一个数x,x不一定是原先数列中的数。你需要输出最后一个<x的数在此数组中的下标。输入: 输入共两行第一行为两个整数n、x。第二行为n个整数,代表a[i]。输出&#x…...

苹果 Safari 的隐私保护与广告追踪问题 :技术进展与挑战
隐私保护的进展与挑战 近年来,浏览器行业在隐私保护技术方面取得了显著进展,尤其是在广告追踪领域。谷歌的 Chrome 浏览器推广了隐私沙盒,通过将用户可能感兴趣的主题分类并推送给广告商。Mozilla Firefox 和 Meta Facebook 则推出了一种名为…...

pytest之fixture
Pytest 中 Fixture 的 yield 用法 在软件测试中,设置和清理测试环境是一个重要的环节。Pytest 作为一个功能强大的测试框架,通过 Fixture 机制简化了这一过程。特别是yield语句的使用,使得 Fixture 能够在测试前进行设置,并在测试…...

Rancher
文章目录 Rancher1. 安装和配置2. 服务部署和管理3. 容器自动化缩容和扩容 Rancher Rancher 是一个开源的企业级容器管理平台,旨在简化容器化应用的部署、管理和运维。它支持多种容器编排引擎,如 Kubernetes、Docker Swarm 等,并提供了统一的…...

Wordpress建站问题记录
从一月到七月因为工作的情况没有进行太深入的开发,想着整理一下把做一个独立站把博客多个渠道发布一下,遇到几个问题在这里记录一下. 先写一下我的配置 系统: centos7 php: 7.4 wordpress: 6.6.1 mysql:8.0.6 1. HTTP 500 Internal 这个问题出现在我将wordpress的文件夹全部…...
JavaFx中通过线程池运行或者停止多个周期性任务
在JavaFX中,要实现点击按钮启动多个周期性任务并通过多线程执行,并在任务结束后将结果写入多个文本组件中,同时提供另一个按钮来停止这些任务,你可以使用ScheduledExecutorService来管理周期性任务,并使用AtomicBoolea…...
使用RabbitMQ实现异步支付状态通知
在支付系统中,如何确保支付状态的准确传递和处理显得尤为重要。今天,我们将以一个支付流程为例,探讨在引入RabbitMQ前后的实现和优化。 改造前 在引入RabbitMQ之前,我们通常会直接在支付方法中完成所有的操作。这包括查询支付单…...
[最短路dijkstra],启动!!!
总时间复杂度为 O ( ( n m ) log m ) P4779 【模板】单源最短路径(标准版) #include<bits/stdc.h> #define ll long long #define fi first #define se second #define pb push_back #define PII pair<int,int > #define I…...

Java企业微信服务商代开发获取AccessToken示例
这里主要针对的是企业微信服务商代开发模式 文档地址 可以看到里面大致有三种token,一个是服务商的token,一个是企业授权token,还有一个是应用的token 这里面主要有下面几个参数 首先是服务商的 corpid 和 provider_secret ,这个可…...

How does age change how you learn?(2)年龄如何影响学习能力?(二)
Do different people experience decline differently? 不同人经历的认知衰退会有不同吗? Do all people experience cognitive decline uniformly?Or do some people’s minds slip while others stay sharp much longer? 所有人经历的认知衰退都是一样的吗?还是有些人…...
可验证随机函数 vrf 概述
一、什么是VRF 背景: 在传统的区块链中,常用的随机算法是基于伪随机数生成器(Pseudorandom Number Generator,PRNG)的。PRNG是一种确定性算法,它根据一个初始种子生成一个看似随机的序列。在区块链中,通常使用的是伪随机数序列来选择区块的创建者、确定验证节点的轮换…...

鸿蒙双向绑定组件:TextArea、TextInput、Search、Checkbox,文本输入组件,图案解锁组件PatternLock
对象暂不支持双向绑定, 效果: 代码: Entry Component struct MvvmCase {StateisSelect: boolean falseStatesearchText: String ""StateinputText: string ""StateareaText: string ""build() {Grid() {G…...
JS 算法 - 计数器
theme: smartblue 题目描述 给定一个整型参数 n,请你编写并返回一个 counter 函数。这个 counter 函数最初返回 n,每次调用它时会返回前一个值加 1 的值 ( n , n 1 , n 2 ,等等)。 示例 1: 输入: n 10 ["cal…...

JavaScript基础——JavaScript运算符
赋值运算符 算术运算符 一元运算符 三元/三目运算符 比较运算符 逻辑运算符 运算符优先级 在JavaScript中,常见的运算符可以包括赋值运算符、一元运算符、算术运算符(二元运算符)、三元/三目运算符、比较运算符、逻辑运算符等࿰…...
E23.【C语言】练习:不创建第三个变量实现两个整数的交换
目录 题目条件 思路1( -) 思路2 (^)(XOR) 往期推荐 1.题目条件 禁止使用以上代码 2.思路1: -运算 aab; ba-b; aa-b; 但这样有潜在的问题 :a,b存储的数字过大,ab可能超过范围 因此改用思路2…...
如何搭建一个web系统?
需求 搭建一个web系统。 框架 设计:墨刀 前端:Vue.js 后端:Java 算法:Python 数据库:时序数据库,介绍 部署:Jekins https://www.jenkins.io/ 文档管理:Teambition 项目管理:禅道 代码管理:Gitlab 开发流程 设计文档和原型文档,功能接口设计࿰…...

三十种未授权访问漏洞复现 合集( 二 )
未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…...
C语言学习笔记[29]:函数①
函数 在C语言中,函数是一段可以完成特定功能的代码,它们可以被重复调用。 函数的分类: 库函数自定义函数 库函数 在C语言中,库函数是由系统提供的,用于完成特定功能的函数,这些函数被集合在一起&#…...

使用Springboot + netty 打造聊天服务之Nacos集群问题记录
目录 1、前言1.1、方法一1.2、方法二 2、方案二实战2.1、在netty服务里加上ws连接、中断事件2.2、在netty服务里加上消息服务 4、总结 使用Springboot netty 打造聊天服务系列文章 第一章 初始搭建工程 第二章 Nacos集群问题记录 1、前言 在使用Springboot Nacos Netty(Web…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...