位置: IT常识 - 正文

自动驾驶中的时间同步方案(自动驾驶的时候可以睡觉吗)

编辑:rootadmin
自动驾驶中的时间同步方案

推荐整理分享自动驾驶中的时间同步方案(自动驾驶的时候可以睡觉吗),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:自动驾驶的时候识别的速度与实际的速度会相差30千米,自动驾驶的时延要求,自动驾驶的时候可以睡觉吗,自动驾驶的时候,手动打方向盘,自动驾驶的时候可以睡觉吗,自动驾驶中的时钟是什么,自动驾驶的时候可以玩手机吗,自动驾驶的时候可以玩手机吗,内容如对您有帮助,希望把文章链接给更多的朋友!

本文重点讨论自动驾驶中使用比较多的gps+pps+gpsd+chrony+ptpd+gptpd的时间同步方案,本文仅为自己在调试过程中的记录,如有不对地方欢迎讨论:853906167@qq.com

详细方案如下:Tbox端(IMX8系列)的ubxclient接收来自gps(如ublox系列)的GPS时间和PPS信号,Tbox端将接收到gps的NEMA/UBX消息通过udp转发给gpsd,然后chrony在结合gpsd的时间信息还有linux下的pps信息做时间同步和修正,后续Tbox作为server端通过ptpd给自动驾驶算力芯片(如nvida orin/xavier)做时间同步,然后自动驾驶算力芯片在通过gptpd给mcu/lidar等做时间同步,详细的框图如下:

 1.PPS信号处理

配置ublox芯片PPS信号输出频率1HZ,实测tbox端pps_in输入信号:

 从测试结果来看17次的脉冲信号周期为7.441s+9.564=17.005s,周期精度小于0.001s,精度比较高

linux 打开pps配置:

CONFIG_PPS=y CONFIG_PPS_DEBUG=n CONFIG_PPS_CLIENT_KTIMER=n      CONFIG_PPS_CLIENT_LDISC=n CONFIG_PPS_CLIENT_GPIO=y

note:如果ktimer/ldisc打开注意设备节点可能不一样,kernel log中可以看到具体对应的设备节点,我们这边ktimer/ldisc都没打开,pps_gpio节点是/dev/pps2,后续消除误差需要配置这个节点

dts配置:

pps_ubx{         compatible = "pps-gpio";         pinctrl-names = "default";         pinctrl-0 = <&pinctrl_pps>;         gpios = <&gpio4 2 GPIO_ACTIVE_HIGH>;         status = "okay";     };

kernel中pps处理相关代码:drivers/pps/clients/pps-gpio.c

linux默认已经在kernel代码中加入了pps的相关处理,重点为触发PPS的中断,本人的项目采用的是上升沿触发中断(因为ublox默认上升沿跟整秒对齐)

中断处理函数:

static irqreturn_t pps_gpio_irq_handler(int irq, void *data) {     const struct pps_gpio_device_data *info;     struct pps_event_time ts;     int rising_edge;

    /* Get the time stamp first */     pps_get_ts(&ts);                                          ----获取中断触发的时间信息,后续传给应用层

    info = data;

    rising_edge = gpio_get_value(info->gpio_pin);     if ((rising_edge && !info->assert_falling_edge) ||         (!rising_edge && info->assert_falling_edge))         pps_event(info->pps, &ts, PPS_CAPTUREASSERT, NULL);     else if (info->capture_clear &&              ((rising_edge && info->assert_falling_edge) ||               (!rising_edge && !info->assert_falling_edge)))         pps_event(info->pps, &ts, PPS_CAPTURECLEAR, NULL);

    return IRQ_HANDLED; }

pps_event:register a PPS event into the system,后续应用层可以获取pps触发的时间和序号等信息

详细pps相关请参考:PPS - Pulse Per Second — The Linux Kernel documentation

pps-tools:http://linuxpps.org , GitHub - redlab-i/pps-tools: User-space tools for LinuxPPS

ppstest/ppswatch使用(同步后的结果):

 2.GPSD部分

GPSD的启动配置:

