机器人操作系统ROS(十一):ROS时间戳与年月日时分秒毫秒格式转换

news/2025/2/21 12:57:47

机器人操作系统ROS(十一):ROS时间戳与年月日时分秒毫秒格式转换

  • ROS时间戳转换为年月日时分秒毫秒格式
    • C++示例
    • Python示例
  • 年月日时分秒毫秒转换为ROS时间戳格式
    • C++示例
    • python示例

ROS_2">ROS时间戳转换为年月日时分秒毫秒格式

ROS机器人操作系统)中,时间戳通常以一种特定的数据结构表示,称为ros::Time。要将ROS时间戳转换为年、月、日、小时、分钟、秒和毫秒,可以使用C++或Python来解析时间戳的各个部分。以下是一个示例代码,展示如何在ROS中完成这项任务。

C++示例

#include <ros/ros.h>

int main(int argc, char** argv)
{
    ros::init(argc, argv, "timestamp_conversion_node");
    ros::NodeHandle nh;

    // 获取当前时间
    ros::Time current_time = ros::Time::now();

    // 将时间戳转换为秒和纳秒
    int32_t seconds = current_time.sec;
    int32_t nanoseconds = current_time.nsec;

    // 将秒转换为日期和时间
    ros::WallTime wall_time = ros::WallTime(current_time);
    int year = wall_time.toBoost().date().year();
    int month = wall_time.toBoost().date().month();
    int day = wall_time.toBoost().date().day();
    int hour = wall_time.toBoost().time_of_day().hours();
    int minute = wall_time.toBoost().time_of_day().minutes();
    int second = wall_time.toBoost().time_of_day().seconds();
    int millisecond = nanoseconds / 1e6; // 毫秒

    // 打印结果
    ROS_INFO("Year: %d, Month: %d, Day: %d, Hour: %d, Minute: %d, Second: %d, Millisecond: %d", year, month, day, hour, minute, second, millisecond);

    return 0;
}

Python示例

#!/usr/bin/env python
import rospy
from datetime import datetime

def timestamp_to_datetime():
    rospy.init_node('timestamp_conversion_node', anonymous=True)
    
    # 获取当前时间
    current_time = rospy.get_rostime()
    
    # 将时间戳转换为秒和纳秒
    seconds = current_time.secs
    nanoseconds = current_time.nsecs
    
    # 将秒转换为日期和时间
    dt = datetime.fromtimestamp(seconds)
    year = dt.year
    month = dt.month
    day = dt.day
    hour = dt.hour
    minute = dt.minute
    second = dt.second
    millisecond = nanoseconds / 1e6  # 毫秒
    
    # 打印结果
    rospy.loginfo("Year: %d, Month: %d, Day: %d, Hour: %d, Minute: %d, Second: %d, Millisecond: %d", year, month, day, hour, minute, second, millisecond)
    
    rospy.spin()

if __name__ == '__main__':
    try:
        timestamp_to_datetime()
    except rospy.ROSInterruptException:
        pass

这些示例代码会获取当前ROS时间戳,然后将其分解为年、月、日、小时、分钟、秒和毫秒,并将这些值打印出来。可以根据自己的需求来使用这些值。

ROS_80">年月日时分秒毫秒转换为ROS时间戳格式

要将年、月、日、小时、分钟、秒和毫秒转换为ROS时间戳,可以使用ROS时间处理函数。以下是一个示例代码,演示如何从年、月、日、小时、分钟、秒和毫秒创建ROS时间戳。

C++示例

#include <ros/ros.h>

int main(int argc, char** argv)
{
    ros::init(argc, argv, "reverse_timestamp_conversion_node");
    ros::NodeHandle nh;

    // 定义日期和时间的各个部分
    int year = 2023;
    int month = 10;
    int day = 9;
    int hour = 14;
    int minute = 30;
    int second = 45;
    int millisecond = 500; // 毫秒

    // 创建tm结构体以便使用ROS时间函数
    struct tm time_struct;
    time_struct.tm_year = year - 1900;  // 年份应减去1900
    time_struct.tm_mon = month - 1;     // 月份从0开始,所以需要减1
    time_struct.tm_mday = day;
    time_struct.tm_hour = hour;
    time_struct.tm_min = minute;
    time_struct.tm_sec = second;

    // 使用mktime将tm结构体转换为时间
    time_t time_seconds = mktime(&time_struct);

    // 创建ROS时间
    ros::Time ros_time(time_seconds, millisecond * 1e6); // 将毫秒转换为纳秒

    // 打印结果
    ROS_INFO("ROS Timestamp: %d.%09d", ros_time.sec, ros_time.nsec);

    return 0;
}

