Unix、UTC、GPS时间戳及转换

2023-05-16

UTC时间
UTC时间的英文全称:Universal Time Coordinated,中文名称:协调世界时。俗的理解为,这个时间是全世界通用的,即全世界都公用的一个时间。可以认为格林威治时间就是时间协调时间(GMT=UTC),格林威治时间和UTC时间均用秒数来计算的。
起始时间为:1970年1月1日

北京时间:UTC+8
在这里插入图片描述
本地时间
计算机显示的时间
本地时间 = UTC 时间 + 时区 (北京时间是东八区,也就是 +8小时)
UTC + 时区差 = 本地时间
时区差东为正,西为负。在此,把东八区时区差记为 +0800,
在这里插入图片描述

UNIX时间
在计算机中看到的UTC时间都是从(1970年01月01日 0:00:00)开始计算秒数的。所看到的UTC时间那就是从1970年这个时间点起到具体时间共有多少秒。 这个秒数就是Unix时间戳,与时区无关。应用于大多数Unix系统(linux,Ubuntu,ros)

考虑到闰秒的话,更精确的定义为从协调世界时(UTC时间)1970年1月1日0时0分0秒起至现在经过闰秒调整之后的总秒数。

所以Unix时间转换为本地时间,应该先将 Unix时间转换为UTC时间(UTC是0时区的时间),然后再将UTC时间转换为本地时间:

Unix时间戳转换为本地时间的在线工具

在这里插入图片描述

GPS时间系统
GPS使用UTC原子钟时间,起始时间为:1980年1月6日;

与unix两者相差:err=315964800秒

GPS时间表示:周数Weeks和周内秒Secs,转成秒:

sec = Weeks *7 * 24 * 3600 +Secs

和ros的时间转为同一时间基准:

s = sec + err - 闰秒次数

即
unix_timestamp = gps_timestamp + 315964800 - LEAPSEC

其中315964800 为两个时间起始相差的固定秒数
LEAPSEC :闰秒

GPS时间系统采用原子时AT1秒长作时间基准,秒长定义为铯原子CS133基态的两个超精细能级间跃迁辐射振荡9192631170周所持续的时间。

时间起算的原点定义在1980年1月6日世界协调时UTC0时,启动后不跳秒,保证时间的连续。以后随着时间积累,GPS时与UTC时的整秒差以及秒以下的差异通过时间服务部门定期公布。

GPS卫星广播星历采用WGS-84(G873)世界大地坐标系

闰秒
闰秒是在协调世界时(UTC)中增加或减少一秒,使得UTC时与原子时[5]之间的差不超过0.9秒。
需要闰秒的部分原因是因为一个太阳日并不总是86400秒。当要增加正闰秒时,这一秒是增加在第二天的00:00:00之前,效果是延缓UTC第二天的开始。当天23:59:59的下一秒被记为23:59:60,然后才是第二天的00:00:00。如果是负闰秒的话,23:59:58的下一秒就是第二天的00:00:00了,但目前还没有负闰秒调整的需求。
最近的一次添加闰秒是在2016年12月31日23:59:60。

闰秒是对“协调世界时”(UTC)所做出的基本调整,以便令其与太阳时间保持同步。

2016年7月6日,法国国际地球自转组织发布公告:国际标准时间将在格林尼治时间2016年12月31日23时59分59秒实施一个正闰秒,即增加1秒,届时将出现59分60秒的特殊现象。由于北京处于东8区,所以中国将在2017年1月1日7:59:59后面增加1秒,出现7:59:60的特殊现象。2016年最后一天,全球多一秒!

一般来说,闰秒会被添加在某一年的6月30日或者12月31日。两次闰秒之间的时间间隔并不固定,最短的一次只隔了6个月,最长的一次隔了7年。多出来的一秒对于普通人的生活或许没有太多影响,但是对于时间连续精度有严格要求的航天、通讯、金融等领域有很大影响。比如一秒钟,飞船已经飞过了8公里!

本次闰秒调整后UTC时间与GPS时间的差将变为18秒,即UTC相对于GPS时慢了18秒

UTC时间转UNIX时间戳