/usr/sbin/gpsd -n -P /run/gpsd.pid -F /var/run/gpsd.sock udp://127.0.0.1:50000

-n                        don't wait for client connects to poll GPS  与chrony配合时候必选

-F sockfile               specify control socket location

udp://127.0.0.1:50000      接收ubxclientsocket发送的nema、ubx数据,也直接直接通过配置ublox的uart设备节点

相关工具使用:

cgps:

自动驾驶中的时间同步方案(自动驾驶的时候可以睡觉吗)

 note:通过图中的time/latitude/longitude等信息可以判定是否已经搜到星、获取到时间和定位信息,gpsd只有在获取到时间和定位信息后才能跟chrony配合同步时间消除pps误差

 3.Chrony部分

Chrony是NTP(Network Time Protocol,网络时间协议,服务器时间同步的一种协议)的另一种实现,与ntpd不同,它可以更快且更准确地同步系统时钟,最大程度的减少时间和频率误差,chrony是两个用来维持计算机系统时钟准确性的程序,这两个程序命名为chronyd和chronyc

chronyd为后台运行守护进程,用于同步系统时间

chronyc提供了一个用户界面,用于监测性能和配置

chrony+gpsd校准的原理:

gpsd从串口或者网络读取gnss数据并进行解析,将解析结果以UNIX socket或者共享内存等方式输出,chrony从UNIX socket或者共享内存取得解析后的gnss,和pps信息结合,校正系统时间

note:chrony校正的原则是通过控制时间的增减率来达到校正时间,较少采用跳变的方式,跳变的方式可能对其他应用有影响,这样可能会导致校正的比较慢点,但是如果偏差过大或者第一次校正也可以配置成有条件的跳变方式

note:chrony和ntp是冲突的不能同时存在,systemd启动配置的时候需要注意

chronyd配置文件/etc/chrony.conf

driftfile          chronyd程序的主要行为之一,就是根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中是最合理的,它会在重启后为系统时钟作出补偿,甚至可能的话,会从时钟服务器获得较好的估值

allow/deny    这里你可以指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器

makestep         通常,chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。在某些特定情况下,系统时钟可能会漂移过快,导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在调整期大于某个阀值时步进调整系统时钟,但只有在因为chronyd启动时间超过指定限制(可使用负值来禁用限制),没有更多时钟更新时才生效

rtcsync    启用内核模式,系统时间每11分钟会拷贝到实时时钟(RTC)

refclock        设置时钟源

note:详细完整的说明请查看chrony官方文档:chrony – chrony.conf(5)

chronyc sources -v 命令查看同步结果:

可以看到偏差大概在 125ns左右

相关说明:

M: 这表示信号源的模式。表示服务器,=表示对等方,#表示本地连接的参考时钟

S:此列指示源的状态

* 表示chronyd当前同步到的源

- 表示被合并算法排除的可接受源

+ 表示可接受的信号源,与选定的信号源组合在一起

? 指示已失去连接性或其数据包未通过所有测试的源。它也显示在启动时,直到从中至少收集了3个样本为止

x 表示chronyd认为是虚假行情的时钟(即,其时间与大多数其他来源不一致)

〜 表示时间似乎具有太多可变性的来源

Name/IP address:这显示了源的名称或IP地址,或参考时钟的参考ID

Stratum:这显示了来源的层,如其最近收到的样本中所报告的那样。层1表示一台具有本地连接的参考时钟的计算机。与第1层计算机同步的计算机位于第2层。与第2层计算机同步的计算机位于第3层,依此类推

Poll:这显示轮询源的速率,以秒为单位的时间间隔的以2为底的对数。因此,值为6表示每64秒进行一次测量。chronyd会根据当前情况自动更改轮询速率

Reach:这显示了源的可达性寄存器以八进制数字打印。寄存器有8位,并在每个从源接收或丢失的数据包上更新。值377表示从最后八次传输中收到了对所有用户的有效答复

LastRx:此列显示多长时间前从来源接收到了最后一个好的样本(在下一列中显示)。未通过某些测试的测量将被忽略。通常以秒为单位。字母m,h,d或y表示分钟,小时,天或年