python示例

#!/usr/bin/env python
import rospy
from datetime import datetime
from time import mktime

def datetime_to_timestamp():
    rospy.init_node('reverse_timestamp_conversion_node', anonymous=True)
    
    # 定义日期和时间的各个部分
    year = 2023
    month = 10
    day = 9
    hour = 14
    minute = 30
    second = 45
    millisecond = 500  # 毫秒
    
    # 创建datetime对象
    dt = datetime(year, month, day, hour, minute, second, int(millisecond * 1e3))
    
    # 使用mktime将datetime对象转换为时间
    time_seconds = mktime(dt.timetuple())
    time_nanos = int(millisecond * 1e6)
    
    # 创建ROS时间
    ros_time = rospy.Time.from_sec(time_seconds) + rospy.Duration.from_nsec(time_nanos)
    
    # 打印结果
    rospy.loginfo("ROS Timestamp: %d.%09d", ros_time.secs, ros_time.nsecs)
    
    rospy.spin()

if __name__ == '__main__':
    try:
        datetime_to_timestamp()
    except rospy.ROSInterruptException:
        pass

这些示例代码演示了如何从年、月、日、小时、分钟、秒和毫秒创建一个ROS时间戳。首先,需要定义这些时间部分,然后使用适当的函数(mktime或rospy.Time.from_sec)将它们转换为ROS时间戳的秒和纳秒部分。然后,可以将这些部分组合成一个ROS时间戳对象。


http://www.niftyadmin.cn/n/5074487.html

相关文章

智慧城市智慧灯杆IP网络广播可视紧急求助系统

智慧城市智慧灯杆IP网络广播可视紧急求助系统 深圳锐科达智慧城市智慧灯杆IP网络广播紧急求助系统 引言&#xff1a; 智慧路灯隶属于智慧城市&#xff0c;是智慧城市系统下的一个分支&#xff0c;也是其中一个重要组成部分。智慧城市系统平台功能强大&#xff0c;架构复杂&am…

MySQL中WEEK()函数刨坑

在MySQL中&#xff0c;WEEK()函数用于返回日期所在的周次。根据默认的设置&#xff0c;WEEK()函数将周日视为一周的开始&#xff0c;因此周日是被包括在内的。 然而&#xff0c;MySQL也提供了其他选项来改变周的开始日期。通过设置mode参数&#xff0c;你可以选择将周一开始作…

Python Parser 因子计算性能简单测试

一直以来&#xff0c;Python 都在量化金融领域扮演着至关重要的角色。得益于 Python 强大的库和工具&#xff0c;用户在处理金融数据、进行数学建模和机器学习时变得更加便捷。但作为一种解释性语言&#xff0c;相对较慢的执行速度也限制了 Python 在一些需要即时响应的场景中的…

机械臂抓取的产业落地进展与思考

工业机械臂是一种能够模拟人类手臂动作的机械装置&#xff0c;具有高精度、高速度和高灵活性的特点。近年来&#xff0c;随着人工智能和机器人技术的快速发展&#xff0c;机械臂在工业生产、物流仓储、医疗护理等领域得到了广泛应用。机械臂抓取技术作为机械臂的核心功能之一&a…

边坡安全监测系统的功能优势

随着科技的进步&#xff0c;边坡安全监测系统在各种工程项目中发挥着越来越重要的作用。这款系统通过实时监测垂直、水平位移数据&#xff0c;以折线图的方式显示在监控平台中&#xff0c;为工程人员提供了直观、便捷的监控工具&#xff0c;从而能够及时掌握边坡稳定状况&#…

python每日一练(3)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

常见算法-洗扑克牌(乱数排列)

常见算法-洗扑克牌&#xff08;乱数排列&#xff09; 1、说明 洗扑克牌的原理其实与乱数排列是相同的&#xff0c;都是将一组数字&#xff08;例如1∼N&#xff09;打乱重新排列&#xff0c;只不过洗扑克牌多了一个花色判断的动作而已。 初学者通常会直接想到&#xff0c;随…

抖音手机实景无人直播间怎么搭建?

手机无人直播已成为用户直播和商家直播带货的一项热门技术趋势&#xff0c;为消费者提供了全新的观看体验。无人直播&#xff0c;顾名思义&#xff0c;即通过无人直播软件或数字人来进行无人直播。这一技术的广泛应用&#xff0c;不仅为短视频渠道带来了更丰富的玩法&#xff0…