UTC时间转换成UNIX时间戳的方法其实很简单,因为此条件下输入的年月日是固定的。因此对于这个问题, 我们可以直接按照年月日时分的形式进行计算, 统计每它们的秒数之和。最后加入最后的秒数就可以得到当前的UNIX 时间戳了。我们知道闰年的秒数为31622400s,平年的秒数为31536000s。

程序的设计思路为:
1) 统计从1970年至今一共过了多少平年,多少闰年,统计完成之后,根据闰年和平年的秒数计算出从1970年1月1日至今年一共经过了多少秒。
2) 计算出当前年份是平年还是闰年, 以此推算出从年初到上个月过去了多少天。计算完成之后,可以将本月的到昨天的天数一起统计进来,最终可以将年月日三个单位的秒数一起统计出来。
3) 将剩余的时分秒利用同样的方式进行累加,最终得出当前的UNIX时间戳。

具体代码如下:

#include <stdio.h>
#include "timex_test1.h" 
time_tt stCurrentTime; 

int main(void)
{
  stCurrentTime.year = 2023;
  stCurrentTime.month = 4;
  stCurrentTime.date = 13;
  stCurrentTime.hour = 9;
  stCurrentTime.minute = 30;
  stCurrentTime.second = 3;
  printf("%ds", UTCToUnixTimeStamp(&stCurrentTime));
  return 0;
}

UnixTimeStamp_t UTCToUnixTimeStamp(time_tt *time)
{
  int FlatYearMonthDay[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  int LeapYearMonthDay[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  time_tt *tempTime;	//定义临时变量存储时间int i;
  tempTime = time;	//指向传入参数
  int LeapYearNumber;		//闰年
  int FlatYearNumber; //平年
  int ThisYear;
  int LastMonDays = 0;
  UnixTimeStamp_t TimeStamp = 0;

/*step1: 统计从1970年至今年,一共包含多少平年和闰年,并且计算其总秒数*/ 
for ( i = UNIX_TIME_STAMP_YEAR; i < tempTime->year; i ++ )
{
  if((((i % 4) == 0) && ((i % 100) != 0)) || ((i % 400) == 0))
  {
    LeapYearNumber ++;
  }
  else
  {
    FlatYearNumber ++;
  }
}
TimeStamp = LeapYearNumber * 31622400 + FlatYearNumber * 31536000;

/*step2: 判断今年是平年还是闰年*/
if((((tempTime->year % 4) == 0) && ((tempTime->year % 100) != 0)) || ((tempTime->year % 400) ==0))
{
  ThisYear = LEAP_YEAR;
}
else
{
  ThisYear = FLAT_YEAR;
}

for ( i = 1; i < tempTime->month; i ++)
{
  if(ThisYear == LEAP_YEAR)
  {
    LastMonDays += LeapYearMonthDay[i];
  }
  else if(ThisYear == FLAT_YEAR)
  {
    LastMonDays += FlatYearMonthDay[i];
  }
}
LastMonDays = LastMonDays + tempTime->date - 1; //统计当月到昨天为止的天数TimeStamp += LastMonDays * 86400;

/*step3. 计算出剩余的时分秒*/
TimeStamp += tempTime->hour * 3600; 
TimeStamp += tempTime->minute * 60; 
TimeStamp += tempTime->second;
return TimeStamp;
}

timex_test1.h

#ifndef   __TIMEX_TEST1_H_
#define   __TIMEX_TEST1_H_

#define UNIX_TIME_STAMP_YEAR  1970
#define LEAP_YEAR             1
#define FLAT_YEAR             0
typedef struct timex_test1
{
  int year;
  int month; 
  int date; 
  int hour;
  int minute; 
  int second;
} time_tt;

typedef unsigned int UnixTimeStamp_t;
UnixTimeStamp_t UTCToUnixTimeStamp(time_tt *time);
#endif

UNIX时间转UTC时间戳
1)时分秒的转换
当UNIX时间戳的计数值小于86400(24h)的时候,我们很容易就能写出转换成UTC时间的程序, 因为小时数就是“UnixTimeStamp” 对3200 取模, 分数就是将不能凑满小时的“UnixTimeStamp” 对60 取模, 剩余不能凑满分数的“UnixTimeStamp” 即为当前时间的秒数。

2)年月日的转换
接下来,我们将要再对“日”的上一层单位进行讨论,即“月”数值,这也将是这个程序最为复杂的一部分内容。
这个复杂点主要体现在两个方面:
(1) 每个月的天数不等。众所周知,一年中每个月的天数都是不同的,1,3,5,7,8, 10,12为大月,一个月有31天;4,6,9,11为小月,一个月有30天。
(2) 闰年平年的影响。由于公历的偏差,导致了一年中最为特殊的一个月份2月,当此年为闰年时,2月份有29天,此年为平年时,2月份有28天。
上面两个原因,导致了年月日计算的复杂性。