Last sample:此列显示上次测量时本地时钟与源之间的偏移。方括号中的数字表示实际测得的偏移量。可以用ns(表示纳秒),us (表示微秒),ms(表示毫秒)或s(表示秒)作为后缀。方括号左侧的数字表示原始测量值,已调整为允许此后施加于本地时钟的任何摆度。+/-指示器后面的数字表示测量中的误差范围。正偏移表示本地时钟位于源时钟之前

参考文档:

GPSD Time Service HOWTO

chrony – chrony.conf(5)

本文链接地址:https://www.jiuchutong.com/zhishi/292359.html 转载请保留说明!

上一篇:Less预处理——混合方法(less预处理器详解)

下一篇:万字长文带你走进MySql优化(系统层面优化、软件层面优化、SQL层面优化)(万字短文)

  • php网页设计作业运营用户运营是指推动有效线索和交易转化的一系列动作

    php网页设计作业运营用户运营是指推动有效线索和交易转化的一系列动作

  • zao清晰度不足怎么办(清晰度不低于720p怎么设置)

    zao清晰度不足怎么办(清晰度不低于720p怎么设置)

  • 修改微信号为什么出现账号存在安全风险(修改微信号为什么显示已被使用)

    修改微信号为什么出现账号存在安全风险(修改微信号为什么显示已被使用)

  • 华为充电60后充不进(华为充电60后充不进强制充电)

    华为充电60后充不进(华为充电60后充不进强制充电)

  • 手机能给电脑装系统吗(手机能给电脑装系统软件)

    手机能给电脑装系统吗(手机能给电脑装系统软件)

  • ipadmini5长和宽(ipadmini5长和宽多少)

    ipadmini5长和宽(ipadmini5长和宽多少)

  • 笔记本电脑自身有网吗(笔记本电脑自身鼠标怎么使用)

    笔记本电脑自身有网吗(笔记本电脑自身鼠标怎么使用)

  • 淘宝二心升三心要多久(淘宝二心升三心要几单)

    淘宝二心升三心要多久(淘宝二心升三心要几单)

  • 标准页边距是多少(标准页边距设置多少合适)

    标准页边距是多少(标准页边距设置多少合适)

  • ios13单手模式怎么开(苹果13单手操作方便吗)

    ios13单手模式怎么开(苹果13单手操作方便吗)

  • 怎么把竖的视频横过来(怎么把竖的视频变成横的全屏的)

    怎么把竖的视频横过来(怎么把竖的视频变成横的全屏的)

  • 鼠标卡顿是怎么回事(鼠标卡顿怎么解决)

    鼠标卡顿是怎么回事(鼠标卡顿怎么解决)

  • 饿了么只能用支付宝付款吗(饿了么只能用支付宝吗)

    饿了么只能用支付宝付款吗(饿了么只能用支付宝吗)

  • qq上登录位置与实地不符(qq登录地点与当前不一致会被盗号吗)

    qq上登录位置与实地不符(qq登录地点与当前不一致会被盗号吗)

  • 怎样关联微信并同时收到信息(微信如何关联)

    怎样关联微信并同时收到信息(微信如何关联)

  • word文档只复制文字(Word文档只复制一页平板)

    word文档只复制文字(Word文档只复制一页平板)

  • flash崩溃怎么办(flash崩溃了怎么办)

    flash崩溃怎么办(flash崩溃了怎么办)

  • 手机耳机插电脑上能说话吗(手机耳机插电脑声音小怎么解决)

    手机耳机插电脑上能说话吗(手机耳机插电脑声音小怎么解决)

  • wegame怎么认证(wegame怎么进行身份验证)

    wegame怎么认证(wegame怎么进行身份验证)

  • 苹果11与苹果x的区别(苹果11跟苹果x)

    苹果11与苹果x的区别(苹果11跟苹果x)

  • 湖北电力微信公众号怎么加(湖北电力微信公众号)

    湖北电力微信公众号怎么加(湖北电力微信公众号)

  • 怎样拦截无主题短信(怎么拦截无主题的彩信)

    怎样拦截无主题短信(怎么拦截无主题的彩信)

  • 相机光圈的作用(相机光圈是干啥的)

    相机光圈的作用(相机光圈是干啥的)

  • 荣耀10nfc感应区在哪(荣耀10nfc感应区在哪里图解)

    荣耀10nfc感应区在哪(荣耀10nfc感应区在哪里图解)

  • 大二C#实现酒店管理系统(C端展示、前台操作、登记入住、入住管理、职位管理、公告系统等)(c语言设计酒店管理系统)

    大二C#实现酒店管理系统(C端展示、前台操作、登记入住、入住管理、职位管理、公告系统等)(c语言设计酒店管理系统)

  • “小三”英语怎么说?难道要说“little three”?!(小三用英语怎么写?)

    “小三”英语怎么说?难道要说“little three”?!(小三用英语怎么写?)

  • java反射的使用过程(java中反射)

    java反射的使用过程(java中反射)

  • 从香港向境外汇款怎么汇
  • 待抵扣进项税额转入进项税额
  • 航信金税盘时间校准
  • 注销银行帐户需要什么
  • 工资走公账和私账哪个好
  • 办公家具发票要交税吗?
  • 卷票发票校验码在哪里
  • 账户认证操作
  • 商贸企业加工费包括哪些
  • 收取违约金如何开具发票
  • 会计凭证 借贷
  • 公司贷款买车是公司还款吗
  • 淘汰生产母猪处理销售收入的分录怎么处理?
  • 按最低标准买社保30年退休后每个月领多少钱
  • 施工企业仪器设备入什么会计科目核算?
  • 房屋租赁合同印花
  • 差额征税扣除额大于收入时如何开票?
  • 增值税普通发票几个点
  • 金税盘要钱不
  • 电子税务局进项票汇总
  • 未结转是什么意思
  • 公司开业期间的费用入管理费用其他行吗
  • ukey抄报税全流程视频教程
  • 研发费用发票怎么入账
  • 供应商赠送的原材料怎么做分录
  • 农业自产自销如何认定
  • 办公家具折旧年限及计算方法
  • 电脑桌面图标如何更改自定义图片
  • 车辆购置税会计账务处理
  • win10wifi老是自动断开怎么回事
  • php中class用法
  • 股权无偿赠与协议书范本
  • 银行对公账户收款码手续费多少
  • 多台电脑如何共享一台惠普打印机
  • php获取get请求数据
  • php关闭错误报告
  • 抄税的步骤
  • webpack与gulp面试题
  • 禁用dos命令
  • 企业进行清算
  • 一般贸易和进料加工退税的区别
  • 进项税额计入其他流动资产
  • 电缆租赁发票开具属于什么项目
  • 单位代扣公积金是什么意思
  • 残保金的滞纳金怎么算
  • 进项税额转出会计分录
  • mongodb查询操作
  • 企业税预缴在哪里
  • 销售原材料的差价怎么算
  • 挂靠指的是什么意思?
  • 以前年度损益调整科目编码是多少
  • 为什么出口退税率低于适用税率
  • 未开票确认收入账务处理
  • 支付结算办法是部门规章吗
  • 开出发票上有折扣的怎么入账?
  • 进项增值税发票抵扣期限
  • 营业收入和利润的区别
  • 网上报税零申报流程演示2018
  • 税票是什么意思
  • 应付账款的贷方等于预收账款的借方
  • 计提的意义
  • 发现以前的账做错了
  • 新公司成立建账流程
  • mysql数据库技术介绍
  • sql动态表
  • fedora使用
  • win7系统关机很慢什么原因
  • win1020h2正式版
  • centos6.8升级centos7
  • win10无法启动安全服务中心怎么办
  • python中yield用法
  • 最新推荐美剧
  • nginx日志路径配置
  • Django中login_required装饰器的深入介绍
  • Node.js中的核心模块包括哪些内容?
  • career和calling的区别
  • 有隐藏项怎么复制
  • 2个月培训
  • 税收分类分级管理后如何开展风险管理
  • 四川税务2021
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设