当前位置: 首页 > news >正文

【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_timetrue 时,意味着使用仿真时间。它的作用是当前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)&#xff0c;播放数据集使用rosbag play **.bag 2. 不设置use_sim_time (也即 use_sim_time false)&#xff0c;播放数据集使用rosbag play **…...

python-查找元素3(赛氪OJ)

[题目描述] 有n个不同的数&#xff0c;从小到大排成一列。现在告诉你其中的一个数x&#xff0c;x不一定是原先数列中的数。你需要输出最后一个<x的数在此数组中的下标。输入&#xff1a; 输入共两行第一行为两个整数n、x。第二行为n个整数&#xff0c;代表a[i]。输出&#x…...

苹果 Safari 的隐私保护与广告追踪问题 :技术进展与挑战

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

pytest之fixture

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

Rancher

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

Wordpress建站问题记录

从一月到七月因为工作的情况没有进行太深入的开发,想着整理一下把做一个独立站把博客多个渠道发布一下,遇到几个问题在这里记录一下. 先写一下我的配置 系统: centos7 php: 7.4 wordpress: 6.6.1 mysql:8.0.6 1. HTTP 500 Internal 这个问题出现在我将wordpress的文件夹全部…...

JavaFx中通过线程池运行或者停止多个周期性任务

在JavaFX中&#xff0c;要实现点击按钮启动多个周期性任务并通过多线程执行&#xff0c;并在任务结束后将结果写入多个文本组件中&#xff0c;同时提供另一个按钮来停止这些任务&#xff0c;你可以使用ScheduledExecutorService来管理周期性任务&#xff0c;并使用AtomicBoolea…...

使用RabbitMQ实现异步支付状态通知

在支付系统中&#xff0c;如何确保支付状态的准确传递和处理显得尤为重要。今天&#xff0c;我们将以一个支付流程为例&#xff0c;探讨在引入RabbitMQ前后的实现和优化。 改造前 在引入RabbitMQ之前&#xff0c;我们通常会直接在支付方法中完成所有的操作。这包括查询支付单…...

[最短路dijkstra],启动!!!

总时间复杂度为 O ( ( n m ) log ⁡ m &#xff09; P4779 【模板】单源最短路径&#xff08;标准版&#xff09; #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&#xff0c;一个是服务商的token&#xff0c;一个是企业授权token&#xff0c;还有一个是应用的token 这里面主要有下面几个参数 首先是服务商的 corpid 和 provider_secret &#xff0c;这个可…...

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

对象暂不支持双向绑定&#xff0c; 效果&#xff1a; 代码&#xff1a; Entry Component struct MvvmCase {StateisSelect: boolean falseStatesearchText: String ""StateinputText: string ""StateareaText: string ""build() {Grid() {G…...

JS 算法 - 计数器

theme: smartblue 题目描述 给定一个整型参数 n&#xff0c;请你编写并返回一个 counter 函数。这个 counter 函数最初返回 n&#xff0c;每次调用它时会返回前一个值加 1 的值 ( n , n 1 , n 2 &#xff0c;等等)。 示例 1&#xff1a; 输入&#xff1a; n 10 ["cal…...

JavaScript基础——JavaScript运算符

赋值运算符 算术运算符 一元运算符 三元/三目运算符 比较运算符 逻辑运算符 运算符优先级 在JavaScript中&#xff0c;常见的运算符可以包括赋值运算符、一元运算符、算术运算符&#xff08;二元运算符&#xff09;、三元/三目运算符、比较运算符、逻辑运算符等&#xff0…...

E23.【C语言】练习:不创建第三个变量实现两个整数的交换

目录 题目条件 思路1&#xff08; -&#xff09; 思路2 &#xff08;^&#xff09;(XOR) 往期推荐 1.题目条件 禁止使用以上代码 2.思路1&#xff1a; -运算 aab; ba-b; aa-b; 但这样有潜在的问题 :a&#xff0c;b存储的数字过大&#xff0c;ab可能超过范围 因此改用思路2…...

如何搭建一个web系统?

需求 搭建一个web系统。 框架 设计:墨刀 前端:Vue.js 后端:Java 算法:Python 数据库:时序数据库,介绍 部署:Jekins https://www.jenkins.io/ 文档管理:Teambition 项目管理:禅道 代码管理:Gitlab 开发流程 设计文档和原型文档&#xff0c;功能接口设计&#xff0…...

三十种未授权访问漏洞复现 合集( 二 )

未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷&#xff0c;导致其他用户可以直接访问&#xff0c;从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…...

C语言学习笔记[29]:函数①

函数 在C语言中&#xff0c;函数是一段可以完成特定功能的代码&#xff0c;它们可以被重复调用。 函数的分类&#xff1a; 库函数自定义函数 库函数 在C语言中&#xff0c;库函数是由系统提供的&#xff0c;用于完成特定功能的函数&#xff0c;这些函数被集合在一起&#…...

使用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…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用&#xff0c;操作系统&#xff1a;Ubuntu24.04&#xff0c;Neofj版本&#xff1a;2025.04.0。 Apt安装 Neofj可以进行官网安装&#xff1a;Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...