但是,困难只是表面上的,我们仔细思考下,就很容易得出规律。这个规律的突破口即为闰年出现的时间, 因为闰年每四年出现一次, 那么我们可以列出从1970 年开始的几个年份。如下图所示:

在这里插入图片描述
由于闰年每四年出现一次,因此我们由图3中可以得出一个简单方法,即可以从1790年开始,每四年组成一个集合,每一个集合的都是由1年闰年加上3年平年组成的,它们的时间都是相等的,即126230400秒。

因此这个月数的求解步骤就可以变为:
(1) 计算从1970 年开始到当前的UNIX时间戳为止, 一共过了多少个“ 集合年( 平年+ 闰年)”;
(2) 计算出当前的UNIX时间戳位于本“集合年“的哪一年,这样就可以判断当年年份是平年
还是闰年;
(3) 判断了当前年份是平年还是闰年之后,就可以推算出2月份有多少天,然后可以根据上述的递归法,求解出当前位于某一月,某一天。

所以,我们先求出当前的年份,得出当前年份之后, 我们就可以很容易使用“ 能被4 整除且不能被100 整除, 或者能被400 整除的年份是闰年”这一条规则算出当年年份是闰年还是平年。接着, 我们可以直接将当前年份剩余的时间戳结合平年还是闰年, 查表计算出当前的月份。

