总体说明
OpenHiva提供了一套定时器接口(Hiva Timer),适用于需要周期性执行某个功能或者需要定时器的场景。Hiva Timer提供了与ROS Timer(具体参见ROS官网Code API中Timer类)入参一致的接口,包括定时器的创建、定时器的开始(Start)/停止(Stop)/设定周期(SetPeriod)/是否有效(IsValid)等功能。ROS Timer创建定时器的接口形态繁多,Hiva Timer只提供常用的创建接口,不提供通过TimerOptions进行配置的接口。
由于时钟源不同,框架提供了不同的定时器接口。目前支持的时钟源如下:
- Hiva clock:是模拟时钟,在配置文件中通过参数use_sim_time=True/False来控制时钟的开启/关闭。
- wall clock:是系统时钟,是可修改的,通常与外部时间保持一致。
- steady clock:是系统单调时钟,是指从系统启动到当前经过的时间,是绝对递增的时间,无法修改,系统重启则时间计时重置。
Hiva Timer提供的定时器接口如下:

- 调用定时器接口前,请先调用OpenHiva::Init完成初始化。
- 由于定时器任务易受系统时间影响,请不要在定时器任务进行过程中修改系统时间。
- 定时器启动时应立即指定需要使用的时钟源,避免中途切换。因为时钟源的切换不会主动通知定时器,可能时钟源已经切换,但定时器仍基于切换前的时钟源计时。如果中途切换了时钟源,必须重启节点才能按照新的时钟源工作。
- CreateTimer
- 时钟源可配置,支持Hiva clock或wall clock,接口优先使用Hiva clock。调用CreateTimer接口时,系统会读取配置文件,当参数use_sim_time=True时使用Hiva clock,否则使用wall clock,更多参数介绍请参见配置管理。
- 实现原理与原始ROS Timer一致,创建的定时器将使用操作系统自带的定时唤醒机制,不使用硬件定时器。
- CreateWallTimer
- 时钟源不可配置,仅支持wall clock。
- 创建的定时器在系统提供了硬件时钟设备的基础上,将直接使用硬件定时器,不依赖操作系统的定时唤醒机制,因而可以做确定性的用户态高精度时钟。
- CreateSteadyTimer
- 时钟源不可配置,仅支持steady clock。
- 创建的定时器在系统提供了硬件时钟设备的基础上,将直接使用硬件定时器,不依赖操作系统的定时唤醒机制,因而可以做确定性的用户态高精度时钟。
父主题: 定时器