#include <stdio.h>
#include "timex_test2.h" 
utc_t UtcTime;
int main(void)
{
  int retVal;
  int u32UnixTimeStamp = 0; int hour, minute, sec;
  int flat_year_month_day[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  int leap_year_month_day[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  int year_temp = 0; 
  int day_temp = 0;
  unsigned int cnt_temp = 0; 
  int is_leap_or_flat_year; int i;
  printf("input the UNIX time stamp:"); 
  scanf("%d", &u32UnixTimeStamp);

  cnt_temp = u32UnixTimeStamp;
/*判断当前UNIX时间戳经过了多少个4年*/ 
  while(cnt_temp >= 126230400)
  {
    year_temp ++;
    cnt_temp = cnt_temp - 126230400;
  }
  /*计算出当前的4年周期起始年份*/
  UtcTime.year = UNIX_TIME_YEAR + (4 * year_temp);
  /*计算出当前的年份*/
  /*这部分代码可使用循环做精简,为了直观,我将其写开*/
  if(cnt_temp >= 31536000)
  {
    UtcTime.year ++;
    cnt_temp -= 31536000;
    /*Flat year*/
    if(cnt_temp >= 31536000)
    {
      UtcTime.year ++;
      cnt_temp -= 31536000;
    /*Leap year*/
    if(cnt_temp >= 31622400)
    {
      UtcTime.year ++;
      cnt_temp -= 31622400;
    /*Flat year*/
    if(cnt_temp >= 31536000)
    {
      UtcTime.year ++;
      cnt_temp -= 31536000;
    }
    }
    }

/*计算当前年份是平年还是闰年*/
if((((UtcTime.year % 4) == 0) && ((UtcTime.year % 100) != 0)) || ((UtcTime.year % 4) ==0))
{
  is_leap_or_flat_year = LEAP_YEAR;
}
else
{
  is_leap_or_flat_year = FLAT_YEAR;
}
/*计算出不足一年剩余的天数*/
day_temp = cnt_temp / 86400;

/*剩余不足86400s的时间戳,计算出时间*/
UtcTime.hour = (cnt_temp - day_temp * 86400) / 3600;	//Calculate hours 
UtcTime.minute = (cnt_temp - day_temp * 86400 - UtcTime.hour * 3600) / 60; //Calculate minutes 
UtcTime.second = cnt_temp % 60;

/*将天数结合平年还是闰年查表计算出当前的月份*/
if(is_leap_or_flat_year == FLAT_YEAR)
{
  if(day_temp >= flat_year_month_day[i + 1])
  {
    UtcTime.month ++;
    day_temp -= flat_year_month_day[i + 1];
  }
}
else if(is_leap_or_flat_year == LEAP_YEAR)
{
  if(day_temp >= leap_year_month_day[i + 1])
  {
    UtcTime.month ++;
    day_temp -= leap_year_month_day[i + 1];
  }
}
}

/*由于天数从1开始,因此需要加1*/
UtcTime.date = day_temp + 1;
printf("\nTime transform successfully\n");
printf("++++++++++++++++++++++++++++++++++\n");
printf("\nUTC time is : %dy - %dm - %dd\n", UtcTime.year, UtcTime.month, UtcTime.date); 
printf("\nUTC time is : %dh - %dm : %ds\n", UtcTime.hour, UtcTime.minute, UtcTime.second); 
printf("++++++++++++++++++++++++++++++++++\n");
printf("\n");
printf("\n"); 
return 0;
}

timex_test2.h

#ifndef   __TIMEX_H_
#define   __TIMEX_H_

/*定义UTC时间结构体类型*/ 
typedef struct
{
int year; 
int month; 
int date; 
int hour;
int minute; 
int second;
} utc_t;

/*定义UNIX时间戳的起始UNIX时间*/
#define UNIX_TIME_YEAR	1970
#define UNIX_TIME_MONTH	1
#define UNIX_TIME_DATE	1
#define UNIX_TIME_HOUR	0
#define UNIX_TIME_MINIUTE	0
#define UNIX_TIME_SECOND	0
#define LEAP_YEAR	1
#define FLAT_YEAR

#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unix、UTC、GPS时间戳及转换 的相关文章

  • 什么是 POSIX 合规性以及它对我有何影响?

    我不断看到这个问题出现 每次我查找它时 我都无法很好地解释它是什么或它对我意味着什么 什么是 POSIX 合规性 假设我的程序仅在兼容 POSIX 的机器上运行 这对我作为程序员来说有何简化 甚至吗 POSIX http pubs open
  • 如何拆分一行并重新排列其元素?

    我在一行中有一些数据 如下所示 abc edf xyz rfg yeg udh 我想呈现如下数据 abc xyz yeg edf rfg udh 以便打印备用字段并用换行符分隔 有没有这样的衬里 下列awk脚本可以做到这一点 gt echo
  • CPAN shell 内存不足。在 Unix 上如何给它更多的内存?

    我得到一个Out of memory 所有安装的消息 我以前从未使用过 cpan 并且不太确定它是如何工作的 我做了一个ulimit在 cpan 目录中 结果是无限的 这是我正在看的内容 usr bin perl MCPAN e shell
  • 如何复制每个扩展名为 X 的文件,同时保留原始文件夹结构? (类Unix系统)

    我正在尝试将每个 HTML 文件从 src 文件夹复制到 dist 文件夹 但是 我想保留原始文件夹结构 如果 dist 文件夹不存在 我想创建一个新文件夹 如果文件夹不存在则创建 d dist mkdir dist 复制每个文件 cp R
  • linux下如何获取昨天和前天?

    我想在变量中获取 sysdate 1 和 sysdate 2 并回显它 我正在使用下面的查询 它将今天的日期作为输出 bin bash tm date Y d m echo tm 如何获取昨天和前天的日期 这是另一种方法 对于昨天来说 da
  • 使用 WGS84 椭球的距离

    考虑点 P1 60 N 20 E 0 和 P2 60 N 22 E 0 地球表面 当形状为 P1 和 P2 时 点 P1 和 P2 之间的最短距离是多少 地球是使用 WGS 84 椭球体建模的吗 不幸的是 文森蒂算法对于某些输入无法收敛 地
  • 设置 Pyenv 的路径

    我正在尝试在我的服务器中设置 Pyenv 的加载路径 bashrc file 我正在关注这个tutorial https realpython com intro to pyenv 它要求我们在哪里设置pyenv到加载路径 然而 在我的 b
  • 了解多个进程的并发文件写入

    从这里 UNIX 中文件追加是原子的吗 https stackoverflow com questions 1154446 is file append atomic in unix 考虑多个进程打开同一个文件并向其追加内容的情况 O AP
  • 如何找到特定路线上两点之间的距离?

    我正在为我的大学开发一个 Android 应用程序 可以帮助学生跟踪大学巴士的当前位置 并为他们提供巴士到达他们的预计时间 截至目前 我获取了公交车的当前位置 通过公交车上的设备 和学生的位置 我陷入了必须找到两个 GPS 坐标之间的距离的
  • SCP 权限被拒绝(公钥)。仅当在目录上使用 -r 标志时才在 EC2 上

    scp r Applications XAMPP htdocs keypairfile pem uploads ec2 user publicdns var www html 其中 uploads 是目录 返回权限被拒绝 公钥 Howeve
  • 抑制 makefile 中命令调用的回显?

    我为一个作业编写了一个程序 该程序应该将其输出打印到标准输出 分配规范需要创建一个 Makefile 当调用它时make run gt outputFile应该运行该程序并将输出写入一个文件 该文件的 SHA1 指纹与规范中给出的指纹相同
  • 如何在 shell 脚本中操作 $PATH 元素?

    有没有一种惯用的方法从类似 PATH 的 shell 变量中删除元素 这就是我想要的 PATH home joe bin usr local bin usr bin bin path to app bin and remove or rep
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • awk/Unix 分组依据

    有这个文本文件 name age joe 42 jim 20 bob 15 mike 24 mike 15 mike 54 bob 21 试图得到这个 计数 joe 1 jim 1 bob 2 mike 3 Thanks awk F NR
  • ssh远程变量赋值?

    以下内容对我不起作用 ssh email protected cdn cgi l email protection k 5 echo k 它只是返回一个空行 如何在远程会话 ssh 上分配变量 Note 我的问题是not关于如何将本地变量传
  • 是否可以创建一个脚本来保存和恢复权限?

    我正在使用 Linux 系统 需要对一组嵌套文件和目录进行一些权限实验 我想知道是否没有某种方法可以保存文件和目录的权限 而不保存文件本身 换句话说 我想保存权限 编辑一些文件 调整一些权限 然后将权限恢复到目录结构中 将更改的文件保留在适
  • 通过 sed 使用 unix 变量将数据附加到每行末尾[重复]

    这个问题在这里已经有答案了 我有一个文件 我想使用 SED 将值附加到每行末尾的 unix 变量中 我已经通过 AWK 实现了这一点 但我想在 SED 中实现 像这样的东西 我已经尝试过以下命令 但它不起作用 sed i s BATCH R
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • 在退出脚本之前等待后台进程完成

    在退出脚本 TCL Bash 之前 如何确保所有后台进程已完成执行 我正在考虑将所有后台进程 pid 写入 pid 文件 然后最后 pgrep pidfile 以查看在退出之前是否有任何进程仍在运行 有一些更简单的方法可以做到这一点吗 TC
  • Python 中的 datetime.fromtimestamp(os.path.getctime()) 是否为我提供了时区感知值?

    我在 Python 3 4 中使用这样的调用 x datetime fromtimestamp os path getctime somefilename y datetime fromtimestamp os path getmtime

随机推荐

  • srilm的安装与使用(标贝科技)

    欢迎体验标贝语音开放平台 地址 xff1a https ai data baker com source 61 qaz123 xff08 注 xff1a 填写邀请码hi25d7 xff0c 每日免费调用量还可以翻倍 xff09 一 简介 简
  • 信号强度(RSSI)知识整理

    为什么无线信号 xff08 RSSI xff09 是负值 答 xff1a 其实归根到底为什么接收的无线信号是负值 xff0c 这样子是不是容易理解多了 因为无线信号多为mW级别 xff0c 所以对它进行了极化 xff0c 转化为dBm而已
  • JLink 警告:The connected J-Link is defective,Proper operation cannot be guaranteed.

    概述 安装j link较新版本 xff08 JLink Windows V632b exe xff09 的驱动 xff0c 每烧录一次程序报一次警告 xff0c 警告如下 xff1a The connected J Link is defe
  • [PYTHON]修改当前进程环境变量

    myenv 61 os environ myenv 34 PATH 34 61 34 xxxx 34 43 myenv 34 PATH 34 注意 xff1a 此方法仅在python的当前进程中生效 xff0c 如果此时通过subproce
  • SO库版本号管理

    一 输入版本号 功能由Cmake软件实现 1 建立一个空白txt xff0c 重命名为config h in 输入代码 xff1a defineMAJOR VERSION 64 MAJOR VERSION 64 defineMINOR VE
  • VINS-MONO实践

    1 配置ros xff08 运行VINS需要 xff0c 记得换源 xff0c 会快一些 xff09 sudo apt get install ros melodic cv bridge ros melodic tf ros melodic
  • EuRoC数据集介绍

    数据集官网 xff1a https projects asl ethz ch datasets doku php id 61 kmavvisualinertialdatasets EuRoC数据集 微型飞行器 xff08 MAV xff09
  • TUM数据集

    TUM数据集下载链接 https vision in tum de data datasets rgbd dataset download https vision in tum de data datasets visual inerti
  • evo评测VINS-MONO---指标解析、算法精度分析(数据集)

    上篇博文已通过代码修改 数据格式转换 数据测试实现使用evo评测VINS MONO xff0c 该篇将详细介绍evo评测出的数据指标 xff0c 以及VINS MONO在数据集下的精度情况 EVO评价指标介绍 绝对轨迹误差 xff08 AT
  • ZED2相机说明书

    经前期调研及摄像头参数对比 xff0c 最终选择STEREOLABS公司的ZED2双目立体摄像头作为后期VINS系统的硬件平台 xff0c 下面先给出ZED2 的产品说明书 产品特点 1 空间目标检测 根据空间环境检测和跟踪对象 通过结合A
  • 解决NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver

    问题解决 终端输入 xff1a nvidia smi NVIDIA span class token operator span SMI has failed because it couldn span class token numbe
  • Mysql 事务(标贝科技)

    文章目录 事务InnoDB对ACID的支持隔离级别不同隔离级别下读读取数据可能出现的情况不可重复读和幻读区别 redo log xff08 共享表空间 xff09 redo log block刷redo log策略 xff1a innodb
  • Ubuntu20.04运行Vins-fusion

    因已安装ROS noetic xff0c eigen xff0c opencv及ceres等库 xff0c 这部分环境配置就不细讲 xff0c 直接下载VINS FUSION的代码库 下载编译 cd span class token ope
  • 坐标系之间的转换关系(ECEF、LLA、ENU)

    一 坐标系简介 1 ECEF坐标系 也叫地心地固直角坐标系 其原点为地球的质心 xff0c x轴延伸通过本初子午线 xff08 0度经度 xff09 和赤道 xff08 0deglatitude xff09 的交点 z轴延伸通过的北极 xf
  • Python画图常用的颜色及标识

    matplotlib中color可用的颜色 xff1a aliceblue F0F8FF antiquewhite FAEBD7 aqua 00FFFF aquamarine 7FFFD4 azure F0FFFF beige F5F5DC
  • .npy文件打开方式

    在用evo评测slam算法定位精度时 xff0c 使用 save results a zip 生成的结果中包含的 npy文件 xff0c 如果要查看里面详细的数值 xff0c 则可通过以下方式打开文件并查看 1 xff09 找到要查看的 n
  • IMU误差模型简介及VINS使用说明

    1 IMU误差来源 2 IMU噪声模型 Noise and Bias kalibr中的imu noise model 参考 xff1a https github com ethz asl kalibr wiki IMU Noise Mode
  • 泰勒公式(泰勒展开式)通俗介绍+本质详解

    比较通俗地讲解一下泰勒公式是什么 泰勒公式 xff0c 也称泰勒展开式 是用一个函数在某点的信息 xff0c 描述其附近取值的公式 如果函数足够平滑 xff0c 在已知函数在某一点的各阶导数值的情况下 xff0c 泰勒公式可以利用这些导数值
  • Leetcode ->94 二叉树的中序遍历

    题目 算法思路及代码实现 span class token macro property span class token directive hash span span class token directive keyword inc
  • Unix、UTC、GPS时间戳及转换

    UTC时间 UTC时间的英文全称 xff1a Universal Time Coordinated xff0c 中文名称 xff1a 协调世界时 俗的理解为 xff0c 这个时间是全世界通用的 xff0c 即全世界都公用的一个时间 可以认为