知行合一2023

一.常见问题

1. 自我介绍【时长控制在2分钟左右,提项目可以提两个比较重要的,跟岗位相关的】

老师好,我是**,来自安徽,上一份工作是**担任自动驾驶高级测试工程师.工作主要分为

工作主要分为三方面,搭建数据triage团队,确定问题分析流程,制定问题分类规则,定期组织jira问题review,同步特定问题的分析方法。

发版,收集数据,点刹接管定义,分配,kaleido分析,jira,review

第二在临港robotaxi示范运营项目中驻场,功能性测试,对行人,红绿灯等功能实车测试,按照上研智联考牌标准开发测试用例集,

数据采集分类,用途,数据量核算,采集了什么数据,数采场景,法规,数采监控,数采记录

数据采集分类

根据研发阶段的不同,自动驾驶汽车数据采集可分为感知系统算法训练的数据采集、自动驾驶功能验证的数据采集、自动驾驶性能评价的数据采集及客诉问题的复现验证采集等

用途

算法训练,场景库构建管理,仿真测试

数据量核算

按照当前行业内较为先进的汽车数据采集设备来估算,一辆自动驾驶汽车

20秒4个G,每小时采集的数据量(每小时180个包,每天2160,每月6w包帧)可达720G按照每天采集里程500 km,每天12 h采集时长(白天8 h+晚上4 h)进行测算。那么,整个数据的采集量将高达到8.4B。早8晚10,扣除休息时间。一个司机天天跑,周末会轮换。

感知20hz,每秒抽1帧,20分之一的有效数据

自动驾驶汽车数据安全采集了什么数据

自动驾驶汽车数据采集的数据类型可以分为五类,即:基本属性数据、环境感知数据、运行控制数据、应用服务数据以及用户个人数据。其中,环境感知数据中包含了车辆道路实时采集的目标物数据,如行人、车辆、车牌、建筑物及道路交通状况的数据。这部分数据涉及到我国国家安全信息,如军事管理区、国防科工等涉密单位、党政机关等重要敏感区域的数据信息等,所以,对于这部分数据的采集需要严格按照国家测绘相关法律法规来监管执行。

另外,对于涉及到的人脸面部特征信息、用户车牌信息、车辆位置信息、驾乘习惯等个人用户隐私数据,需要按照《中华人民共和国个人信息保护法》相关规定进行数据脱敏处理。因此,数据安全管控问题已经成为了当前自动驾驶汽车数据采集领域中越来越重要的议题。

数采场景

时间

最少小车数

最少大车数

最少人数

最少二轮车数

天气

场景

自车姿态

总数

白天

5

5

5

5

晴天

城市道路

左右变道

10000帧

夜晚

3

3

3

阴天

十字路口

左右转弯

需要采5天

雨天

s型路线

掉头

环岛

专项,红绿灯,公交车,工程车,行人,二轮车,三轮车,维修路段,交通锥,下匝道

数据采集、数据存储、数据处理、数据传输、数据挖掘、数据分析、数据应用等贯穿着整个自动驾驶系统开发的全过程

法规 深圳经济特区智能网联汽车管理条例

根据国家《网络安全法》、参照国家《个人信息保护法(草案)》、《数据安全法(草案)》等相关规定,借鉴发达国家和地区在车联网环境下网络安全和数据保护的经验,《征求意见稿》对智能网联汽车相关企业的网络及数据安全保护责任及义务作出了规范:

一是规定智能网联汽车相关企业应当依法建立网络安全评估及管理机制,防止网络数据泄露和被窃取、篡改,维护网络数据的完整性、安全性、保密性和可用性。

二是规定相关企业应当依照国家相关规定,采取措施防止用户个人信息的泄露、丢失、损毁,并制定数据安全及隐私保护方案。

三是禁止非法收集、处理、利用个人隐私、信息,禁止非法采集涉及国家安全的数据。

知行合一2023_第1张图片

制定测试工作目标,避免无计划工作,分解某个人测试任务,带着问题上车调试

汇总测试问题经验,输出测试问题排查手册

负责路口直行功能测试,包括信号灯路口与行人冲突,信号灯路口与机动车冲突,信号灯路口与非机动车冲突等专项测试

负责变更车道测试,包括避让静止障碍物变道和避让低速车辆变道专项测试

负责进站停车功能测试,包括站内有车辆和无车辆专项测试

负责编写对应测试用例和执行十车测试,并且记录实车测试问题和分析问题数据,利用jira记录反馈问题

GB智能网联汽车 自动驾驶功能场地试验方法及要求

自动驾驶车辆道路测试能力评估内容与方法(中关村团标)

自动驾驶出租汽车第 1 部分:车辆运营技术要求(中国智能交通产业联盟)

上研智联考牌标准(申请无人驾驶路测牌照)

第三

开发自动化测试工具自动上传数据自动化分析障碍物感知预测结果合理性工具,远程监控,自动化评价体感工具,专享司机百公里急刹大概10次,我司30次,接管百公里3.5感知仿真测试和kpi评价

上一份工作是在北京主线科技,宁波港智慧码头项目,负责新同学入职培训熟悉自动驾驶系统,从项目落地到研发交付全流程参与,后期按照合同进行功能性验收,与港口协调测试资源,完成验收

主机厂利用丰富的车辆量产经验生产Robotaxi,把控其安全性和运行的稳定性;自动驾驶技术公司专注于提供Robotaxi的自动驾驶软硬件解决方案,并且帮助主机厂在生产端进行软硬件前装或后装

  1. 1.更新智驾软件

  1. 2.启动智驾程序及准备辅助工具

  1. 3.增加规划点位

  1. 4.修改限速

  1. 5.改变录制时间

  1. 6.更新kaleido

  1. 7.检查docker版本

  1. 8.检查时间同步设置

2. 说说对公司的认识?为什么选择投递公司?为什么选择这个岗位?平时用什么语言?【先上公司官网了解下相关的车型】

和物流公司合作

知行合一2023_第2张图片

知行合一2023_第3张图片

那自动驾驶企业做干线物流运营具体有哪些好处呢?

第一,可以慢慢积累运营数据,发现运营中存在的一些corner case,然后不断地优化算法。

第二,在客户为自动驾驶系统买单意愿不强烈的前提下,自动驾驶公司只能先通过运营获得持续的现金流收入,然后不断扩大运营车辆的规模,再去获取更多的数据来训练自己的算法

问题:

但是,市场上大部分传感器感知距离达不到500米,比如半固态激光雷达最远或许可达150米、摄像头一般为300米内,若需要达到500米可能就需要长焦摄像头。即使摄像头能够覆盖500米的感知范围,它的分辨率也不会高,看到的景象也会不清晰。

对此,韩坪良补充道:“这并不是单个摄像头就可以实现的,智加是通过多组摄像头来感知不同的距离段,然后用融合的方式来呈现近处和远处的景象。”

在自动驾驶芯片领域,国产芯片公司面临巨大机会。

一家国产创业公司名为辉羲智能,该公司对外宣称是“全球天使轮估值最高的汽车芯片公司”。

我十分看好贵公司所在的行业,我认为贵公司十分重视人才,而且这项工作很适合我,这项工作要求的许多技能都是我擅长的。举例来说,分析问题和解决问题是我的强项,在以前的工作中我能比别人更早发现和解决问题,同时这也是缺点之一,会花时间去细致的分析研究一个问题是如何产生大的,场景是否常见

和研发讨论是否可以解决,再就是利用数据驱动产品优化,主观评价自动驾驶系统没有数据支撑无法量化,那么就用数据可视化展示,例如评价感知新模型输出消息是否稳定,录制bao,解析频率,再可视化展示,计算频率降低的概率

买早餐的不一定赚钱,但是卖原材料的一定赚钱

徐宁仪,三清,曾任微软亚洲研究院硬件计算组负责人、百度智能芯片部主任架构师以及商汤阵量智能CEO,数据闭环定义芯片

2017 - 2018年间主导的百度昆仑AI芯片,是中国第一款云端全功能人工智能芯片、首次在工业领域大规模应用的中国自研AI芯片

辉羲智能通过ISO 26262 ASIL D功能安全流程认证

辉羲智能致力打造创新车载智能计算平台,提供高阶智能驾驶芯片、易用开放工具链及全栈自动驾驶解决方案,

助力车企实现优质高效的自动驾驶量产交付,构建低成本、大规模和自动化迭代能力,

引领数据驱动时代的高阶智慧出行。

作为新型基础设施建设者,辉羲智能创导“数据闭环定义芯片”方法学,依托高性能低功耗的自动驾驶芯片底座,

与客户和合作伙伴共建硅上超级数据闭环,持续助推行业标准、赋能产业生态,

让更多创新企业和广大消费者受益。

蔚来也在评估地平线的大算力芯片征程5,如果进展顺利,征程5将有可能在2023年第四季度在蔚来旗下车型上量产。

公开消息还显示,地平线征程5已签下比亚迪、自游家等多家车企的量产定

蔚来资本还投资了黑芝麻智能科技,黑芝麻也在研发用于自动驾驶的大算力芯片。黑芝麻的华山二号A1000将在今年装车量产

2022年,英伟达的大算力芯片Orin几乎席卷了国内各个智能电动车品牌的旗舰车型,蔚来ET7/ET5,小鹏G9、理想L9、智己L7、飞凡R7、威马M7、路特斯Eletre、高合HiPhi Z等无不采用了英伟达Orin,大算力芯片上车的浪潮也就此开启。

在这些旗舰车型交付之后,大算力芯片也将随着高阶智能驾驶系统的普及大规模上车。尽管面临英伟达、Mobileye、高通等传统大厂的正面竞争,国产大算力芯片正迎来最好的时候

制定测试工作目标,避免无计划工作,分解某个人测试任务,带着问题上车调试

汇总测试问题经验,输出测试问题排查手册

L3+L4的好处:实现一个技术迭代

举例而言,未来的路线图:“量产乘用车,面向个人用户,都会有 L3 以上的自动驾驶系统,可以支持高速、城区、泊车场景;商用车领域,都是 L4 的无人出租或无人卡车”

L3更加贴近实际的应用场景。一是产品工程的左拳,做落地优先、量产优先的L2/L3产品;二是产品研发的右拳,做完善功能、极致性能的L4研发

L3烧钱稍微少一些,嫁接汽车OEM,路测不需要大量的买车开支和

在节省钱和资源的前提下,获得更多可用的数据。

L4自动驾驶,尤其是载人,需要大规模落地车队进行路测,获取数据,优化系统,再在各个城市退出试运营。直接L4的话,需要大量烧钱造自有车队,每辆车需要上百万人民币,自有车队顶多配置几十、几百辆,特别土豪也只能几千、几万辆——即使这样,数据量还是不够。所以必须量产。量产的自动驾驶车辆在行驶中会产生各种数据,发现各种少见的交通情况,让我们了解这些情况下人类司机如何应对——这才能使L4成为可能。很长一段时间,量产自动驾驶都将是人车共驾形态,可能是二十年,可能是更长时间。

因此,嫁接OEM,做“前装量产”的自动驾驶解决方案,不需要买车。落实泊车、高速公路和城区等场景下的自动驾驶功能,则可以获得最大规模的数据,节省路测成本。

L4由于不同地区法律法规的限制条件,有所谓的“Geofencing”

也就是说,L4应用场景只能做“在一定区域内(通常是较远的郊区),在一定速度限制下的,有安全员的自动驾驶”。这也就是说,你虽然技术上领先,但是你应用上是残废的。还是很遥远。

就是其实对于commercial vehicle其实直接L4可能更好(TuSimple已验证),对于乘用车,由于需要,技术迭代,而且由OEM主导,因此先L3再L4可能更好

知行合一2023_第4张图片

智行者在聚焦无人驾驶大脑的同时,按照客户需求将无人驾驶的商业化落地分为三步。第一层次是基础需求,保证人的生命安全是不惜代价的,比如消防、安防及特种车辆。第二个层次是生活需求,把人从繁重、重复的劳动中解放出来,类似环卫、清洁、物流车;第三个层次是精神需求,包括robotaxi、robobus,对用户而言是满足精神层面的需求,这是面向未来的需求,智行者有所布局,但现在还不是其发展重点。

智行者

2015年成立,是中国成立最早的无人驾驶公司

“无人驾驶大脑提供商”,而这个无人驾驶大脑是既包含了硬件解决方案(域控制器)又包含了软件解决方案(感知、定位、决策、规划、控制等算法

智能出行

智行者无人驾驶大脑IDRIVERBRAIN已成功赋能robotaxi、robobus、无人接驳车等多款L4级自动驾驶乘用车,并已在北京、苏州、武汉、成都等地落地应用。

智慧生活

搭载智行者无人驾驶大脑IDRIVERBRAIN的环卫、物流等场景车辆已实现商业化落地,成为园区、商场、医院、火车站、机场等场景的清洁、物流主力军。

特种应用

智行者无人驾驶大脑IDRIVERBRAIN被创新应用于特种领域,已成功打造无人安防车、无人巡逻车、无人驾驶物资车等多款车型,并已在高速巡逻等场景实现规模化落地。

  1. 装车手册

  1. 软件发版部署流程

  1. 实车测试流程计划,用例编写

  1. 数据分析流程

  1. 问题排查手册

  1. 怎么开展功能测试

行人测试

行人可能出现的场景分为

路口: 自车直行,行人按照不同速度闯过斑马线

自车左右转弯,行人按照不同速度闯过斑马线

直行 自车直行,行人同向在车道左中右三个位置同向行走

自车直行,行人逆向在车道左中右三个位置逆向行走

结果:感知稳定识别行人,且自车平稳刹车礼让

红绿灯:

路口:自车直行,红黄绿

自车左右转,红黄绿

红绿灯被大车遮挡

结果:红灯停,绿灯行,且刹车不超过-2m/s2,jerk -4

感知稳定检测,不漏检误检

起步:

路侧停车起步

左侧非机动车或行人或机动车起步

结果:

感知正常稳定检测到障碍物,预测线正常,

安全时起步无顿挫

  1. triage流程细节

自动驾驶路测试过程会产生非常多的数据,其中一部分时问题数据。云骥车端会自动录制点刹和接管及变道等数据

点刹的定义为加速度小于-2m/s2,jerk小于-4

接管定义: 踩刹车接管,方向盘接管,踩油门接管

变道定义:地图导航变道,主动变道,绕障变道,横向nudge

triage的流程可以大致分为:

数据收集,数据上传,数据分配,数据分析,数据分类报告,triage复盘review

从0到1和同事一起建立问题分类规则。主要包括感知,预测,规控

感知细节: 目标类型,大车,小车,行人,二轮车,

检测是否稳定,是否漏检,是否误检

检测信息是否正常,包括,heading,speed,位置等等,类型,box大小

预测细节: 车辆类型,预测cuting是否消极或激进,预测线是否正常

预测速度是否正常

规控细节: 分为决策 mapchage,active_chage,nudge,siade_pass

激进,消极,中止,误触发,不触发,触发过晚

follow,yeild,stop 过猛,过轻,过晚,不触发,误触发

贡献:

测试报告包括

重点高频问题:斑马线行人博弈,感知对行人误检漏检,速度检测错误,预测对低俗0.5一下无预测线,planning决策问题,已解决问题红绿灯检测不稳定,跟车急刹,新出现问题

和pm及各研发模块统一问题分类规则和tag标签,减少沟通成本,

原始问题数据量较为庞大,同类型问题点刹假设有100个全部丢给研发,研发需要再分类和查看定位较为麻烦,分类过滤方便快速定位问题

评价问题已解决:

每月两个大版本,前半月new功能,后半月bugfix,在多地进行为期两天到三天早中晚的路测,形成大概1500公里,500个问题数据,其中80个接管,triage‘分析归纳汇总后,和前两版报告进行对比,发现问题未复线,则认为问题已修复。

问题分类规则:

临港站点连通性测试,临港运营,20个站点,320条小路线,评估自动驾驶连通,掉头转弯,绕路

开发特定场景仿真用例集

无保护直行在路口,行人闯红灯,二轮车,对向机动车左转等场景,其中一些难以在路测过程中复现,但确实为严重问题,所以开发特定用例集

仿真测试:

数据直值标注,数据回灌,感知结果kpi对比评价

感知仿真用例开发

类型

新增/修改点

车辆

heading:

  • 跟真值的误差±5°

  • 跟真值的标准差<阈值

center_distance:

  • 中心点的距离误差<0.5m

  • 中心点的标准差<阈值

collision_surface_distance:

  • 碰撞面的距离误差<0.5m

  • 碰撞面的标准差<阈值

speed:

  • 绝对速度误差<0.5m/s

  • 绝对速度的标准差<阈值

行人(单个行人)

heading:

  • 跟真值的误差±30°

  • 跟真值的标准差<阈值

speed:

  • 绝对速度误差<0.5m/s

  • 绝对速度的标准差<阈值

obstacle

Obstacle

对于在路测中引起接管/点刹的点,如速度不对、heading抖动,误检等,检查目标车辆/行人的速度,heading,类型识别等在某个时间段是否正确或是否在合理的范围,90%正确即为pass

TL

从检测到红绿灯开始,对应红绿灯颜色识别正确且blink状态正确,持续的时间内检测帧数的90%正确即为pass

1.基于对关键目标标注的真值,20帧对每个bag评测平均帧率在阈值范围内(±10%)、heading连续两帧的最大差值以及heading的误差标准差在阈值范围内&speed的最大差值以及speed的误差标准差在阈值范围内&中心点的最大位置偏差以及中心点的误差标准差&碰撞面的最大位置偏差以及碰撞面的误差标准差在阈值范围内,目前每个case设置了不同的阈值,后期所有case可设置相同的阈值,以上均满足判定为pass,否则fail。

对于目标误检,在原误检位置设置一个中心点以及较小半径,在此范围内无目标时判定pass,否则fail。

  1. 基于版本或分支统计测试集中所有case的专项性能指标,对比不同版本下的指标趋势,在autobot上展示,包括测试集所有case中所有帧的heading的误差均值,speed误差均值,中心点距离误差均值,碰撞面距离误差均值,定性的对比不同版本的误差变化。后续也可以根据场景tag,类型tag分别统计。

目标类型(小车,工程车,bus,行人,二轮车)

目标信息(box,heading)

和自车相对位置,前后左右

时间同步,标注为20帧,输出也为20帧

红绿灯测试用例

白天夜晚,强光暗光,顺光逆光

红绿黄,闪烁

左转右转,直行

是否被遮挡

预测仿真测试

Prediction离线评测内容,主要包括ADE/FDE性能指标是否超限,heading是否异常,帧率是否异常

A表示平均,F表示终点,DE表示预测坐标(x,y)和真值坐标(x,y)的欧式距离(直线距离),d横向差值,s纵向差值

ADE = 轨迹的平均 DE

FDE = 轨迹的终点 DE

ADE_s = 轨迹的平均 DE_s

ADE_d = 轨迹的平均 DE_d

FDE_s = 轨迹的终点 DE_s

FDE_d = 轨迹的终点 DE_d

传感器标定

传感器介绍:

传感器

数量

备注

摄像头

7

前向x2,侧前向x2,侧后向x2,后向x1

主激光雷达

1

安装在车顶居中

补盲激光雷达

3

侧边补盲x2,前向补盲x1

前向固态激光雷达

1

安装在车顶

毫米波雷达

5

前向雷达和四角雷达

组合惯导

1

精确物理安装。可以明确其在车辆坐标系下的位姿。

RTK天线

2

车顶主雷达两侧

内参

传感器

内参

摄像头

焦距,畸变系数等

激光雷达

每个channel的角度偏移量,firing time等

毫米波雷达

天线板与产品外壳之间的夹角等

惯导

零偏,尺度,xyz轴夹角,加速度计陀螺仪坐标系相对变换等

Camera 内参标定现在是使用开源工具 Kalibr

每一个摄像头的内参单独标定。

主要分三个步骤:

  1. 录制meta_bag数据包

  1. 转换为rosbag数据包

  1. 运行kalibr标定程序,获取参数。

录制时录制内容要求:

  1. 标定板的角点能够在图像中清晰显示。

  1. 标定板覆盖图像至少1/5区域。不到1/5的话,覆盖尽量多的区域。

  1. 图像分成9分。标定板需要在每个格子都出现。

  1. 每个格子里,标定板需要8-12个姿态。

结果解析

Kalibr标定完成后,会生成report.pdf文件:

  • 若右侧reprojection error分布控制在1以内,为可接受;控制在0.2以内,为精准标定

  • 左侧图示为Kalibr算法捕捉到的可用画面,其覆盖面越广、方格块越多,则数据质量越高,对应标定效果越好

  • report文件不仅反映本次标定质量,更为后续标定质量提升提供参考, 例如:放慢移速,多停顿,尽量让板出现在画面每一处等

相机to lidar 外参标定

标定流程:

  1. 录制meta_bag数据

  1. 转换为rosbag 数据

  1. 使用autoware,获取参数。

每个摄像头和主激光雷达单独标定。

录制时录制内容要求:

  1. 标定板需要出现在主lidar的密集区

  1. 标定板尽量覆盖图像视野范围内激光雷达密集线的区域

  1. 标定板离主lidar至少有两种不同的距离

  1. 标定过程需要不断的手动把camera图像中的标定板角点和lidar点云中标定板的角点位置圈出来对应起来。

知行合一2023_第5张图片

雷达to雷达

标定流程:

  1. 测量车的左右轮胎的距离,调整限位杆的宽度。将车停进限位杆内。

  1. 所有激光雷达收集数据,采集标定间的点云。

每个激光雷达单独标定。将激光雷达扫描得到的点云与房间3D点云之间进行ICP(Iterative Closest Point,迭代最近点)匹配,得到每个激光雷达相对于房间坐标系的位姿。这样也可以找到每两个激光雷达之间的相对位姿。

3. 简历上的项目,会问得很细很细。项目亮点在哪里?曾经遇到的困难,是怎么解决的?曾经失败过的经历?最有成就感的项目?项目用到的算法,场景。项目深度,使用的算法有没有想过改进或者优化。【面试前一定要在心里多过几遍项目

数采监控平台,安全员采集数据时无法查看自动驾驶系统状态,需要公司专人远程监控,所以利用python加ssh远程监控系统状态,避免系统掉线采集错误数据

自动化分析数据工具,数据量大,人工分析量较少,自动化解析bag按照规则提取关键信息,例如提取造成点刹的障碍物id和引起问题时间,提高分析效率

仿真测试,

模型更新,bugfix,新功能,集成测试,时延

例如跟车时对前车检测速度朝向角位置等等,大数据团队标注目标信息,可以利用logsim提取仿真信息,灌入新版本,查看仿真kpi评价,包括平均检测和真值误差,满足条件则通过,

无人驾驶系统方案的解决,包括tos调度系统,无人驾驶水平运输,自动化设备对接的等,极大提高安全性和提升经济效益

困难: 功能版本未稳定性测试完成就全部部署,结果导致启动失败,而当天需要整编作业,我对美一个版本都有记录和说明,及时回退版本并简略测调试稳定,随即车队回退保证运行需求,至此每个版本都有单车调试,稳定性调试,再多车一周稳定性调试,再整体部署

功能开发涉及到多模块合作,但是内部未协调一致导致版本不兼容,我整理好各方进度,梳理各方在实测中的问题,及时同步和各方联调,保证程序稳定统一,及时按照进度完成调试和发版

2.1 认真研究职务说明书

一定要理解自己准备应聘工作的内容和要求,认真地研究用人单位招聘时提供的职务说明,那短短的几行字里面包涵了大量的信息,尤其是高级职位,用人单位肯定会慎重对待,在职务要求罗列很多条款,每一条都反应了用人单位的用人倾向和目标。

2.2 浏览公司网站了解公司背景

应聘之前一定要花时间了解用人公司的背景,通过互联网或者其他渠道尽可能地搜集对方公司的相关信息,会在你面试时用上这些资料的。而且对目标公司的充分了解也会大大增加你的竞争力。

2.4 准备例证资料

针对你个人的经验、素质和特点准备相关的例证资料,比如参加的活动、参与的计划、取得的工作成就、曾经遇到的错误、改正方法和结果等,让事实说话。

3.1 你最喜欢目前工作的哪些部分?最讨厌哪些部分?

在主线科技作为测试开发工程师稳定工作很好成就感,从车辆走直线都不行,到不断更新功能,软件调试到自动驾驶,但是个人能力提升到了瓶颈,我想要接触新的知识架构,贵公司的工作方向和我十分吻合,可以给我提供极大的发挥空间,我也希望利用我的工作经验能够为公司添砖加瓦

3.2 目前你工作上最大的挑战是什么?你是如何应对的?

在主线测试测试开发工程师三年多,熟悉整个系统架构,和测试流程,及掌握了测试方法,但是这也使我进入一个瓶颈期,我希望可以在贵司接触行业最新知识

3.3 对新的职务你最想做怎样的贡献?

无人驾驶测试经验丰富,可以快速掌握贵司的测试流程,尽快适应贵司的工作节奏,同时我在港口集卡自动驾驶和贵司小车自动驾驶解决方案略有区别,两种方案碰撞或许有新的火花

3.4 你为什么现在想换工作?

瓶颈期 学习新知识,项目经验丰富

3.5 你认为你凭什么会令我高兴地接受你来工作?

“从我在云骥和主线公司的工作可以看出,我是一个主动而敢于承担责任的人,我勤奋、刻苦,无人驾驶测试经验,在测试团队建设方面有着成功经验,刚好可以帮助贵公司加快新产品研发的进度。”

我很期待与一个专业团队共事的机会,协助yy公司达成它的战略目标。”

3.6 你的职责、工作成就和你的职业生涯规划有何关系?

又是“职业生涯规划”?没错,好的公司都希望了解你个人的职业生涯规划,你对目前自己发展状况的评估,你认为还有哪些目标没有达到,你打算怎么做。因此,你必须首先介绍自己的职业目标,按后分析你自己准备完成上述事业目标的方法,并且针对目前的进展进行讨论。

最后,讨论你目前的计划,解释你计划进入新公司的原因。

3.7 你最突出的工作成就是什么?

开发工具,搭建triage分析流程

完成宁波港自动化项目的三期验收,负责了传感器标定,带领测试团队完成功能测试,负责空箱场自动化方案制定,编写接口协议,开发调试等对接港口完成了交付验收

天津港自动化项目,测试同学入职培训,功能性调试,常态化运营

3.8 你下一阶段的事业目标是什么?

你希望继续提升专业能力;你希望有机会为一家能够善用你专长的公司创造更多价值;你非常想提升个人能力,并愿意接受更多挑战。软件测试经验,小车自动驾驶方案

3.10 描述你在工作中做过的最困难的决定,还有你从中学到什么?

这个问题事实上是看你如何来定义“困难”,你如何处理这种特殊情况,以及你如何吸取经验用到未来的工作中的。你必须事先准备好一、两个事件来回答这个问题,这些事件必须是真正很困难和棘手,才能很好的说明你的能力。比如,用你曾经遇到的商业风险,或者为了保护公司利益和战略而裁剪一个员工甚至团队等。你必须表现出自己对每个人的关心,同时强调你仔细分析过问题后才本着公司利益优先的原则做出决定。

3.11 告诉我你曾参与的一个重要项目。告诉我你曾为公司提出并且产生重大影响的方法或计划的创意。请以一个活动为例,说明你如何管理领导能力,如何展现领导技巧。

制定车队运营管理计划,协调测试与安全员遵守无人驾驶测试操作守则,

版本控制混乱,制定发版规则,单车调试,多车稳定性调试,再是发版上线

制定测试工作目标,避免无计划工作,分解某个人测试任务,带着问题上车调试

汇总测试问题经验,输出测试问题排查手册

3.12 你对以前的公司将产生怎样的后续影响?别人会如何记忆你?

测试标准化流程,可以快速定位解决问题,

工作采取合作共赢的方式尊重别人,是一个可以信赖的伙伴

3.13 如果我咨询你的上司,你认为他/她会怎么跟我谈你?

工作认真负责,做事有计划和条理,可以为工作来制定符合实际的流程

4 应聘着应该提出的问题

提出你自己的问题,会让自己更主动,更能表达自己的主见和能力。建议你提以下五个相关问题:

4.1 这份工作有何前景?

简单来说,我如果干好了,是否会升官、加薪、调迁或者其他?从问题的答案可以看出这份工作在新公司中所占的地位。如果没有令人信服的答案,那么就说明新公司要么不知道怎么回答,要么根本不在乎这个问题。如果公司没有为这个职位做前景规划,也就可以肯定这是个辅助岗位,也可能是个临时岗位,解决完问题,也就没有再存在的必要了。还有一种可能就是这家公司太混乱,根本就没有任何规划。

4.2 这一职务如何影响公司的战略目标?

公司应该能简要说明经营目标以及职位与公司目标的关系。尽可能询问,究竟公司是把这份职务视为核心规划还是一个辅助职位?为什么公司不从内部提拔,而要外聘?还有就是公司哪些人肯定这份职务的必要性和重要性?

4.3 公司期望这个职务达成怎样的目标?

一定要弄清楚目标,才能表达自己对待问题的态度。

4.4 公司目前内部重大问题是什么?

这个问题可以来试探公司内部是否存在麻烦,也可以说是在了解潜在的机遇。

4.5 您认为像我这样背景和经验的人,能为这个职务带来什么利益?

这个问题是直接探听面试结果的高级问法,而且绝对不会被拒绝。你要在面谈结束时再问,可以了解面试官对你的看法。当然也不要期待会有完全坦白的回答,因为面试官还需要时间考虑和比较。如果你就是最佳人选或者没有竞争者,那么你很可能会听到非常正面的评语,甚至是直接劝进的态度

二.测试体系流程

仿真平台,各模块好工具和分析问题逻辑,例如感知预测解析数据远程监控平台,数据可视化工具量化分析

2.1软件测试流程

知行合一2023_第6张图片
知行合一2023_第7张图片

2.1.1 jira问题记录

jira信息包括:

标题: 问题分析结论为标题,例perception/truck/attribute/heading/wrong_heading

优先级 : 致命的, 严重的,一般的,微小的

模块:感知,预测,planning,控制,地图,系统

测试地点,软件版本,bag链接,问题场景分类,分析过程截图

Bug的生命周期

新建,提交,确认,分配,修复,验证,关闭

缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程

1) 测试人员或开发人员发现bug后,判断属于哪个模块的问题,填写bug报告后,系统会自动通过Email通知项目组长或直接通知开发者。

2) 经验证无误后,修改状态为VERIFIED(已证实).待整个产品发布后,修改为CLOSED(关闭)

3) 还有问题,REOPENED(重新打开),状态重新变为“New",并发邮件通知。

4) 项目组长根据具体情况,重新分配给bug所属的开发者。

5) 若是,进行处理,断言并给出解决方法。(可创建补丁附件及补充说明)

6) 开发者收到Email信息后,判断是否为自己的修改范围。

7) 若不是,重新分配给项目组长或应该分配的开发者。

8) 测试人员查询开发者已修改的bug,进行重新测试。确认无误后,关闭该bug。

软件缺陷等级划分

致命的:致命的错误,造成系统或应用程序崩溃、死机、系统悬挂,或造成数据丢失、主要功能完全丧失等。

严重的:严重错误,指功能或特性没有实现,主要功能部分丧失,次要功能完全丧失,或致命的错误声明。

一般的:不太严重的错误,这样的软件缺陷虽然不影响系统的基本使用,但没有很好地实现功能,没有达到预期效果。如次要功能丧失,提示信息不太准确,或用户界面差,操作时间长等。

微小的:一些小问题,对功能几乎没有影响,产品及属性仍可使用,如有个别错别字、文字排列不整齐等。

2.2实车测试流程

知行合一2023_第8张图片
知行合一2023_第9张图片

2.3Logsim流程

知行合一2023_第10张图片

感知仿真用例开发

目标类型(小车,工程车,bus,行人,二轮车)

目标信息(box,heading,speed)

和自车相对位置,前后左右

红绿灯测试用例

白天夜晚,强光暗光,顺光逆光

红绿黄,闪烁

左转右转,直行

是否被遮挡

预测仿真测试

Prediction离线评测内容,主要包括ADE/FDE性能指标是否超限,heading是否异常,帧率是否异常

A表示平均,F表示终点,DE表示预测坐标(x,y)和真值坐标(x,y)的欧式距离(直线距离),d横向差值,s纵向差值

ADE = 轨迹的平均 DE

FDE = 轨迹的终点 DE

ADE_s = 轨迹的平均 DE_s

ADE_d = 轨迹的平均 DE_d

FDE_s = 轨迹的终点 DE_s

FDE_d = 轨迹的终点 DE_d

知行合一2023_第11张图片

2.4仿真测试

场景要素

知行合一2023_第12张图片
知行合一2023_第13张图片

2.5测试体系之问题分类概述

Issue Triage Document

大多数问题/案例是因为自动驾驶汽车的表现没有达到预期,例如制动过猛、制动不足、异常状况接管、起步不走、模块检测异常。

然而,当我们需要找到问题的根本原因时,我们不能仅通过表面现象来定位下游模块(规划或控制)的问题,而是需要严格从上游模块(传感器或感知或预测)到下游模块(规划或控制)逐步定位问题。

  1. 定位问题发生时间点:

  1. auto trigger数据:往往在第10s达到auto trigger的条件,若为了快速triage可以直接定位至第8~12s的时间区间去review数据;

  1. PnC bag包或其他数据:通过check加速度(accleration reference)的变化,当acc短时间内下降较大(即纵向jerk值较大),则一定存在体感不适,即问题结果;

  1. 其他数据:当有不同的测试目的,如check traffic light detection或map info,则适当调整;

  1. 定位问题发生的原因时间点:

  1. 往往导致重刹的问题发生的原因出现在重刹产生的前几帧,即一定是在减速度规划的前几帧,需要严格放慢速度逐帧排查问题;

  1. 往往导致接管的问题发生的原因存在多个原因,且在时间上不会很接近接管的那个时间点,需要结合多秒的数据回放去逐一排查问题;

  1. 定位问题发生的原因:

  1. 需要严格从上游模块(sensor、perception、prediction)逐步排查至下游模块原因(planning、control);即是,若确定为planning的问题,则代表perception、prediction及sensor输入均无影响下游表现的问题;

  1. perception主要/常见关注问题

  1. type:障碍物类型,不同的障碍物类型感知识别算法不同,需要确认障碍物识别类型是否正确,可以通过点击bounding box查看debug信息;

  1. 大类包括:Unknown = 0; Unknown_movable = 1; Unknown_unmovable = 2; Pedestrian = 3行人; Bicycle = 4; Vehicle = 5; Max_object_type = 6;

  1. 小类包括:Unknown = 0; Unknown_movable = 1; Unknown_unmovable = 2; Car = 3; Van = 4; Truck = 5; Bus = 6; Cyclist = 7骑自行车的人; Motocyclist = 8; Tricyclist = 9三轮车手; Pedestrian = 10; Traffic_Cone = 11; Max_object_type = 12;

  1. bounding box:障碍物,可以通过camera和box映射在车道线的位置去对比判断;主要涉及的问题包括:bounding box抖动、横/纵向位置存在偏差、bounding box大小与实际不符(包括长与宽);

  1. heading:障碍物朝向,可以通过camera与感知输出在kaleido上的speed_direction进行比对判断;主要涉及的问题包括:heading 抖动、heading与实际偏差较大;

  1. speed:障碍物速度,通过camera获取障碍物与自车的相对速度及相对距离进行判断,主要涉及问题包括:speed unstable、wrong high speed、wrong low speed;

  1. traffic light:红绿灯颜色,通过camera与感知输出进行对比,主要涉及问题包括:红绿灯标注框未框正、未正确识别对应的颜色、未及时识别;

  1. prediction主要/常见关注问题

  1. prediction trajectory:未来8s的轨迹预测,包含信息较多:速度预测、加速度预测、朝向预测、变道预测等;

  1. 速度预测:可以通过trajectory在kaleido上反馈的长度进行判断,速度越高,未来8s的预测轨迹越长,通常来说,速度预测在不同的场景下会有不同的预测规则,进而有对应的裁剪规则;主要涉及的问题包括:trajectory undertrim、trajectory overtrim;

  1. 加速度预测:反馈信息与速度预测相同;

  1. 朝向预测:可以通过回放障碍物的实际行驶轨迹与预测轨迹进行比对,判断prediction heading与社会车辆实际heading是否存在较大偏差;

  1. 变道预测:即是预测社会车辆是否存在变道意图;主要涉及问题包括:lane change prediction false positive、lane change prediction false negative;

  1. linear or not:需要判断prediction trajectroy是否线性;在存在车道线的区域,是否顺着车道线进行预测;在free space区域,prediction trajectory是否smooth流畅;

  1. planning主要/常见关注问题

  1. planning action:行为规划,主要包括:lane change、active lane change、静止static nudge、动态dynamic nudge、pull over、pull out、follow等;

  1. lane change:导航换道,通过routing或rerouting设定好的换道区间,在固定区间执行换道的动作;主要涉及问题包括:lane change aggressive侵略、lane change conservative保守、lane change no trigger不触发、lane change trigger false positive、lane change abort中止、lane change wave犹豫、cross solid line、no signal light、wrong signal light;

  1. active lane change:主动变道,非routing或rerouting设定好的,且触发主动变道后原则上不会更改整体路线上的变化,通过换道来完成短区间内的路径更优;主要涉及问题包括:active lane change aggressive、active lane change conservative、active lane change no trigger、active lane change trigger false positive、active lane change abort、active lane change wave、cross solid line、no signal light、wrong signal light;

  1. static nudge:应对静态障碍物的车道内避障;主要涉及问题包括:static nudge aggressive、static nudge conservative、static nudge trigger false positive、 static nudge no trigger、close to boundary;

  1. dynamic nudge:应对动态障碍物的车道内避障;主要涉及问题包括:dynamic nudge aggressive、dynamic nudge conservative、dynamic nudge trigger false positive、 dynamic nudge no trigger、close to boundary;

  1. pull over:进站停车;主要涉及问题包括:pull over aggressive、pull over conservative、pull over trigger false positive、pull over no trigger、pull over wrong heading、pull over wrong position、pull over over solid line、close to boundary、no signal light、wrong signal light;

  1. pull out:起步出站;主要涉及问题包括:pull out aggressive、pull out conservative、pull out trigger false positive、pull out no trigger、pull out over solid line、close to boundary、no signal light、wrong signal light;

  1. follow:跟车动作;主要涉及问题包括:follow far、follow close、follow with brake;

  1. planning speed:速度规划,主要包括:acceleration、speed、yield、stop等;

  1. acceleration:加速度规划;主要涉及问题包括:acc harsh激进、acc weak不足、acc not smooth丝滑;

  1. speed:速度规划;主要涉及问题包括:speed harsh、speed weak、speed not smooth;

  1. yield:纵向避让决策,包括应对VRU yield、对变道车辆yield等;主要涉及问题包括:yield harsh、yield weak、yield close、yield far、yield no trigger、yield trigger false positive;

  1. stop:停车决策,包括跟车停车、应对VRU停车、红绿灯停车等;主要涉及问题包括:stop harsh、stop weak、stop close、stop far、stop no trigger、stop trigger false positive

  1. planning scenario:场景规则,主要包括:protected/unprotected uturn/left turn/right turn、crosswalk、traffic light、junction交叉口等; 无保护转弯指(没红绿灯或停车标志来指引方向)

  1. 同理,针对这些场景规则,单看planning模块的表现,主要涉及的问题也是包括:harsh、weak、conservative、aggressive、close、far、trigger false positive、no trigger;

2.6各模块问题分类细节

2.6.1 Control_Issue_Triage_Tag

  • This page will show "how to give a tag" after triaged a/an case/issue in Control Module.

Issue Tag

Explanation

control

module

core_dump

Control模块core dump

crash

Control模块crash

latency

Control模块存在较大latency

quit_auto

Control模块原因造成的退出自动驾驶状态

Longitudinal

纵向

throttle

overshoot

control油门指令超出planning下发

not_enough

control油门指令低于planning下发

no_respose

control油门指令不响应planning下发

brake

overshoot

control刹车指令超出planning下发

not_enough

control刹车指令小于planning下发

no_respose

control刹车指令不响应planning下发

stop

slide

stop状态下,control环节原因造成车辆溜车

not_smooth

stop状态下,control环节原因表现不平顺

not_accurate

stop状态下,control环节原因导致停车精度偏差大

no_respose

stop状态下,control未响应

Lateral

横向

steering

cross_track_error

跟踪错误

large

方向盘指令执行下,Cross-track Error较大

heading_error

large

方向盘指令执行下,Heading Error较大

no_respose

方向盘未响应指令

oscillation

方向盘小幅振动

2.6.2 Planning_Issue_Triage_Tag

  • This page will show "how to give a tag" after triaged a/an case/issue in Planning Module.

  • Eg: planning/action/map_lane_change/aggressive (close to 12345)

Issue Tag

Explanation

planning

module

core_dump

Planning模块core dump

crash

Planning模块crash

latency

Planning模块存在较大latency

action

map_lane_change

aggressive

变道激进问题:距离前车/邻车过近,插空、变道时机激进,速度过快危险行为等

conservative

变道保守问题:存在较大的gap不触发变道,速度过慢影响其他车辆行为等

abort

变道取消问题:无故取消变道引起不适体感

trigger

变道触发问题:不合适的变道触发

fp

变道误触发问题:变道误触发或多次触发

no_trigger

变道不触发问题:迟迟不触发错过routing点

wave

变道摇摆问题:画龙、横向左右摇摆

not_smooth

变道不丝滑问题:存在顿挫、轻微振幅等

close_to_physical_boundary

变道距离边界过近问题:距离物理边界过近

close_to_obstacle_boundary

变道距离边界过近问题:距离障碍物边界过近

cross_solid_line

变道压实线问题

no_singal_light

变道未打转向灯问题

wrong_signal_light

变道转向灯打错问题

active_lane_change

aggressive

主动变道表现激进:插空、变道时机激进,速度过快危险行为等

conservative

主动变道表现保守:迟迟不触发主动变道或主动变道时机过于保守或插空选择保守等

abort

主动变道取消问题:无故取消主动变道

trigger

主动变道触发问题:不合适的主动变道触发

fp

主动变道误触发问题:主动变道误触发或多次触发

no_trigger

主动变道不触发问题:迟迟不触发

wave

主动变道摇摆问题:画龙、横向左右摇摆

not_smooth

主动变道不丝滑问题:存在顿挫、轻微振幅等

close_to_physical_boundary

主动变道距离边界过近问题:距离物理边界过近

close_to_obstacle_boundary

主动变道距离边界过近问题:距离障碍物边界过近

cross_solid_line

主动变道压实线问题

no_singal_light

主动变道未打转向灯问题

wrong_signal_light

主动变道转向灯打错问题

side_pass

aggressive

绕行激进问题:距离前车/邻车过近,速度过快危险行为等

conservative

绕行保守问题:侧后方无车不进行绕行

abort

绕行取消问题:无故取消绕行停滞不动

trigger

绕行触发问题:不合时宜的触发绕行

fp

绕行误触发问题:绕行误触发或多次触发

no_trigger

绕行不触发问题:该触发绕行时迟迟不触发

wave

绕行摇摆问题:绕行时存在左右方向盘摇摆

close_to_physical_boundary

绕行距离边界过近问题:距离物理边界过近

close_to_obstacle_boundary

绕行距离边界过近问题:距离障碍物边界过近

cross_solid_line

绕行压实线问题

no_singal_light

绕行未打转向灯问题

wrong_signal_light

绕行转向灯打错问题

pull_over

aggressive

靠边停车激进问题:急加速/距离前车、邻车过近

conservative

靠边停车保守问题:停车路径规划保守/表现犹豫

abort

靠边停车取消问题:无故取消靠边停车

trigger

靠边停车触发问题

fp

靠边停车误触发问题:靠边停车误触发或多次触发

no_trigger

靠边停车不触发问题:到了停车区间未触发

wrong_heading

靠边停车方向指向不佳问题:最终停车朝向不合理/歪斜

wrong_position

靠边停车位置不佳/不正确问题:有更合适的停车位置/选定终点偏差较大/非法停车位置

over_solid_line

靠边停车压实线:停车过程中/最终停车时存在压实线表现

close_to_physical_boundary

靠边停车距离边界过近问题:停车过程中距离物理边界过近

close_to_obstacle_boundary

靠边停车距离边界过近问题:停车过程中距离障碍物边界过近

no_singal_light

停车未打转向灯问题

wrong_signal_light

停车转向灯打错问题

departure

aggressive

出站激进问题:急加速/距离前车、邻车过近

conservative

出站保守问题:停车路径规划保守/表现犹豫

abort

出站取消问题:出站错误取消

trigger

出站触发问题:不合时宜的触发出站

fp

出站误触发问题:误触发出站或多次触发出站程序

no_trigger

出站不触发问题:该触发出站时迟迟不触发

over_solid_line

出站压实线问题

close_to_boundary

出站距离边界过近问题:出站过程中距离物理边界过近

no_singal_light

出站未打转向灯问题

wrong_signal_light

出站转向灯打错问题

static_nudge

aggressive

对静态障碍物横向避让激进:触发时造成的结果存在碰撞风险,速度过快等危险行为

conservative

对静态障碍物横向避让保守:触发时造成的结果无任何风险

wave

对静态障碍物横向避让存在非预期摇摆

close_to_physical_boundary

对静态障碍物横向避让距离物理boundary过近

trigger

对静态障碍物横向避让触发问题

fp

对静态障碍物横向避让误触发或多次触发问题

no_trigger

对静态障碍物横向避让不触发

over_solid_line

对静态障碍物横向避让触发过程中压实线问题

steering

harsh

对静态障碍物横向避让过程中方向盘力度指令不适问题

dynamic_nudge

aggressive

对动态障碍物横向避让激进:触发时造成的结果存在碰撞风险,速度过快等危险行为

conservative

对动态障碍物横向避让保守:触发时造成的结果无任何风险

wave

对动态障碍物横向避让存在非预期摇摆

close_to_physical_boundary

对动态障碍物横向避让距离boundary过近

trigger

对动态障碍物横向避让触发问题

fp

对动态障碍物横向避让误触发或多次触发问题

no_trigger

对动态障碍物横向避让不触发

over_solid_line

对动态障碍物横向避让触发过程中压实线问题

steering

harsh

对动态障碍物横向避让过程中方向盘力度指令不适问题

lon

speed_up

harsh

加速指令过猛:加速jerk值过大造成纵向推背体感或不适体感

weak

加速指令过缓:加速表现不及预期,过缓慢

not_mooth

加速指令不平缓:加速表现存在顿挫感

aggressive

crosswalk

crosswalk场景通行表现激进:快速、加速通过

traffic_light

traffic light场景通行表现激进:快速、加速通过

slow_down

harsh

减速指令过猛:加速jerk值过大造成纵向点头体感或不适体感

weak

减速指令过缓:减速表现不及预期,过缓慢

not_mooth

减速指令不平滑:减速表现存在顿挫感

2.6.3 Prediction_Issue_Triage_Tag

  • This page will show "how to give a tag" after triaged a/an case/issue.

  • Eg: prediction/pedestrian/trajectory_interaction/aggressive (12345)

Issue Tag

Explanation

eg

prediction

module

core_dump

prediction模块core dump(存在信息提示),需要有core文件

crash

prediction模块crash(程序死循环,帧率为0)

latency

prediction模块存在较大latency(现有标准标准是100ms,超过150ms为异常)

car

trajectory_interaction

aggressive

有交互的小汽车预测线过长,如路口直行遇对向左转欲停止车辆,预测轨迹较长

conservative

有交互的小汽车预测线过短,如路口直行遇对向左转欲通行车辆,预测轨迹较短

wrong_direction

有交互的小汽车预测线目标车道或位置与实际偏差较大

speed

slow

速度变化1s后,对小汽车预测速度趋势相同但仍低于实际速度趋势

fast

速度变化1s后,对小汽车预测速度趋势相同但仍高于实际速度趋势

opposite

速度变化1s后,对小汽车预测速度趋势相反于实际速度趋势

wrong_theta

小汽车预测速度的朝向预测错误

fast_cutin

fp

对高于自车速度的小车的变道预测过积极(实际无变道意图,但误预测)

fn

对高于自车速度的小车的变道预测过消极(实际有变道意图,但未给变道预测)

unstable

对高速加塞的小车变道预测不稳定

slow_cutin

fp

对低于自车速度的小车的变道预测过积极(实际无变道意图,但误预测)

fn

对低于自车速度的小车的变道预测过消极(实际有变道意图,但未给变道预测)

unstable

对低速加塞的小车变道预测不稳定

close_cutin

fn

对近距离的小车的变道预测过积极(实际无变道意图,但误预测)

unstable

对近距离的小车的变道预测过消极(实际有变道意图,但未给变道预测)

Unstable

对近距离的小车变道预测不稳定

far_cutin

fp

对远距离的小车的变道预测过积极(实际无变道意图,但误预测)

fn

对远距离的小车的变道预测过消极(实际有变道意图,但未给变道预测)

unstable

对远距离的小车变道预测不稳定

truck

trajectory_interaction

aggressive

有交互的卡车预测线过长,如路口直行遇对向左转欲停止车辆,预测轨迹较长

conservative

有交互的卡车预测线过短,如路口直行遇对向左转欲通行车辆,预测轨迹较短

wrong_direction

有交互的卡车预测线目标车道或位置与实际偏差较大

speed

slow

速度变化1s后,对卡车预测速度趋势相同但仍低于实际速度趋势

fast

速度变化1s后,对卡车预测速度趋势相同但仍高于实际速度趋势

opposite

速度变化1s后,对卡车预测速度趋势相反于实际速度趋势

wrong_heading

卡车预测速度的朝向预测错误

fast_cutin

fp

对高于自车速度的卡车的变道预测过积极(实际无变道意图,但误预测)

fn

对高于自车速度的卡车的变道预测过消极(实际有变道意图,但未给变道预测)

unstable

对高速加塞的卡车变道预测不稳定

slow_cutin

fp

对低于自车速度的卡车的变道预测过积极(实际无变道意图,但误预测)

fn

对低于自车速度的卡车的变道预测过消极(实际有变道意图,但未给变道预测)

unstable

对低速加塞的卡车变道预测不稳定

close_cutin

fp

对近距离的卡车的变道预测过积极(实际无变道意图,但误预测)

fn

对近距离的卡车的变道预测过消极(实际有变道意图,但未给变道预测)

unstable

对近距离的卡车变道预测不稳定

far_cutin

fp

对远距离的卡车的变道预测过积极(实际无变道意图,但误预测)

fn

对远距离的卡车的变道预测过消极(实际有变道意图,但未给变道预测)

unstable

对远距离的卡车变道预测不稳定

cyclist

trajectory_interaction

aggressive

有交互的自行车或电动车预测线过长,如路口直行遇人行道上停止的cyclist,预测轨迹较长

conservative

有交互的自行车或电动车预测线过短,如路口直行遇人行道上通行的cyclist,预测轨迹较短

wrong_direction

有交互的自行车或电动车预测线目标车道或位置与实际偏差较大

speed

slow

速度变化1s后,对自行车或电动车预测速度趋势相同但仍低于实际速度趋势

fast

速度变化1s后,对自行车或电动车预测速度趋势相同但仍高于实际速度趋势

opposite

速度变化1s后,对自行车或电动车预测速度趋势相反于实际速度趋势

wrong heading

自行车或电动车预测速度的朝向预测错误

pedestrian

trajectory_interaction

aggressive

有交互的行人预测线过长,如路口直行遇人行道上停止的行人,预测轨迹较长

conservative

有交互的行人预测线过短,如路口直行遇人行道上通行的行人,预测轨迹较短

wrong_direction

有交互的行人预测线目标车道或位置与实际偏差较大

speed

slow

速度变化1s后,对行人预测速度趋势相同但仍低于实际速度趋势

fast

速度变化1s后,对行人预测速度趋势相同但仍高于实际速度趋势

opposite

速度变化1s后,对行人预测速度趋势相反于实际速度趋势

wrong heading

行人预测速度的朝向预测错误

acceleration

(算法未涉及,暂不使用)

car

overTrim

对小汽车预测加速度低于实际加速度

underTrim

对小汽车预测加速度高于实际加速度

wrong_heading

小汽车预测加速度的朝向预测错误

truck

overTrim

对大车预测加速度低于实际加速度

underTrim

对大车预测加速度高于实际加速度

wrong_heading

大车预测加速度的朝向预测错误

cyclist

overTrim

对自行车/电动车预测加速度低于实际加速度

underTrim

对自行车/电动车预测加速度高于实际加速度

wrong_heading

自行车/电动车预测加速度的朝向预测错误

pedestrian

overTrim

对行人预测加速度低于实际加速度

underTrim

对行人预测加速度高于实际加速度

wrong_heading

行人预测加速度的朝向预测错误

2.6.4 Perception问题分类

  • This page will show "how to give a tag" after triaged a/an case/issue in Perception Module.

  • eg: perception/car/attributes/wrong_position/lon_error

Issue Tag

Explanation

perception

module

core_dump

Perception模块core dump(存在core dump信息提示)

crash

Perception模块crash(帧率为0,无core dump)

fps_error

Perception模块帧率下降(任何一帧帧率<9)

latency

Perception模块存在较大latency(>?ms)

car

detection

fp

对小车的检测存在单帧或多帧的误检或多检

fn

对小车的检测存在单帧或多帧的漏检

unstable

对小车的检测时有时无

attribute

wrong_type

对小汽车的类型输出错误

wrong_position

lon_error

对小汽车纵向位置输出存在偏差

lat_error

对小汽车横向位置输出存在偏差

over Line

与点云对比,点云输出正确情况下,小车box输出压线

heading

wrong_heading

对小汽车的朝向输出与实际存在偏差

occlusion

存在被遮挡的小车朝向输出与实际存在偏差

heading_rate

小汽车朝向变化率连续帧内异常

static_obstacle

fp

非静止的小车检测为静止的小车

fn

静止的小车检测为非静止的小车

signal_light

fp

小车转向灯存在单帧或多帧的误检或多检

fn

小车转向灯存在单帧或多帧的漏检

wrong_high_speed

小车的速度输出与实际相比异常大

wrong_low_speed

小车的速度输出与实际相比异常小

speed_rate_large

小车的速度变化率连续帧内异常

wrong_size

对小汽车的bounding box输出不稳定或与实际存在偏差

truck

detection

fp

对卡车的检测存在单帧或多帧的误检或多检

fn

对卡车的检测存在单帧或多帧的漏检

unstable

对卡车的检测时有时无

attribute

wrong_type

对卡车的类型输出错误

wrong_position

lon_error

对卡车纵向位置输出存在偏差

lat_error

对卡车横向位置输出存在偏差

over Line

与点云对比,点云输出正确情况下,卡车box输出压线

heading

wrong_heading

对卡车的朝向输出与实际存在偏差

occlusion

存在被遮挡的卡车朝向输出与实际存在偏差

heading_rate

卡车朝向变化率连续帧内异常

static_obstacle

fp

非静止的卡车检测为静止的卡车

fn

静止的卡车检测为非静止的卡车

signal_light

fp

卡车转向灯存在单帧或多帧的误检或多检

fn

卡车转向灯存在单帧或多帧的漏检

wrong_high_speed

卡车的速度输出与实际相比异常大

wrong_low_speed

卡车的速度输出与实际相比异常小

speed_rate_large

卡车的速度变化率连续帧内异常

wrong_size

对卡车的bounding box输出不稳定或与实际存在偏差

bus

detection

fp

对公交车/大巴的检测存在单帧或多帧的误检或多检

fn

对公交车/大巴的检测存在单帧或多帧的漏检

unstable

对公交车/大巴的检测时有时无

attribute

wrong_type

对公交车/大巴的类型输出错误

wrong_position

lon_error

对公交车/大巴纵向位置输出存在偏差

lat_error

对公交车/大巴横向位置输出存在偏差

over Line

与点云对比,点云输出正确情况下,公交车/大巴box输出压线

heading

wrong_heading

对公交车/大巴的朝向输出与实际存在偏差

occlusion

存在被遮挡的公交车/大巴朝向输出与实际存在偏差

heading_rate

公交车/大巴朝向变化率连续帧内异常

static_obstacle

fp

非静止的公交车/大巴检测为静止的公交车/大巴

fn

静止的公交车/大巴检测为非静止的公交车/大巴

signal_light

fp

公交车/大巴转向灯存在单帧或多帧的误检或多检

fn

公交车/大巴转向灯存在单帧或多帧的漏检

wrong_high_speed

公交车/大巴的速度输出与实际相比异常大

wrong_low_speed

公交车/大巴的速度输出与实际相比异常小

speed_rate_large

公交车/大巴的速度变化率连续帧内异常

wrong_size

对公交车/大巴的bounding box输出不稳定或与实际存在偏差

cyclist

detection

fp

对自行车/电动车的检测存在单帧或多帧的误检或多检

fn

对自行车/电动车的检测存在单帧或多帧的漏检

unstable

对自行车/电动车的检测时有时无

attribute

wrong_type

对自行车/电动车的类型输出错误

wrong_position

lon_error

对自行车/电动车纵向位置输出存在偏差

lat_error

对自行车/电动车横向位置输出存在偏差

over Line

与点云对比,点云输出正确情况下,自行车/电动车box输出压线

heading

wrong_heading

对自行车/电动车的朝向输出与实际存在偏差

occlusion

存在被遮挡的自行车/电动车朝向输出与实际存在偏差

heading_rate

自行车/电动车朝向变化率连续帧内异常

static_obstacle

fp

非静止的自行车/电动车检测为静止的卡车

fn

静止的自行车/电动车检测为非静止的卡车

signal_light

fp

自行车/电动车转向灯存在单帧或多帧的误检或多检

fn

自行车/电动车转向灯存在单帧或多帧的漏检

wrong_high_speed

自行车/电动车的速度输出与实际相比异常大

wrong_low_speed

自行车/电动车的速度输出与实际相比异常小

speed_rate_large

自行车/电动车的速度变化率连续帧内异常

wrong_size

对自行车/电动车的bounding box输出不稳定或与实际存在偏差

moto

detection

fp

对摩托车的检测存在单帧或多帧的误检或多检

fn

对摩托车的检测存在单帧或多帧的漏检

unstable

对摩托车的检测时有时无

attribute

wrong_type

对摩托车的类型输出错误

wrong_position

lon_error

对摩托车纵向位置输出存在偏差

lat_error

对摩托车横向位置输出存在偏差

over Line

与点云对比,点云输出正确情况下,摩托车box输出压线

heading

wrong_heading

对摩托车的朝向输出与实际存在偏差

occlusion

存在被遮挡的摩托车朝向输出与实际存在偏差

heading_rate

摩托车朝向变化率连续帧内异常

static_obstacle

fp

非静止的摩托车检测为静止的摩托车

fn

静止的摩托车检测为非静止的摩托车

signal_light

fp

摩托车转向灯存在单帧或多帧的误检或多检

fn

摩托车转向灯存在单帧或多帧的漏检

wrong_high_speed

摩托车的速度输出与实际相比异常大

wrong_low_speed

摩托车速度输出与实际相比异常小

speed_rate_large

摩托车的速度变化率连续帧内异常

wrong_size

对摩托车的bounding box输出不稳定或与实际存在偏差

2.7 测试流程细节

面对一个全新的软件怎么开展测试工作

参考回答:

第一步:需求分析:我会对这个全新的软件需求进行全面分析,主要的分析点有:1.软件的版本需求合理性,是否可测试;2.项目人员配置(遇到什么问题找谁,有多少人投入测试,测试环境,硬件,软件);3.要测试的软件的主流程,异常流程,测试重点;4。项目整体规划(发布时间

第二步:指定测试策略、测试计划和bug定义标准,这一步主要是针对需求,在已有的和可协调到的资源上做出具体的,可执行的计划,这个阶段的输出是测试计划。测试计划中明确包含测试范围,测试策略,比如功能测试,性能测试,自动化测试,可用性测试,云测,mokey等

第三步:按计划执行,编写测试用例,(编写测试用例的方法:等价类,边界值,错误猜测法,因果图,正交分解法等等)(编写测试用例需要注意的点,用例区分等级,特殊场景考虑:,写完用例,如果有条件,就要评审测试用例

第四步:执行用例,补充场景,记录bug,回归bug(注意开发提测的需求需要冒烟测试通过)

第五步:功能合入,回归测试(各个功能点测试通过之后,再合入)

第六步:提交验收(回归测试通过之后,提交给验收人员进行验收)

第七步:发布上线(全新的软件,先是小范围内测,观察线上数据(如:crash,用户反馈,运营数据等)如果有产品认为严重的问题,则需要修复后重发,符合预期才能扩大发布)

如果你发现了bug但是开发不认为是bug,怎么办

首先找证据支持我说这个是bug,(比如需求文档这么写的,竞品这么做的等等),如果找不到足够的证据支持你的观点,那就将问题升级到小组内讨论,一级一级的上升,直到PM或者项目经理拍板定义

你觉得bug需要修改,很紧急,但是开发没时间,怎么办

这个你需要先把这个问题说清楚,问题影响范围有多大,然后给PM或者项目经理还有拉上开发一起评审,说明这个问题遗留的风险,如果PM和项目经理接受这个风险,那就可以发布,否则必须修改了才能发布。即使他接受了,发布之后,也要注意线上的表现,并知会出来

如果线上这个问题表现超过预期,那么就要要求发布hotfix

软件测试级别

单元测试:单元测试是对软件组成单元进行测试。其目的是检验软件基本组成单位的正确性。测试的对象是软件设计的最小单位:模块。Findyou又称为模块测试,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。(测试内容:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试)

集成测试:(集成测试也称联合测试、组装测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。主要目的是检查软件单位之间的接口是否正确。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能正确性、全局数据结构、单模块缺陷对系统的影响

系统测试:将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等

验收测试:验收测试是部署软件之前的最后一个测试操作。它是技术测试的最后一个阶段,也称为交付测试。总结验收测试的目的是确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买都展示该软件系统满足原始需求。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务,即软件的功能和性能如同用户所合理期待的那样。测试内容:同系统测试(功能...各类文档等)

软件测试类型

功能测试:也叫黑盒测试,功能测试指测试软件各个功能模块是否正确,逻辑是否正确。对测试对象的功能测试应侧重于所有可直接追踪到用例或业务功能和业务规则的测试需求。这种测试的目标是核实数据的接收、处理和检索是否正确,以及业务规则的实施是否恰当。此类测试基于黑盒技术,该技术通过图形用户界面(GUI) 与应用程序进行交互,并对交互的输出或结果进行分析,以此来核实应用程序及其内部进程。功能测试的主要参考为类似于功能说明书之类的文档。

性能测试:指验证软件的性能可以满足系统规格给定的指定要求的性能指标。性能测试是一个比较大的范围,可以进一步衍生出负载测试、强度测试、压力测试、稳定性测试。通过自动化测试工具模拟多种正常、异常、峰值条件,对系统各项性能指标测试

配置测试:用硬件来测试软件运行情况,1.软件在不同主机上运行的情况(Apple和Dell)2.在不同组件上运行情况(开发的拨号程序要测试不同厂商生产的Moden上运行情况)3.不同的外设、接口、内存的运行情况

强度测试:强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况。这类测试往往可以书写系统要求的软硬件水平要求。实施和执行此类测试的目的是找出因资源不足或资源争用而导致的错误。如果内存或磁盘空间不足,测试对象就可能会表现出一些在正常条件下并不明显的缺陷。而其他缺陷则可能由于争用共享资源(如数据库锁或网络带宽)而造成的。强度测试还可用于确定测试对象能够处理的最大工作量。

负载测试:通过在被测系统上不断加压,直到性能指标达到极限,例如“响应时间”超过预定指标或都某种资源已经达到饱和状态。负载测试是一种性能测试指数据在超负荷环境中运行,程序是否能够承担。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征,例如,响应时间、事务处理速率和其他与时间相关的方面。

压力测试:压力测试方法测试系统在一定饱和状态下,例如cpu、内存在饱和使用情况下,系统能够处理的会话能力,以及系统是否会出现错误。测试出系统所能承受的最大极限。是指系统在极限下的压力情况,系统在什么样的压力下会导致系统得到失效,无法正常运行。100个用户连续访问1小时可以看做是压力测试,连续访问10小时可以认为是负载测试

稳定性测试:压力测试方法测试系统在一定饱和状态下,例如cpu、内存在饱和使用情况下,系统能够处理的会话能力,以及系统是否会出现错误。一般是稍大于业务量的一个负载,对系统进行的一个持续的,长时间的测试,比如24*3,连续3天的施加压力,确定系统在较长运行时间的情况下,系统的稳定性情况

网络测试:wifi、4G、3G、不同运营商网络测试、

UI界面测试:UI测试指测试用户界面的风格是否满足客户要求,文字是否正确,页面美工是否好看,文字,图片组合是否完美,背景是否美观,操作是否友好等等。

分辨率测试:测试在不同分辨率下,界面的美观程度,分为800*600,1024*768,1152*864,1280*768,1280*1024,1200*1600大小字体下测试。一个好的软件要有一个极佳的分辨率,而在其他分辨率下也都能可以运行。

安装测试:安装测试有两个目的。第一个目的是确保该软件在正常情况和异常情况的不同条件下: 例如,进行首次安装、升级、完整的或自定义的安装_都能进行安装。异常情况包括磁盘空间不足、缺少目录创建权限等。第二个目的是核实软件在安装后可立即正常运行。这通常是指运行大量为功能测试制定的测试。

内存测试:CPU测试、响应时间测试、唤醒率测试等,都属于性能测试。还有强度测试、容量测试、基准测试等。

文档测试:文档测试是检验样品用户文档的完整性、正确性、一致性、易理解性、易浏览性。包括用户手册、使用说明、用户帮助文档等

可靠性测试:这个主要是硬件方面的,比如高低温测试、防水防尘等测试

安全测试:对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程。可确保只有具备系统访问权限的用户才能访问应用程序,而且只能通过相应的网管、关来访问。比如输入管理员账户,检查其密码是否容易猜取,或者可以从数据库中获得?

兼容测试:检查软件在不同软件、硬件平台是否可以正常运行。主要查看在不同操作系统、浏览器、数据库、不同版本是否正常运行、向前兼容和向后兼容、、数据共享兼容

浏览器兼容性测试:测试软件在不同产商的浏览器下是否能够正确显示与运行、比如测试IE,Natscape浏览器

操作系统兼容性:测试软件在不同操作系统下是否能够正确显示与运行;比如测试WINDOWS98,WINDOWS 2000,WINDOWS XP,LINU, UNIX下是否可以运行这套软件?

硬件兼容性

测试与硬件密切相关的软件产品与其他硬件产品的兼容性,比如该软件是少在并口设备中的,测试同时使用其他并口设备,系统是否可以正确使用。比如在INTER,舒龙CPU芯片下系统是否能够正常运行?

并发测试:并发测试方法通过模拟用户并发访问,测试多用户并发访问同一个应用、同一个模块或者数据记录时是否存在死锁或其者他性能问题。也就是说,这种测试关注点是多个用户同时(并发)对一个模块或操作进行加压。

软件缺陷等级划分

致命的:致命的错误,造成系统或应用程序崩溃、死机、系统悬挂,或造成数据丢失、主要功能完全丧失等。

严重的:严重错误,指功能或特性没有实现,主要功能部分丧失,次要功能完全丧失,或致命的错误声明。

一般的:不太严重的错误,这样的软件缺陷虽然不影响系统的基本使用,但没有很好地实现功能,没有达到预期效果。如次要功能丧失,提示信息不太准确,或用户界面差,操作时间长等。

微小的:一些小问题,对功能几乎没有影响,产品及属性仍可使用,如有个别错别字、文字排列不整齐等。

测试过程中输出的文档

测试计划,测试文档,测试用例,测试日志,bug报告,测试总结报告

测试计划都包括哪些

概述 1.1 编写目的 1.2 项目背景1.3 项目质量目标 1.4 预期读者 1.5 参考资料

测试环境 2.1 系统架构 2.2 软硬件环境要求 2.3 测试环境部署图

测试规划 3.1 测试范围 3.2 测试工具 3.3 人员、角色及职责

测试策略 4.1 系统框测试 4.2 业务流程测试 4.3 功能点测试 4.4 UI界面测试 4.5 性能测试 4.6 兼容性测试 4.7 安全测试

测试进度安排:任务 时间 执行人员 工作量

输出文档:测试计划、测试报告

测试验收标准:1.完成所有类型测试 ,没有影响到用户业务使用的bug ,bug数量少于一定数量 , 功能业务,性能指标符合需求

如何设计测试用例

测试用例(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。检验是否满足客户需求;度量测试人员的工作量;展现测试用例的思路。

测试用例包含:

用例编号 唯一的编号。

用例标题 当前测试用例的用途

测试背景 这个用例属于哪个项目

前置条件 用例执行前应该满足哪些条件

重要级别 定义优先级,分为高低级别

测试数据 具体输入内容

测试步骤 每步做些什么

预期结果 需求文档要求结果

实际结果 实际输出结果

备注 :测试用例编写流程:需求分析--》提取测试点--》测试用例编写--》测试用例评审

测试用例常用设计方法:等价类划分法、 边界值分析法、因果图法、场景法、正交表、测试大纲法、错误推断法、随机测试

测试用例的三特性

一个“好的”测试用例,必须具备以下三个特征。

1.整体完备性:“好的”测试用例一定是一个完备的整体,是有效测试用例组成的集合,能够完全覆盖测试需求。

2.等价类划分的准确性:指的是对于每个等价类都能保证只要其中一个输入测试通过,其他输入也一定测试通过。

3.等价类集合的完备性:需要保证所有可能的边界值和边界条件都已经正确识别。

做到了以上三点,就可以肯定测试是充分且完备的,即做到了完整的测试需求覆盖。

导致测试用例变更的原因

软件产品的版本是随着软件的升级而不断变化的,而每一次版本的变化都会对测试用例集产生影响,所以测试用例集也需要不断地变更和维护,使之与产品的变化保持一致。以下原因可能导致测试用例变更:

1)软件需求变更:软件需求变更可能导致软件功能的增加、删除、修改等变化,应遵循需求变更控制管理方法,同样变更的测试用例也需要执行变更管理流程。

2)测试需求的遗漏和误解:由于测试需求分析不到位,可能导致测试需求遗漏或者误解,相应的测试用力也要进行变更。特别是对于软件隐性需求,在测试需求分析阶段容易遗漏,而在测试执行过程中被发现,这时需要补充测试用例。

3)测试用例遗漏:在测试过程中,发现测试用例未覆盖全部需求,需要补充相应的测试用例。

4)软件发布后,用户反馈的缺陷:表明测试不全面,存在尚未发现的缺陷,需要补充或者修改测试用例。

缺陷报告由哪些组成

(测试报告,测试用例)

缺陷编号、日期、缺陷标题、缺陷优先程度、缺陷所属模块、缺陷所属版本、执行流程、预计结果、输出结果、缺陷分析、缺陷所属开发 人员、缺陷描述缺陷有限等级等。提高质量:要有效的发现 Bug 需参考需求以及详细设计等前期文档设计出高效的测试用例,然后严格执行测试用例,对发现的问题要充分确认肯定,然后再向外发布如此才能提高提交 Bug 的质量。

测试报告:项目说明测试依据人员及进度测试概要测试环境测试用例测试方法覆盖分析需求覆盖测试覆盖

产品上线标准:产品 checkelist

1. 已按照交互文档、需求文档完全的实现需求;

2. 符合交互稿的交互设计规范、符合视觉要求,已经通过设计评审;

3. 允许遗留可能会对用户正常使用造成一定影响的正常级缺陷,但应在发布前告知项目组,并经风险评估同意发布后方可发布

测试退出标准

单元测试退出标准

1) 单元测试用例设计已经通过评审

2) 核心代码100%经过Code Review

3) 单元测试功能覆盖率达到100%

4) 单元测试代码行覆盖率不低于80%

5) 所有发现缺陷至少60%都纳入缺陷追踪系统且各级缺陷修复率达到标准

6) 不存在A、B类缺陷

7) C、D、E类缺陷允许存在

8) 按照单元测试用例完成了所有规定单元的测试

9) 软件单元功能与设计一致

集成测试退出标准

1) 集成测试用例设计已经通过评审

2) 所有源代码和可执行代码已经建立受控基线,纳入配置管理受控库,不经过审批不能随意更改

3) 按照集成构件计划及增量集成策略完成了整个系统的集成测试

4) 达到了测试计划中关于集成测试所规定的覆盖率的要求

5) 集成工作版本满足设计定义的各项功能、性能要求

6) 在集成测试中发现的错误已经得到修改,各级缺陷修复率达到标准

7) A、B类BUG不能存在

8) C、D类BUG允许存在,但不能超过单元测试总BUG的50%。

9) E类BUG允许存在

系统测试退出标准

1) 系统测试用例设计已经通过评审

2) 按照系统测试计划完成了系统测试

3) 系统测试的功能覆盖率达100%

4) 系统的功能和性能满足产品需求规格说明书的要求

5) 在系统测试中发现的错误已经得到修改并且各级缺陷修复率达到标准

6) 系统测试后不存在A、B、C类缺陷

7) D类缺陷允许存在,不超过总缺陷的5%

8) E类缺陷允许存在,不超过总缺陷的10%

注:这只是一套比较理想化的退出标准,但在实际工作中不可能达到这种程度,尤其是测试覆盖率和缺陷解决率不可能是100%。现在的军方标准是达到99%。对于通用软件来说就要根据公司实际情况了。

缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程

1) 测试人员或开发人员发现bug后,判断属于哪个模块的问题,填写bug报告后,系统会自动通过Email通知项目组长或直接通知开发者。

2) 经验证无误后,修改状态为VERIFIED(已证实).待整个产品发布后,修改为CLOSED(关闭)

3) 还有问题,REOPENED(重新打开),状态重新变为“New",并发邮件通知。

4) 项目组长根据具体情况,重新分配给bug所属的开发者。

5) 若是,进行处理,断言并给出解决方法。(可创建补丁附件及补充说明)

6) 开发者收到Email信息后,判断是否为自己的修改范围。

7) 若不是,重新分配给项目组长或应该分配的开发者。

8) 测试人员查询开发者已修改的bug,进行重新测试。确认无误后,关闭该bug。

自动化测试

1.适用单独的测试工具软件控制测试的自动化执行以及对预期和结果进行自动检查。

2.手工测试和自动化测试的区别?

手动测试:优点:易发现缺陷、容易实施、灵活性 缺点:覆盖量低、重复测试效率低、可靠性低、人力资源依赖

自动化测试:优点:高效率,速度快、高复用性、覆盖率高、准确可靠、不知疲劳 缺点:机械发现缺陷率低、一次性投入大

冒烟测试

关于冒烟测试,就是开发人员在个人版本的软件上执行目前的冒烟测试项目,确定新的程序代码不出故障。冒烟测试目的是确认软件基本功能正常,现基本执行对象为测试人员,在正规测试一个新版本之前,投入较少的人力和时间验证基本功能,通过则测试准入。

alpha测试和beta测试的区别

α测试

α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。α测试的目的是评价软件产品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)。

大型通用软件,在正式发布前,通常需要执行Alpha和Beta测试。α测试不能由程序员或测试员完成。

β测试

Beta测试是一种验收测试。Beta测试由软件的最终用户们在一个或多个客房场所进行。

1、测试时间不同:

Beta测试是软件产品完成了功能测试和系统测试之后,产品发布之前所进行的软件测试活动,它是技术测试的最后一个阶段。

alpha测试简称“α测试”,可以从软件产品编码结束之时开始,或在模块(子系统)测试完成之后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。

2、测试的目的不同:

α测试的目的是评价软件产品的(即功能、局域化、可用性、可靠性、性能和支持)。尤其注重产品的界面和特色。α测试即为非正式验收测试。

Beta测试是一种验收测试,通过了验收测试,产品就会进入发布阶段。

3、测试人员及场所不同:

α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,α测试不能由程序员或测试员完成。α测试发现的错误,可以在测试现场立刻反馈给开发人员,由开发人员及时分析和处理。

Beta测试由软件的最终用户们在一个或多个客户场所进行。开发者通常不在Beta测试的现场,因Beta测试是软件在开发者不能控制的环境中的“真实”应用。

软件测试风险

测试人员:业务不熟、人员变动、疲态、同化效应、定位效应

测试材料:需求变更、质量标准不一样、测试用例或测试数据设计不充分

测试环境:测试软件版本不统一、软件环境不统一、硬件环境不统一、硬件不到位

测试时间:测试时间不足、测试时间延长

测试方法:错误或缺失测试方法、场景缺失、测试用例实施不充分

自动化测试工具

jenkins: Jenkins是一个开源CI服务器,基于Web访问,jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性,拥有大量的插件:这些插件极大的扩展了Jenkins的功能,持续集成工具,所有工作都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间和工作量;

selenium :web自动化测试框架(测试浏览器兼容性的自动化)selenium不支持桌面软件自动化测试。软件测试报告,和用例管理只能依赖第三方插件unittest优点:兼容更多的平台( Windows、Linux 、Macintosh等)以及浏览器(火狐,IE,谷歌等)

定位元素方式:id、name、class_name、tagname、link_text、partial_link_text、xpath、css_selector

pytest:pytest是一个全功能的Python测试框架,

优点:

1、简单灵活,容易上手,文档丰富;

2、支持参数化,可以细粒度地控制要测试的测试用例;

3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);

4、pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;

5、测试用例的skip和xfail处理;

6、可以很好的和CI工具结合,例如jenkins

unitest: unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果

selenium 和 Appium 是怎么联系的?有什么关系?

一、 selenium是专门做web端的自动化测试工具

Selenium与其他测试工具相比,最大好处是:

Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Chrome和 Firefox 中运行。其他测试工具都不能覆盖如此多的平台。使用 Selenium 和在浏览器中运行测试还有很多其他好处。

下面是主要的两大好处:

通过编写模仿用户操作的 Selenium 测试脚本,可以从终端用户的角度来测试应用程序。通过在不同浏览器中运行测试,更容易发现浏览器的不兼容性。Selenium 的核心,也称browserbot,是用 JavaScript 编写的。这使得测试脚本可以在受支持的浏览器中运行。browser bot 负责执行从测试脚本接收到的命令,测试脚本要么是用 HTML 的表布局编写的,要么是使用一种受支持的编程语言编写的。

二、appium是手机app端的自动化,它继承了webdriver(也就是selenium 2)

不过appium仍然需要通过selenium最后做测试工具,但是appium起到了一个连接手机端非常好的桥梁工作!可以连接到电脑上非常方便的调用selenium工具来做测试。

Selenium 1.0版包括三个部分,分别是Selenium IDE(插件,用于录屏,并转化代码)、SeleniumGrid(扩展工具集)和Selenium RC(Remote Controller),其中最主要部分为SeleniumRC。

但是Selenium与WebDriver合并后,Selenium2.0就等价为WebDriver了,所以学习Selenium2.0的话,相当于主要学习WebDriver API了。

3.0版本直到2016年才发布,该版本彻底移出了Selenium RC,对开发环境也有了限制(例如只支持jvav8以上版本,对不同的浏览器也有最低版本要求)。相对而言,2.0版的通用性更高。

软件开发过程中的角色分工?(测试的主要工作)

测试配合开发等进行需求分析和讨论,根据需求说明书指定《项目测试计划》,编写测试用例,建立测试环境。

测试负责新产品测试,原有产品的升级测试,负责软件问题解决过程跟踪,软件开发文档、开发工作的规范化,管理开发部门的产品文档,制作用户手册、操作手册,产品上限测试,监督软件开发过程执行,提高软件质量。

测试环境划分

开发环境:开发环境是程序猿们专门用于开发的服务器,配置可以比较随意,为了开发调试方便,一般打开全部错误报告。

测试环境:一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。

生产环境:是指正式提供对外服务的,一般会关掉错误报告,打开错误日志。可以理解为包含所有的功能的环境,任何项目所使用的环境都以这个为基础,然后根据客户的个性化需求来做调整或者修改。

三个环境也可以说是系统开发的三个阶段:开发->测试->上线,其中生产环境也就是通常说的真实环境。

UAT环境:UAT,(User Acceptance Test),用户接受度测试即验收测试,所以UAT环境主要是用来作为客户体验的环境。

仿真环境:顾名思义是和真正使用的环境一样的环境(即已经出售给客户的系统所在环境,也成为商用环境),所有的配置,页面展示等都应该和商家正在使用的一样,差别只在环境的性能方面。

http和https的区别

HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。

HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。

10.列举Http请求中的状态码?GET/ POST/DELETE

404 请求的url地址不存在

503 访问限制有权限

200 访问成功

302 重定向

三.linux系统

3.1 Linux系统基础

请你说一说PC网络故障,以及如何排除障碍

参考回答:

(1)首先是排除接触故障,即确保你的网线是可以正常使用的。然后禁用网卡后再启用,排除偶然故障。打开网络和共享中心窗口,单击窗口左上侧“更改适配器设置”右击其中的“本地连接“或”无线网络连接”,单击快捷菜单中的“禁用”命令,即可禁用所选网络。接下来重启网络,只需右击后单击启用即可。

(2)使用ipconfig查看计算机的上网参数

1、单击“开始|所有程序|附件|命令提示符“,打开命令提示符窗口

2、输入ipconfig,按Enter确认,可以看到机器的配置信息,输入ipconfig/all,可以看到IP地址和网卡物理地址等相关网络详细信息。

(3)使用ping命令测试网络的连通性,定位故障范围

在命令提示符窗口中输入”ping127.0.0.1“,数据显示本机分别发送和接受了4个数据包,丢包率为零,可以判断本机网络协议工作正常,如显示”请求超时“,则表明本机网卡的安装或TCP/IP协议有问题,接下来就应该检查网卡和TCP/IP协议,卸载后重装即可。

(4)ping本机IP

在确认127.0.0.1地址能被ping通的情况下,继续使用ping命令测试本机的IP地址能否被ping通,如不能,说明本机的网卡驱动程序不正确,或者网卡与网线之间连接有故障,也有可能是本地的路由表面收到了破坏,此时应检查本机网卡的状态是否为已连接,网络参数是否设置正确,如果正确可是不能ping通,就应该重新安装网卡驱动程序。丢失率为零,可以判断网卡安装配置没有问题,工作正常。

(5)ping网关

网关地址能被ping通的话,表明本机网络连接以及正常,如果命令不成功,可能是网关设备自身存在问题,也可能是本机上网参数设置有误,检查网络参数。

TCP和UDP是什么?

TCP:

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。

UDP:

Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。RFC 768 描述了 UDP。

二、TCP和UDP有什么区别?

1.TCP和UDP区别总结

TCP面向连接,通过三次握手建立连接,四次挥手接除连接;UDP是无连接的,即发送数据之前不需要建立连接,这种方式为UDP带来了高效的传输效率,但也导致无法确保数据的发送成功。

TCP是可靠的通信方式。通过TCP连接传送的数据,TCP通过超时重传、 数据校验等方式来确保数据无差错,不丢失,不重复,且按序到达;而UDP由于无需连接的原因,将会以最大速度进行传输,但不保证可靠交付,也就是会出现丢失、重复等等问题。

TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流,由于连接的问题,当网络出现波动时,连接可能出现响应问题;UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低。

每一条TCP连接只能是点到点的;而UDP不建立连接,所以可以支持一对一,一对多,多对一和多对多的交互通信,也就是可以同时接受多个人的包。

TCP需要建立连接,首部开销20字节相比8个字节的UDP显得比较大。

TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。

2.TCP三次握手和四次挥手

2.TCP三次握手

三次握手是TCP用来确保连接可靠建立的方式:

第一次握手: A给B发短信说:“B,你现在有空吗?”

第二次握手: B此时收到了A的信息,然后对A说: “ 我有空,你呢?有空吗? ”

第三次握手: A此时收到了B的确认信息,然后说:“我也有空,那我跟你说个事。”

在三次握手之后,A和B都能确定这么一件事: 双方的通信可以流畅的进行。 这样,双方就可以开始进行正常的对话了。

2.TCP四次挥手

四次挥手是TCP用来确保连接可靠关闭的方式:

第一次挥手: A给B发短信说:“B,我要准备吃饭了?”

第二次挥手: B此时收到了A的信息,然后先对A说: “ 我知道了。”

第三次挥手: B对A说到: “ 我也要准备吃饭了。”然后放下了手机,

第四次挥手: A此时收到了B的确认信息,然后想B发一个包说:“好的,我知道了。”这时才放下手机去吃饭,

在四次挥手之后,A和B都能确定这么一件事: 双方的通信可以正常关闭。 这样,双方就可以确定对方已经完全知晓自己确认要关闭连接。

3.TCP维护可靠的通信方式

数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组;

到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认包;

超时重发:发送方在发送分片后计时,若超时却没有收到相应的确认包,将会重发对应的分片;

滑动窗口:TCP连接双方的接收缓冲空间大小都固定,接收端只能接受缓冲区能接纳的数据。

失序处理:TCP的接收端需要重新排序接收到的数据。

重复处理:如果传输的TCP分片出现重复,TCP的接收端需要丢弃重复的数据。

数据校验:TCP通过保持它首部和数据的检验和来检测数据在传输过程中的任何变化。

4.TCP和UDP使用场景

1.UDP 使用场景:

因此UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务,随时都可以发送数据,处理简单且高效。

所以主要使用在以下场景:

包总量较小的通信(DNS、SNMP)

视频、音频等多媒体通信(即时通信)

QQ就是使用的UDP协议。

广播通信

主要是一切追求速度的场景上

2.TCP 使用场景:

TCP 使用场景:相对于 UDP,TCP 实现了数据传输过程中的各种控制,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。在对可靠性要求较高的情况下,可以使用 TCP,即不考虑 UDP 的时候,都可以选择 TCP。

特别是需要可靠连接,比如付费、加密数据等等方向都需要依靠TCP

什么是Linux

Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的Unix工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

什么是 Linux 内核

Linux系统的核心是内核。内核控制着计算机系统上的所有硬件和软件,在必要时分配硬件,并根据需要执行软件。

Linux的基本组件

就像任何其他典型的操作系统一样,Linux拥有所有这些组件:内核,shell和GUI,系统实用程序和应用程序。Linux比其他操作系统更具优势的是每个方面都附带其他功能,所有代码都可以免费下载。

Linux的体系结构

可以分为两块:用户空间(User Space) :用户空间又包括用户的应用程序(User Applications)、C 库(C Library) 。

内核空间(Kernel Space) :内核空间又包括系统调用接口(System Call Interface)、内核(Kernel)、平台架构相关的代码(Architecture-DependentKernel Code) 。

Linux 体系结构要分为用户空间和内核空间的原因

1、现代 CPU 实现了不同的工作模式,不同模式下 CPU 可以执行的指令和访问的寄存器不同。

2、Linux 从 CPU 的角度出发,为了保护内核的安全,把系统分成了两部分。

用户空间和内核空间是程序执行的两种不同的状态,我们可以通过两种方式完成用户空间到内核空间的转移:1)系统调用;2)硬件中断。

什么是交换空间

交换空间是Linux使用的一定空间,用于临时保存一些并发运行的程序。当RAM没有足够的内存来容纳正在执行的所有程序时,就会发生这种情况。

什么是root帐户

root帐户就像一个系统管理员帐户,允许你完全控制系统。你可以在此处创建和维护用户帐户,为每个帐户分配不同的权限。每次安装Linux时都是默认帐户。

什么是CLI

命令行界面(英语**:command-line interface**,缩写]:CLI)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为字符用户界面(CUI)。

通常认为,命令行界面(CLI)没有图形用户界面(GUI)那么方便用户操作。因为,命令行界面的软件通常需要用户记忆操作的命令,但是,由于其本身的特点,命令行界面要较图形用户界面节约计算机系统的资源。在熟记命令的前提下,使用命令行界面往往要较使用图形用户界面的操作速度要快。所以,图形用户界面的操作系统中,都保留着可选的命令行界面。

什么是GUI

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。

图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠标等输入设备操纵屏幕上的图标或菜单选项,以选择命令、调用文件、启动程序或执行其它一些日常任务。与通过键盘输入文本或字符命令来完成例行任务的字符界面相比,图形用户界面有许多优点。

常见目录说明

/bin:存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里;

/etc:存放系统管理和配置文件;

/home:存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示;

**/usr **:用于存放系统应用程序;

/opt:额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里;

/proc:虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息;

/root:超级用户(系统管理员)的主目录(特权阶级o);

/sbin: 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等;

/dev:用于存放设备文件;

/mnt:系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统;

/boot:存放用于系统引导时使用的各种文件;

**/lib **:存放着和系统运行相关的库文件 ;

/tmp:用于存放各种临时文件,是公用的临时文件存储点;

/var:用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等;

/lost+found:这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里。

什么是硬链接和软链接

1)硬链接

由于 Linux 下的文件是通过索引节点(inode)来识别文件,硬链接可以认为是一个指针,指向文件索引节点的指针,系统并不为它重新分配 inode 。每添加一个一个硬链接,文件的链接数就加 1 。

不足:1)不可以在不同文件系统的文件间建立链接;2)只有超级用户才可以为目录创建硬链接。

2)软链接

软链接克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。因而现在更为广泛使用,它具有更大的灵活性,甚至可以跨越不同机器、不同网络对文件进行链接。

不足:因为链接文件包含有原文件的路径信息,所以当原文件从一个目录下移到其他目录中,再访问链接文件,系统就找不到了,而硬链接就没有这个缺陷,你想怎么移就怎么移;还有它要系统分配额外的空间用于建立新的索引节点和保存原文件的路径。

实际场景下,基本是使用软链接。总结区别如下

硬链接不可以跨分区,软件链可以跨分区。

硬链接指向一个 inode 节点,而软链接则是创建一个新的 inode 节点。

删除硬链接文件,不会删除原文件,删除软链接文件,会把原文件删除。

Linux开机启动过程?

了解即可。

1、主机加电自检,加载 BIOS 硬件信息。

2、读取 MBR 的引导文件(GRUB、LILO)。

3、引导 Linux 内核。

4、运行第一个进程 init (进程号永远为 1 )。

5、进入相应的运行级别。

6、运行终端,输入用户名和密码。

3.2常用Linux命令

ls,help,cd,more,clear,mkdir,pwd,rm,grep,find,mv,su,date

3.2.1查看文件

查看文件信息:ls [选项] 目录或文件

–a

显示所有文件包括隐藏文件

-l

显示详细信息

-h

人性化显示

-i

显示i节点

知行合一2023_第14张图片

(1)文件类型:“-”表示常规文件;“d”表示目录;“c”表示字符设备文件;“b”表示块设备文件;“s”表示管道文件;“l”表示链接文件。

(2)文件存取权限:从左到右每3位为一组,依次代表文件拥有者、同组用户和其他用户的存取权限。通常文件共有3个权限,“r”表示只读;“w”表示可写;“x”表示可执行;“-”表示未设置。

(3)文件的属主和组:在Linux下每个文件都属于特定的用户和组,文件的属主和超级用户对文件用户最大的存取权限。

查看文件内容

head命令:该命令用于从文件头部查看文件,默认情况下只能阅读文件的前十行,也可以通过指定一个数字选项来改变要显示的行数。

head [参数] 文件名

知行合一2023_第15张图片

注意:如果没有接文件名,那么将会显示用户从键盘上输入的字符。

tail命令:使用tail命令可以查看文件结尾内容,默认显示最后十行。

tail [参数] 文件名

知行合一2023_第16张图片

cat命令:cat命令可以用来查看文件内容,也可以用于合并文件。还可以利用cat命令从键盘读取数据。

cat [参数] 文件名

知行合一2023_第17张图片

cat命令后面可以接多个文件名,依次将其内容显示出来。还可以使用重定向符“>”将多个文件合并输出到另一个文件中。

root]# cat file2 file3 > file4

注意:file2、file3必须是已存在的文件,如果file4文件不存在,那么系统将重建file4文件。

more命令:more可将文件部分内容显示在屏幕上,但是它每次只显示一页,按下空格键可以显示下一页,按下q键退出显示。

less命令:less命令作用和more命令类似,可用于浏览文本文件的内容。不同的是,less命令允许用户使用光标键反复浏览文本。

less [参数] 文件名

知行合一2023_第18张图片

3.2.2 搜索命令

1)内容搜索:grep

在指定文件中搜索特定的字符内容,并将含有这些字符内容的行输出

grep 【选项】 [“字符串”]

grep -r '字符串' 路径

-v 【取反】

2)速度最快: locate

该命令用于通过文件名或扩展名搜索文件。

locate 文件名 (按数据库查找)

updated 更新数据库

3)find命令

find命令功能非常强大,通常用来在特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。

find 【搜索范围】 【搜索条件】(系统压力大,搜索慢)

4) 搜索命令的命令

i. whereis

–b 只看可执行文件

-m 只看帮助文档

ii. which(看到别名)

3.2.3目录文件处理命令

建立目录:mkdir

mkdir 【-p】 【目录名】

-p 同时建立根目录与子目录

建立文件:touch

touch还可以修改文件的存取和修改日期。

touch [参数] 文件名

知行合一2023_第19张图片

切换目录:cd

cd 【目录】

cd ~ 进入当前用户家目录

cd - 进入上次目录

cd .. 进入上一级目录

cd . 进入当前目录

查询当前目录所在位置:pwd

删除空目录:rmdir

rmdir [-p] 目录

参数-p表示递归删除目录,当子目录删除后,其父目录为空时也一同被删除。

删除文件或目录:r

rm -rf 【文件或目录】

–r 删除目录 –f 强制

复制:cp

cp 【选项】 【源文件或目录】 【目标文件或目录】

知行合一2023_第20张图片

剪切或改名:mv

mv 【源文件或目录】 【目标文件或目录】

如果源文件和目标文件的类型都为文件,且两个文件同在一个目录,则是将源文件重命名为目标文件。

链接命令:ln

ln -s 【源文件】 【目标文件】

–s 软链接(类似源文件的快捷方式)

硬链接(i节点相同,相同存储快,不跨分区,文件操作)

3.2.4归档与压缩

1)tar

【1】打包与解包(.tar文件)

tar -cvf 【文件名】【源文件1,2】

-c:打包

-v:显示过程

-f:指定打包后的文件名

tar-xvf【文件名】

-x:解打包

【2】压缩与解压(.tar.zp)

tar-zcvf【包名.tar.gz】【源文件1,2】

tar-zxvf【包名.tar.gz】

tar-zxvf【包名.tar.gz】 -C 【解压位置】

【3】压缩与解压(.tar.bz2)

tar-jcvf【压缩包名.tar.bz2】【源文件1,2】

tar-jxvf【压缩包名.tar.bz2】

2) zip

zip【压缩文件名】【源文件】#压缩文件

zip -r【压缩文件名】【源目录】#压缩目录

unzip【压缩文件】 #解压缩

3) gzip

gzip【原文件】#源文件消失

gzip -c【原文件】>【压缩文件】#保留原文件

gzip -r【目录】 #压缩目录下所有文件,不压缩目录

gzip -d 【文件名】#解压缩

gunzip 【文件名】#解压缩

4) bzip

bzip2【源文件】

bzip2 -k【源文件】#保留原文件

bzip -d【原文件】#解压缩

bunzip2【原文件】

3.2.5 chmod用户相关命令

1)chmod

使用chmod命令修改文件或目录的访问权限。

chmod [参数] 文件或目录名

说明:该命令的参数部分可以使用符号表达式,也可以使用八进制数充当。当使用字符表达式时,包括三部分,即用户对象、操作符号和读写权限。

(1)用户对象,分为属主用户(u)、属组(g)、其他用户(o)和所有用户(a)

(2)操作符号,+(添加某个权限)-(取消某个权限)=(赋予给定权限并取消其他所有权限)

(3)读写权限,r:可读权限 w:可写权限 x:可执行

chmod [7][7][7] [file] 赋予最高权限

2)用户

useradd 名 #创建用户

su 名 #切换用户

password 名 #给其密码

userdel 名 #删除用户

sudo su #切换管理员帐号

3.2.6 关机与重启

1)关机与重启

1.(更安全)

shutdown【选项】时间

-c取消刚才的命令

-h关机

-r重启

2.(直接但不安全)关机

halt

poweroff

inin 0(init 5 图形界面;3 字符界面;runlevel 看级别)

3.(较安全)重启

reboot

4. 退出登录

logout

3.2.7 进程管理:ps

ps命令用于查看进程统计信息

常用参数:

a:显示当前终端下的所有进程信息,包括其他用户的进程。

u:使用以用户为主的格式输出进程信息。

x:显示当前用户在所有终端下的进程。

-e:显示系统内的所有进程信息。

-l:使用长(long)格式显示进程信息。

-f:使用完整的(full)格式显示进程信息。

-T:查看进程下面的子线程

在使用中可以加上grep命令一起使用,也可以单独使用

# ps命令单独使用的情况

ps -elf tomcat

#结合管道操作和grep命令进行过滤,用于查询某一个进程的信息

ps -elf | grep tomcat

3.2.8 netstat端口管理

netstat:查看端口开放情况

-a:表示列举所有的连接、服务器监听

-t:列出所有tcp协议的服务

-u:列出所有udp协议的服务

-n:使用端口号来显示

-l:列出所有的监听

-p:列出所有服务的进程id(pid)

常用:netstat -atunlp

3.2.9 top命令使用

top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具,TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,有点像window系统的任务管理器

top命令分为上下两个部分:

  • 系统统计信息

  • 系统进程信息

知行合一2023_第21张图片

row1:任务队列信息,同 uptime 命令的执行结果

top - 11:38:01 up 231 days, 2:06, 1 user, load average: 0.88, 0.22, 0.18

11:38:01 (当前系统时间)

up 231 days, 2:06(系统运行时间)

1 user (当前登录用户数)

load average: 0.88, 0.22, 0.18 (系统的平均负载数,表示 1分钟、5分钟、15分钟到现在的平均数)

row2:进程统计信息

Tasks: 170 total, 1 running, 169 sleeping, 0 stopped, 0 zombie

170 total(系统当前总进程总数)

1 running (正在运行的进程数)

169 sleeping(睡眠进程数)

0 stopped (停止进程数)

0 zombie (僵尸进程数)

row3:CPU 统计信息

%Cpu(s): 38.7 us, 3.5 sy, 0.0 ni, 42.0 id, 15.5 wa, 0.0 hi, 0.3 si, 0.0 st

38.7 us, (用户空间CPU占用率)

3.5 sy (内核空间CPU占用率)

0.0 ni (用户进程空间改变过优先级的进程CPU的占用率)

42.0 id(空闲CPU占有率)

15.5 wa (等待输入输出的CPU时间百分比)

0.0%hi (硬件中断请求)

0.3%si (软件中断请求)

0.0%st (分配给运行在其它虚拟机上的任务的实际 CPU时间)

row4:内存状态

KiB Mem : 8010580 4671188 , 927820 free, 2411572 used, 4671188 buff/cache

4671188 total (物理内存总量 )

2411572 used (已使用的内存 )

927820 free (空闲内存 )

4671188 buffers (内核缓存使用)

ps:以k为单位

row5:swap交换分区信息

KiB Swap: 4063228 total, 2933688 free, 1129540 used. 5153128 avail Mem

4063228 total (交换分区总量 )

1129540 used (已使用交换分区内存 )

2933688 free (空闲交换分区 )

5153128 cached (缓冲交换区 )

系统进程信息

PID :进程id

USER :进程所有者的用户名

PR :进程优先级

NI :nice值。负值表示高优先级,正值表示低优先级

VIRT :进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES

RES :进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

SHR :共享内存大小,单位kb

S :进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

%CPU :上次更新到现在的CPU时间占用百分比

%MEM :进程使用的物理内存百分比

TIME+ :进程使用的CPU时间总计,单位1/100秒

COMMAND :进程名称[命令名/命令行]

3.2.10 df命令使用

df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

语法:df(选项)(参数)

选项:

-a或–all:包含全部的文件系统;

–block-size=<区块大小>:以指定的区块大小来显示区块数目;

-h或–human-readable:以可读性较高的方式来显示信息;

-H或–si:与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes;

-i或–inodes:显示inode的信息;

-k或–kilobytes:指定区块大小为1024字节;

-l或–local:仅显示本地端的文件系统;

-m或–megabytes:指定区块大小为1048576字节;

–no-sync:在取得磁盘使用信息前,不要执行sync指令,此为预设值;

-P或–portability:使用POSIX的输出格式;

–sync:在取得磁盘使用信息前,先执行sync指令;

-t<文件系统类型>或–type=<文件系统类型>:仅显示指定文件系统类型的磁盘信息;

-T或–print-type:显示文件系统的类型;

-x<文件系统类型>或–exclude-type=<文件系统类型>:不要显示指定文件系统类型的磁盘信息;

–help:显示帮助;

–version:显示版本信息。

比较常用的有:

df -a 查看全部的文件系统

df -h查看磁盘使用情况

df -i 查看inode使用情况

3.2.11其他命令

du -sh * 查看当前文件夹下文件大小

uname 命令用于查看内核版本

date 查看当前时间

linux,root用户登录成功后,要修改用户密码步骤:

【1】输入命令:passwd

【2】输入新密码,然后确认新密码,就是输入两次新密码,回车;

【3】修改成功,退出登录,新新密码重新登录。

3.3 vim操作

vim命令使用,直接加上文件名就行

vim的模式

Normal 模式:进入Vim后的一般模式

Insert 模式:按下i键后进入该模式,可以修改文档。

Visual 模式:按下v键后进入该模式,可以选择文档内容。

vim退出

:q:退出。

:q!:强制退出,放弃所有修改。

:wq:保存修改并退出。

一些快捷键

方向键也可以用h、j、k、l。

:0到行首,:$到行尾。

按/查找,输入关键字查找,n下一个,N上一个

shift + g 跳转到文件末行

翻屏

向上翻屏:按键ctrl + b (before) 或 PgUp

向下翻屏:按键ctrl + f (after) 或 PgDn

复制操作

①复制光标所在行

按键:yy

粘贴:在想要粘贴的地方按下p键

②以光标所在行为准(包含当前行),向下复制指定的行数

按键:数字yy

③可视化复制

按键:ctrl + v(可视块)或V(可视行)或v(可视),然后按下↑↓←→方向键来选中需要复制的区块,按下y键进行复制,最后按下p键粘贴

剪切/删除

①剪切/删除光标所在行

按键:dd (删除之后下一行上移)

注意:dd严格意义上说是剪切命令,但是如果剪切了不粘贴就是删除的效果。

②剪切/删除光标所在行为准(包含当前行),向下删除/剪切指定的行

按键:数字dd (删除之后下一行上移)

③剪切/删除光标所在的当前行之后的内容,但是删除之后下一行不上移

按键:D (删除之后当前行会变成空白行)

④可视化删除

按键:ctrl + v(可视块)或V(可视行)或v(可视),上下左右移动,按下D表示删除选中行,d表示删选中块

撤销/恢复

撤销:输入:u (不属于命令模式) 或者 u (undo)

恢复:ctrl + r 恢复(取消)之前的撤销操作

3.4 Linux命令:

mv 移动文件夹

source 更新

tar -vxzf 解压

cd /home 进入 '/ home' 目录'

cd .. 返回上一级目录

cd ../.. 返回上两级目录

cd 进入个人的主目录

cd ~user1 进入个人的主目录

cd - 返回上次所在的目录

pwd 显示工作路径

ls 查看目录中的文件

vi 编辑

wq 编辑保存

ls -F 查看目录中的文件

ls -l 显示文件和目录的详细资料

ls -a 显示隐藏文件

ls *[0-9]* 显示包含数字的文件名和目录名

tree 显示文件和目录由根目录开始的树形结构

lstree 显示文件和目录由根目录开始的树形结构

mkdir dir1 创建一个叫做 'dir1' 的目录'

mkdir dir1 dir2 同时创建两个目录

mkdir -p /tmp/dir1/dir2 创建一个目录树

rm -f file1 删除一个叫做 'file1' 的文件'

rmdir dir1 删除一个叫做 'dir1' 的目录'

rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容

rm -rf dir1 dir2 同时删除两个目录及它们的内容

mv dir1 new_dir 重命名/移动一个目录

cp file1 file2 复制一个文件

cp dir/* . 复制一个目录下的所有文件到当前工作目录

cp -a /tmp/dir1 . 复制一个目录到当前工作目录

cp -a dir1 dir2 复制一个目录

ln -s file1 lnk1 创建一个指向文件或目录的软链接

ln file1 lnk1 创建一个指向文件或目录的物理链接

文件搜索

find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录

find / -user user1 搜索属于用户 'user1' 的文件和目录

find /home/user1 -name \*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件

find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件

find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件

find / -name \*.rpm -exec chmod 755 '{}' \;搜索以 '.rpm' 结尾的文件并定义其权限

find / -xdev -name \*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备

locate \*.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令

whereis halt 显示一个二进制文件、源码或man的位置

which halt 显示一个二进制文件或可执行文件的完整路径

四.ros常见问题

4.1 ros基础

ros是什么

ROS就是一个为了提高机器人开发的软件复用率,开发的一款具有独特的通信机制、丰富的开发工具、海量的应用功能、良好的生态系统集的工具

Subscriber和Publisher的消息队列起什么作用,队列的大小有什么影响?

简单描述一下,Publisher的消息队列是为了缓存发布节点发布的消息,一旦队列中消息的数量超过了queue_size,那么最先进入队列的(最老的)消息被舍弃。Subscriber的消息队列是为了缓存节点接收到的信息,一旦自己处理的速度过慢,接收到的消息数量超过了queue_size,那么最先进入队列的(最老的)消息会被舍弃。所以,我们想只处理最新的消息,实际上只需要把两个queue_size都设置成1,那么系统不会缓存数据,自然处理的就是最新的消息。

Subscriber有消息队列缓存消息了,为什么Publisher还要有消息队列?

在我看来,Publisher的消息队列是一定要有的,因为ROS中发布节点往外发送消息是基于Topic发送,而不是直接向Subscriber订阅者发送,所以必须要有一个消息队列来存放发布的消息,以供订阅者来获取。而且这个消息队列的好处是在网络差、带宽小、延时高的时候,保证数据不容易丢失。

既然Publisher有消息队列了,为什么Subscriber还要有消息队列?

这个问题比较难一点。我的理解是,由于ROS毕竟是分布式系统,Publisher和Subscriber不一定在同一台主机上,因此消息需要通过网络来交换。但是网络的性能时好时坏,如果Subscriber没有消息队列,那么每次运行Callback函数前都要先通过网络取回消息,然后才能处理。当网络很差时,就会让系统堵塞。而有消息队列的话,Subscriber就可以一边处理队列中的消息,一边通过网络缓存新的消息,而不用每次处理消息前都要临时去读一个回来。这样就增加了系统的可靠性。

为什么要设置缓冲区的大小?

这个缓冲区的大小是指消息队列使用的缓冲区物理内存空间大小。如果这个空间小于一个消息所需要的空间,比如消息是一副图片或者一帧点云,数据量超过了缓冲区的大小。这个时候为了保证通信不发生错误,就会触发网络通信的保护机制,TCP的Buffer会为你缓存消息。这种机制就会导致每一帧消息都被完整的缓存下来,没有消息被丢弃,感觉上就像queue_size被设置成了无穷大。详细说明请参考:

ros1通信模型

talker注册

listener注册

ROS Master进行信息匹配

listener 发送链接请求

talker确认请求

建立连接

talker给listener发数据

4.2 ROS开发常用的工具

launch文件,可以同时启动多个ros节点,可自动启动rosmaster。关于launch的细节,自己学习就好。

TF坐标变换,用来描述机器人系统中繁杂的坐标系。

QT工具箱,用来可视化各个ros节点之间的订阅或者请求关系或者可视化各种话题的数据。常用命令,rqt_graph、rqt_plot,而且还可以动态修改部分参数。

rqt_reconfigure(不常用)。

rviz可视化平台,机器人可视化平台,几乎是最常用的工具。使用rviz命令启动。

Gazebo物理仿真环境,可对机器人进行三维物理仿真。需要仿真的同学常用。

4.3 ROS的常用命令

#最常用

roscore #启动rosmaster

rosrun pkg_name node_name #启动ros节点

roslaunch pkg_name launch_files_name #启动launch文件

catkin_make #编译工作空间

rospack profile #刷新功能包路径

#环境变量

echo $ROS_PACKAGE_PATH #打印ros环境变量

export | grep ROS #确认环境变量已经设置正确

source devel/setup.bash #刷新环境变量

echo "source~/catkin_test_ws/devel/setup.bash" >> ~/.bashrc #刷新环境变量,永久有效

source ~/.bashrc #生效上一句

#功能包

catkin_create_pkg test_package std_msgsroscpp rospy #创建名字为test_package的功能包,添加std_msgs roscpp rospy依赖

rospack list #查看软件包列表

rospack find package-name #定位软件包

roscd package-name #切换到指定功能包目录

#话题

rostopic list #输出当前运行的topic列表

rostopic info topic-name #查看话题信息

rostopic echo topic-name #输出话题数据

rostopic hz topic-name #每秒发布的消息数量

rostopic bw topic-name #每秒发布信息所占的字节量

#工具

rviz #启动rviz

rqt_graph #可视化节点关系

知行合一2023_第22张图片

rqt_plot #可视化话题数据

知行合一2023_第23张图片

rosrun rqt_tf_tree rqt_tf_tree #查看tf树

#数据记录与播放

rosbag play bag_files_name #播放bag文件

rosbag play -l 循环播放,(-r 10 倍数播放)

rosbag play --topics 播放指定话题

rosbag record -a #录制所有topic到bag文件

-O NAME, --output-name=NAME 大写是完整名字,小写是.bag得前缀名字

record to bag with name NAME.bag

--split split the bag when maximum size or duration is reached

--size=SIZE record a bag of maximum size SIZE MB. (Default:

infinite)

切包

rosbag record --duration=30 /topic_name #持续30s录制,还可以指定m,h,和--split类似

rosbag record --split --size=1024 /topic_name1 #空间达到1024M后分文件存储

rosbag record --split --duration=30 /topic_name1 #持续时间到30s后分文件存储

rosbag record --split --duration=5m /topic_name1 #持续时间到5m后分文件存储

rosbag record --split --duration=2h /topic_name1#持续时间到2h后分文件存储

rosbag record -l 1000 /topic_name1 # 录制该主题1000个消息限制

.bag文件生成失败,只出现.bag.active文件

根据目前的经验,出现这情况是因为电脑在记录消息时卡掉了,没有完成最终的录制。可以转换成.bag文件,但是消息有丢失(电脑卡掉后的话题内容)

恢复:

①切换到"xxx.bag.active"文件所在的目录下;

②命令行输入“rosbag reindex xxx.bag.active”;

③输入"rosbag fix xxx.bag.active outfile_name.abg";

rosbag info topic_name

知行合一2023_第24张图片

4.4 ROS实际操作

4.4.1如何新建一个工作空间

最基础的功能包都不会写,怎么意思说学过ROS:

cd ~/catkin_test_ws/src #进入存放功能包的地方

catkin_create_pkg test_package std_msgsroscpp rospy #创建名字为test_package的功能包,添加std_msgs roscpp rospy依赖

cd ~/catkin_test_ws

catkin_make #编译

source devel/setup.bash #新建功能包刷新环境变量,才能找到功能包

rospack profile #如果还是找不到功能包,使用该命令刷新功能包路径

4.4.2如何新建一个功能包?

这也是需要每个人都要会的,连个最基础的功能包都不会写,怎么好意思说学过ROS?

cd ~/catkin_test_ws/src #进入存放功能包的地方

catkin_create_pkg test_package std_msgsroscpp rospy #创建名字为test_package的功能包,添加std_msgs roscpp rospy依赖

cd ~/catkin_test_ws

catkin_make #编译

source devel/setup.bash #新建功能包刷新环境变量,才能找到功能包

rospack profile #如果还是找不到功能包,使用该命令刷新功能包路径

这里需要注意一点,同一个工作空间下不能存在同名功能包,不同的工作空间下可以存在同名功能包。但是要注意一个问题,ROS运行时会优先选择最前端工作空间的同名功能包。为了避免出现意想不到的问题,所以工作空间尽量不使用同名功能包。

功能包的名称尽量按照a_b_c的格式书写,否则,编译过程将会出现警告。

4.5 ros2和cyberrt比较

知行合一2023_第25张图片

ROS 应用于自动驾驶领域的不足:

  • 调度的不确定性:各节点以独立进程运行,节点运行顺序无法确定,因而业务逻辑的调度顺序无法保证;

  • 运行效率:ROS 为分布式系统,存在通信开销

五,特色

高性能:无锁对象,协程(coroutine),自适应通信机制;

确定性:可配置的任务以及任务调度,通过协程将调度从内核空间转移到用户空间;

模块化:在框架内实现组件以及节点,即可完成系统任务;

便利性:创建和使用任务

五.apollo无人驾驶

5.1自动驾驶基础

apollo链接:#Apollo自动驾驶进阶课程 (qq.com)

csdn_apollo链接: (118条消息) Apollo自动驾驶进阶课(5)——Apollo感知技术_自动驾驶中的机器感知_月光下的丁香的博客-CSDN博客

无人驾驶级别

由国际自动机工程师学会(SAEinterantional)制定,已获全球广泛接受。

级别 简述 描述

L0 无自动化 由驾驶员全权操作汽车,可以得到警告和保护系统的辅助。

L1 驾驶支援 根据驾驶环境对方向盘和加减速中的一项操作提供支援,其他动作由驾驶员操作

L2 部分的自动化 根据驾驶环境对方向盘和加减速中的多项操作提供支援,其他动作由驾驶员操作。先进的驾驶员辅助系统,可以在特定环境下控制方向盘和刹车,但算不上无人驾驶

L3 有条件的自动化 由自动驾驶系统完成所有的驾驶操作,驾驶员根据系统请求提供适当的应答。确实可以驾驶汽车,但只能在有限的情况下发挥作用,需要有司机随时接过汽车的控制权。

L4 高度的自动化 由自动驾驶系统完成所有的驾驶操作,驾驶员根据系统请求不一定提供应答,限定道路和环境条件。在实践中,它可以完成人类司机能够完成的多数任务,但只能在有限的地理区域有效-即地图绘制完善的区域。

L5 完全的自动化 由自动驾驶系统完成所有驾驶操作,驾驶员在可能的情况下接管。不限定道路和环境条件。系统是成熟的无人驾驶系统,可以自动开到任何地方,驾驶技术堪比经验丰富的老司机。

百度Apollo的技术框架

包括四层:线控车辆平台(Reference Vehicle Platform)、参考硬件平台(Reference Hardware Platform)、软件开放平台(Open Software Platform)、云端服务平台(Cloud Service Platform)

自动驾驶研发的流程

角度看,大致可以分为以下4个步骤:

软件在环 软件在环是基于仿真和模拟的软件仿真,类似于赛车类游戏。即是在 软件系统里仿真模拟出真实的道路环境如光照、天气等自然环境,开发者可将自动驾驶代码开发完毕后,在仿真系统内运行,测试是否可以实现目标。
硬件在环 硬件在环是基于必要的硬件平台。在第一步的软件仿真结束后, 将所有的仿真结果与传感器、计算单元集合在一起,在硬件环境里测试。
车辆在环 车辆在环是基于车辆执行。在第二步硬件环境里测试完成后实施的第三步,即 在一个封闭环境中测试开发者所开发功能,封闭环境中不会有交通流的干扰。
司机在环 司机在环是基于实际道路。在第三步测试成功后进入到司机在环,司机在环主要是研究人——车——路——交通四者之间的相互作用, 它不仅测试自动驾驶的程序代码,还能获得专业司机的评判。

以上四步是整个自动驾驶研发的流程,按照以上的流程研发能够保证自动驾驶足够的安全性。

知行合一2023_第26张图片

硬件结构

知行合一2023_第27张图片

刹车距离

知行合一2023_第28张图片

自动驾驶模块

定位

定位技术就是GPS、IMU和几何定位等一系列技术的融合

感知

无人车主要的传感器有摄像头(Camera)、雷达(Radar)和激光雷达(Lidar)

轨迹规划,控制,高精地图,预测

5.2

六.python常见问题

详细介绍一个python开发的自动化工具
自动上传数据工具

背景:目前运营车辆较多,为满足将日常测试数据及时上传至服务器,急需一个自动化傻瓜式上传工具

程序介绍:利用python开发运行在linux电脑上,使用了#os getpass logging subprocess gnome-terminal time等包

1.每十秒自动检测电脑上是否有硬盘,且硬盘立是否有待传文件(必须在目录 release_data还在目录mr_data)

2.按目录类别自动上传文件,和手动一样会打开终端

  1. 每日早上七点半时,如文件已上传会自动清空目录下的文件

4.企业微信机器人及时同步上传信息

流程实现

使用logging模块记录运行日志

使用getpass得到当前用户名,运行在不同电脑上

循环每10秒用subprocess执行系统命令,检查有无待传数据盘和待传数据

检测到有待传数据,则使用os模块(os.path.exists(statu_path))检测是否有已经上传标志文件夹

如果没有则进行上传,使用subprocess执行系统命令,gnome-terminal新开一个终端

上传成功使用requests企业微信机器人同步信息

远程监控工具

背景

采集感知数据时需持续监测topic频率是否正常,无论是在车端还是远程查看都耗费精神,急需一个自动化监测工具。此工具作用1为可视化远程监测各topic状态,在异常时声音报警。作用2为可视化实时显示车端采集数据包数量。作用3为可视化实时显示车端定位。

1.程序实现方式

  • 程序利用paramiko实现远程链接车端,并且执行查询命令。

  • 拿到返回结果后,利用matplotlib做图显示

  • topic状态异常时利用tkinter.messagebox弹窗报警和播放声音报警

知行合一2023_第29张图片

自动化评价体感工具

robotaxi面向客户,客户第一体验为自动驾驶乘坐舒适度。分为主观评价和客观评价

以百度的"丝路计划"为例,介绍驾驶舒适度评价体系的建设过程

知行合一2023_第30张图片

数据模型用以辅助客观模型,完善模型维度需要通过模型边界样本采集来完成;数据采集需要以体感问题为依据,包括主观数据搜集及客观数据采集两部分,按照数据特征分为开环数据与闭环数据;为得出ADE指标,可采取以下步骤进行处理:

请乘客乘车体验分别为不舒适、较舒适、非常舒适的"新手司机"、“通勤司机”、"首汽专车司机"三类司机完成驾驶,参与样本采集的乘客对乘车体验进行打分;

训练样本,聚类得到三类舒适度的界限a 、 b a、ba、b,将舒适度指数分为三级,分别为不舒适(未达到乘坐标准)、较舒适(达到普通乘坐标准)、舒适(达到国宾级标准);

对评估体系的表征工具进行建设,如:监控工具,用以对ADE指数进行实时监控;主/客观评测工具,主观评测工具面向的对象为体感评估主观测试者,需要考虑在线化、移动化、智能化三方面因素;客观评测工具面向测试人员、研发人员,需要考虑常规化,便捷化,可视化三方面因素;

客观kpi评价指标

推背感(纵向加速度)

急刹(纵向减速度)

百公里点刹频率(加速度超过-2和jerk超过-4)

离心率(横向加速度大于1)

程序实现流程

  1. 解析每圈bag提取车辆底盘实际速度加速度等信息

  1. 解析整圈推背感百公里频次,百公里点刹频率,百公里离心批次,最大加减速度时刻,截取当时发生场景便于后续分析

  1. 可视化展示每圈体感信息(matplot

自动化分析障碍物感知预测结果合理性工具

obstacle

1.基于对关键目标标注的真值,对每个bag评测平均帧率在阈值范围内(±0.5)、heading连续两帧的最大差值以及heading的误差标准差在阈值范围内&speed的最大差值以及speed的误差标准差在阈值范围内&中心点的最大位置偏差以及中心点的误差标准差&碰撞面的最大位置偏差以及碰撞面的误差标准差在阈值范围内,目前每个case设置了不同的阈值,后期所有case可设置相同的阈值,以上均满足判定为pass,否则fail。

对于目标误检,在原误检位置设置一个中心点以及较小半径,在此范围内无目标时判定pass,否则fail。

2.基于版本或分支统计测试集中所有case的专项性能指标,对比不同版本下的指标趋势,在autobot上展示,包括测试集所有case中所有帧的heading的误差均值,speed误差均值,中心点距离误差均值,碰撞面距离误差均值,定性的对比不同版本的误差变化。后续也可以根据场景tag,类型tag分别统计。

感知仿真用例开发

目标类型(小车,工程车,bus,行人,二轮车)

目标信息(box,heading,speed)

和自车相对位置,前后左右

红绿灯测试用例

白天夜晚,强光暗光,顺光逆光

红绿黄,闪烁

左转右转,直行

是否被遮挡

预测仿真测试

Prediction离线评测内容,主要包括ADE/FDE性能指标是否超限,heading是否异常,帧率是否异常

A表示平均,F表示终点,DE表示预测坐标(x,y)和真值坐标(x,y)的欧式距离(直线距离),d横向差值,s纵向差值

ADE = 轨迹的平均 DE

FDE = 轨迹的终点 DE

ADE_s = 轨迹的平均 DE_s

ADE_d = 轨迹的平均 DE_d

FDE_s = 轨迹的终点 DE_s

FDE_d = 轨迹的终点 DE_d

Q49、深拷贝和浅拷贝有什么区别?

在创建新实例类型时使用浅拷贝,并保留在新实例中复制的值。浅拷贝用于复制引用指针,就像复制值一样。这些引用指向原始对象,并且在类的任何成员中所做的更改也将影响它的原始副本。浅拷贝允许更快地执行程序,它取决于所使用的数据的大小。

深拷贝用于存储已复制的值。深拷贝不会将引用指针复制到对象。它引用一个对象,并存储一些其他对象指向的新对象。原始副本中所做的更改不会影响使用该对象的任何其他副本。由于为每个被调用的对象创建了某些副本,因此深拷贝会使程序的执行速度变慢。

1.深拷贝与浅拷贝

直接赋值:其实就是对象的引用(别名)。

浅拷贝(copy):是对于一个对象的顶层拷贝,拷贝父对象,不会拷贝对象的内部的子对象。

深拷贝(deepcopy): 是对于一个对象所有层次的拷贝(递归),完全拷贝了父对象及其子对象。

对象的引用(内存地址)”赋值给变量的,在python中有6个标准数据类型,他们分为可变和不可变两类。

不可变类型:Number(数字)String(字符串)Tuple(元组)

可变类型:List(列表)Dictionary(字典)Set(集合)

浅拷贝(copy)

1.浅拷贝会创建一个新的容器对象(compound object)

2.对于对象中的元素,浅拷贝就只会使用原始元素的引用(内存地址)

深拷贝(deepcopy)

1.深拷贝和浅拷贝一样,都会创建一个新的容器对象(compound object)

2.和浅拷贝的不同点在于,深拷贝对于对象中的元素,深拷贝都会重新生成一个新的对象

  • 1字节(byte) = 8位(bit)

15. 如何将两个列表转化未一个字典,列表a的值作为 key,列表b的值作为 value?

import numpy as np

a = np.array(['a', 'b', 'c', 'd'])

b = np.array([2, 2, 4, 12]) dict1 = dict(zip(a, b))

13. json跟字典的区别

JSON是一种轻量级的数据交换格式采用完全独立于编程语言的文本格式来存储和表示数据拥有简洁和清晰的层次结构

字典属于python语言中的一种可变数据类型,由python编译器进行识别

json.dumps() --》将dict转换成json

json.loads()—>将json转换成python识别的dict

8. 两个列表,list1 = [1,2,3], list2= [4,5,6], 怎么扩展让list1=[1,2,3,4,5,6,]

list1.extend(list2)

9.list1 = [1,2,3], list2= [1,2,4,5,6]怎么取出两个列表不一样的内容 ?

可以将他们先合并再去重

list3=list1.extend(list2)

list4=list(set(list3))

Python 函数参数前面一个星号(*)和两个星号(**)的区别

单* 将参数以元组形式导入

双** 将参数以字典形式导入

5.python中有没有用过装饰器、用装饰器的场景,理解装饰器中的逻辑吗?

简单来说装饰器就是一个函数,它的作用就是装饰一个其他的函数,用法就是@+定义的函数名,这样他在运行新函数前会先去运行调用的装饰器函数,这种被成为语法糖

3.python生成随机数 random(0,10)可以生成包含0~10的随机数吗?

不包含0和10

4.python反转列表

reverse

10. 列表用下标可以改变赋值,字符串可以吗 ?

不可以,字符串、数字、元组是不可变数据类型

map函数

在Python 2中,map函数返回列表list,而在Python 3中,map函数返回迭代器。

map(lambda x: x+1, range(5)) # list(map(lambda x: x+1, range(5)))

3.3.8. 字典根据键值从小到大排序

d = {'a': 24, 'g': 52, 'i': 12, 'k': 33}# reverse=True 表示降序a = sorted(d.items(),key=lambda x:x[1], reverse=True)

Q2、Python的主要功能是什么?

  • Python是一种解释型语言。与C语言等语言不同,Python不需要在运行之前进行编译。

  • Python是动态语言,当您声明变量或类似变量时,您不需要声明变量的类型。

  • Python适合面向对象的编程,因为它允许类的定义以及组合和继承。Python没有访问说明(如C ++的public,private)。

  • 在Python中,函数是第一类对象。它们可以分配给变量。类也是第一类对象

  • 编写Python代码很快,但运行比较慢。Python允许基于C的扩展,例如numpy函数库。

  • Python可用于许多领域。Web应用程序开发,自动化,数学建模,大数据应用程序等等。它也经常被用作“胶水”代码。

Q3、Python是通用编程语言吗?

Python能够编写脚本,但从一般意义上讲,它被认为是一种通用编程语言。

Q4、Python是如何解释语言的?

Python在运行之前不需要对程序进行解释。因此,Python是一种解释型语言。

Q5、什么是pep?

PEP代表Python Enhancement Proposal。它是一组规则,指定如何格式化Python代码以获得最大可读性。

Q7、Python中的命名空间是什么?

命名空间是一个命名系统,用于确保名称是唯一性,以避免命名冲突。

Q9、什么是python模块?Python中有哪些常用的内置模块?

Python模块是包含Python代码的.py文件。此代码可以是函数类或变量。一些常用的内置模块包括:sys、math、random、data time、JSON。

Q10、Python中的局部变量和全局变量是什么?

全局变量:在函数外或全局空间中声明的变量称为全局变量。这些变量可以由程序中的任何函数访问。

局部变量:在函数内声明的任何变量都称为局部变量。此变量存在于局部空间中,而不是全局空间中。

Q11、python是否区分大小写?

是。Python是一种区分大小写的语言。

Q12、什么是Python中的类型转换?

类型转换是指将一种数据类型转换为另一种数据类型。

  1. int()  -将任何数据类型转换为整数类型

  1. float()  -将任何数据类型转换为float类型

  1. ord()  -将字符转换为整数

  1. hex()- 将整数转换为十六进制

  1. oct()  -将整数转换为八进制

  1. tuple()- 此函数用于转换为元组。

  1. set()- 此函数在转换为set后返回类型。

  1. list()- 此函数用于将任何数据类型转换为列表类型。

  1. dict()- 此函数用于将顺序元组(键,值)转换为字典。

  1. str()- 用于将整数转换为字符串。

  1. complex(real,imag)  -此函数将实数转换为复数(实数,图像)数。

Q14、python中是否需要缩进?

缩进是Python必需的。它指定了一个代码块。循环,类,函数等中的所有代码都在缩进块中指定。通常使用四个空格字符来完成。如果您的代码没有必要缩进,它将无法准确执行并且也会抛出错误。

Q15、Python数组和列表有什么区别?

Python中的数组和列表具有相同的存储数据方式。但是,数组只能包含单个数据类型元素,而列表可以包含任何数据类型元素

Q16、Python中的函数是什么?

函数是一个代码块,只有在被调用时才会执行。要在Python中定义函数,需要使用def关键字。

Q17、什么是__init__?

__init__是Python中的方法或者结构。在创建类的新对象/实例时,将自动调用此方法来分配内存。所有类都有__init__方法。

Q18、什么是lambda函数?

lambda函数也叫匿名函数,该函数可以包含任意数量的参数,但只能有一个执行操作的语句。

Q23、什么是python迭代器?

迭代器是可以遍历或迭代的对象。

Q24、如何在Python中生成随机数?

random模块是用于生成随机数的标准模块。该方法定义为:

import random

random.random

random.random()方法返回[0,1]范围内的浮点数。该函数生成随机浮点数。随机类使用的方法是隐藏实例的绑定方法。可以使用Random的实例来显示创建不同线程实例的多线程程序。其中使用的其他随机生成器是:

  1. randrange(a,b):它选择一个整数并定义[a,b]之间的范围。它通过从指定范围中随机选择元素来返回元素。它不构建范围对象。

  1. uniform(a,b):它选择一个在[a,b)范围内定义的浮点数

  1. normalvariate(mean,sdev):它用于正态分布,其中mean是平均值,sdev是用于标准偏差的sigma。

  1. 使用和实例化的Random类创建一个独立的多个随机数生成器。

Q25、range&xrange有什么区别?

在大多数情况下,xrange和range在功能方面完全相同。它们都提供了一种生成整数列表的方法,唯一的区别是range返回一个Python列表对象,x range返回一个xrange对象。这就表示xrange实际上在运行时并不是生成静态列表。它使用称为yielding的特殊技术根据需要创建值。该技术与一种称为生成器的对象一起使用。因此如果你有一个非常巨大的列表,那么就要考虑xrange。

Q26、如何在python中写注释?

Python中的注释以#字符开头。也可以使用doc-strings(三重引号中包含的字符串)进行注释。

Q27、什么是pickling和unpickling?

Pickle模块接受任何Python对象并将其转换为字符串表示形式,并使用dump函数将其转储到文件中,此过程称为pickling。从存储的字符串中检索原始Python对象的过程称为unpickling。

Q28、python中的生成器是什么?

返回可迭代项集的函数称为生成器。

Q29、你如何把字符串的第一个字母大写?

在Python中,capitalize()函数可以将字符串的第一个字母大写。如果字符串在开头已经包含大写字母,那么它将返回原始字符串。

Q30、如何将字符串转换为全小写?

要将字符串转换为小写,可以使用lower()函数。

Q31、如何在python中注释多行?

注释多行代码时。所有要注释的行都要在开头前加#。还可以使用快捷方式来注释多行,就是按住Ctrl键并在每个想要包含#字符的地方左键单击并键入一次#。

Q33、operators中的is、not和in各有什么功能?
Operators是特殊函数,它们比较一个或多个值并产生相应的结果。其中is:当2个操作数为true时返回true(例如:“a”是'a')

not:返回布尔值的倒数

in:检查某个元素是否存在于某个序列中

Q37、如何在python中使用三元运算符? ????

三元运算符是用于显示条件语句的运算符。这包含true或false值,并且必须为其评估语句。其基本语法为:

[on_true] if [expression] else [on_false] x,y= 25,50big = x if x

Q36、Python中的字典是什么?

Python中的内置数据类型称为字典。它定义了键和值之间的一对一关系。字典包含一对键及其对应的值。字典由键索引。

Q38、为什么使用* args,** kwargs?

当我们不确定将多少个参数传递给函数,或者我们想要将存储的列表或参数元组传递给函数时,我们使用* args。**当我们不知道将多少关键字参数传递给函数时使用kwargs,或者它可以用于将字典的值作为关键字参数传递。标识符args和kwargs是一个约定,你也可以使用* bob和** billy。

Q39、len()函数有什么作用?

len()函数可用于确定字符串,列表,数组等的长度。

Q40、在Python中split(),sub(),subn()功能。

如果要修改字符串,Python的“re”模块提供了3种方法。他们是:

  • split()- 使用正则表达式模式将给定字符串“拆分”到列表中。

  • sub()- 查找正则表达式模式匹配的所有子字符串,然后用不同的字符串替换它们

  • subn()- 它类似于sub(),并且还返回新字符串。

Q41、什么是负指数,功能是什么?

Python中的序列是索引的,它由正数和负数组成。积极的数字使用'0'作为第一个索引,'1'作为第二个索引,进程继续使用。

负数的索引从'-1'开始,表示序列中的最后一个索引,' - 2'作为倒数第二个索引,序列像正数一样前进。

负索引用于从字符串中删除任何换行符,并允许该字符串除了作为S [: - 1]给出的最后一个字符。负索引还用于显示索引以正确的顺序表示字符串。

Q42、什么是Python包?

Python包是包含多个模块的命名空间。

Q43、如何在Python中删除文件?

要在Python中删除文件,您需要导入OS模块。之后,您需要使用os.remove()函数。

Q44、什么是python的内置类型?

Python中的内置类型如下:整型、浮点型、复数、字符串、布尔等。

Q46、如何将值添加到python数组?

可以使用append(),extend()和insert(i,x)函数将元素添加到数组中。

Q47、如何删除python数组的值?

可以使用pop()或remove()方法删除数组元素。这两个函数之间的区别在于前者返回已删除的值,而后者则不返回。

Q50、如何在Python中实现多线程?
  1. Python有一个多线程库,但是用多线程来加速代码的效果并不是那么的好,

  1. Python有一个名为GlobalInterpreter Lock(GIL)的结构。GIL确保每次只能执行一个“线程”。一个线程获取GIL执行相关操作,然后将GIL传递到下一个线程。

  1. 虽然看起来程序被多线程并行执行,但它们实际上只是轮流使用相同的CPU核心。

  1. 所有这些GIL传递都增加了执行的开销。这意味着多线程并不能让程序运行的更快。

Num01–>线程

线程是操作系统中能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。

一个线程指的是进程中一个单一顺序的控制流。

一个进程中可以并发多条线程,每条线程并行执行不同的任务。

Num02–>进程

进程就是一个程序在一个数据集上的一次动态执行过程。

进程有以下三部分组成:

1,程序:我们编写的程序用来描述进程要完成哪些功能以及如何完成。

2,数据集:数据集则是程序在执行过程中需要的资源,比如图片、音视频、文件等。

3,进程控制块:进程控制块是用来记录进程的外部特征,描述进程的执行变化过程,系统可以用它来控制和管理进程,它是系统感知进程存在的唯一标记。

Num03–>进程和线程的区别:

1、运行方式不同:

进程不能单独执行,它只是资源的集合。

进程要操作CPU,必须要先创建一个线程。

所有在同一个进程里的线程,是同享同一块进程所占的内存空间。

2,关系

进程中第一个线程是主线程,主线程可以创建其他线程;其他线程也可以创建线程;线程之间是平等的。

进程有父进程和子进程,独立的内存空间,唯一的标识符:pid。

3,速度

启动线程比启动进程快。

运行线程和运行进程速度上是一样的,没有可比性。

线程共享内存空间,进程的内存是独立的。

4,创建

父进程生成子进程,相当于复制一份内存空间,进程之间不能直接访问

创建新线程很简单,创建新进程需要对父进程进行一次复制。

一个线程可以控制和操作同级线程里的其他线程,但是进程只能操作子进程。

5,交互

同一个进程里的线程之间可以直接访问。

两个进程想通信必须通过一个中间代理来实现。

简单谈下GIL

Global Interpreter Lock(全局解释器锁)

Python代码的执行由python虚拟机(也叫解释器主循环,CPython版本)来控制,Python在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即任意时刻,只有一个线程在解释器中运行。对Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行。

在多线程环境中,Python虚拟机按以下方式执行:

1.设置GIL

2.切换到一个线程去运行

3.运行:

a.指定数量的字节码指令,或者

b.线程主动让出控制(可以调用time.sleep(0))

4.把线程设置为睡眠状态

5.解锁GIL

6.再次重复以上所有步骤

再调用外部代码(如C/C++扩展函数)的时候,GIL讲会被锁定,直到这个函数结束为止(由于在这期间没有Python的字节码被运行,所以不会做线程切换)。

6、线上服务可能因为种种原因导致挂掉怎么办?

Linux下的后台进程管理利器supervisor

每次文件修改后在linux执行service supervisord restart

7、如何提高python的运行效率

使用生成器;关键代码使用外部功能包(Cython,pylnlne,pypy,pyrex);针对循环的优化--尽量避免在循环中访问变量的属性

七.网络编程和前端部分

1.pywebio

pywebio是什么?

PyWebIO提供了一系列命令式的交互函数来在浏览器上获取用户输入和进行输出,将浏览器变成了一个“富文本终端”,可以用于构建简单的Web应用或基于浏览器的GUI应用。 使用PyWebIO,开发者能像编写终端脚本一样(基于input和print进行交互)来编写应用,无需具备HTML和JS的相关知识; PyWebIO还可以方便地整合进现有的Web服务。非常适合快速构建对UI要求不高的应用

  • 对于不想写前端(html/css/js)代码或者对前端不熟悉的同学,pywebio模块提供了纯python实现网页,快速搭建网站。

  • 当pywebio遇上数据可视化工具pyrcharts的时候,能够快速发布数据可视化图表

2.HTML技术

1.HTML是什么?

HTML,全称“Hyper Text Markup Language(超文本标记语言)”,简单来说,网页就是用HTML语言制作的。HTML是一门描述性语言,是一门非常容易入门的语言。

  1. html基本机构

知行合一2023_第31张图片

2.HTML的基本标签

(1)HTML标签

整个网页是从这里开始的,然后到结束。

(2)head标签

head标签代表页面的“头”,定义一些特殊内容,这些内容往往都是“不可见内容”(在浏览器不可见)。

(3)body标签

body标签代表页面的“身”,定义网页展示内容,这些内容往往都是“可见内容”(在浏览器可见)。

后续课程讲解的标签都是在标签内部的各种标签。

2.常见的HTTP状态码有哪些?

200 OK

301 MovedPermanently

302 Found

304 Not Modified

307 TemporaryRedirect

400 Bad Request

401 Unauthorized

403 Forbidden

404 Not Found

410 Gone

500 Internal ServerError

501 Not Implemented

3.Post和get区别?

1、GET请求,请求的数据会附加在URL之后,以?分割URL和传输数据,多个参数用&连接。URL的编码格式采用的是ASCII编码,而不是unicode,即是说所有的非ASCII字符都要编码之后再传输。

POST请求:POST请求会把请求的数据放置在HTTP请求包的包体中。上面的item=bandsaw就是实际的传输数据。

因此,GET请求的数据会暴露在地址栏中,而POST请求则不会。

2、传输数据的大小

在HTTP规范中,没有对URL的长度和传输的数据大小进行限制。但是在实际开发过程中,对于GET,特定的浏览器和服务器对URL的长度有限制。因此,在使用GET请求时,传输数据会受到URL长度的限制。

对于POST,由于不是URL传值,理论上是不会受限制的,但是实际上各个服务器会规定对POST提交数据大小进行限制,Apache、IIS都有各自的配置。

3、安全性

POST的安全性比GET的高。这里的安全是指真正的安全,而不同于上面GET提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过GET请求,用户名和密码都会暴露再URL上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET请求提交的数据还可能会造成Cross-siterequest frogery攻击。

4.cookie和session 的区别?

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、建议:

将登陆信息等重要信息存放为SESSION

其他信息如果需要保留,可以放在COOKIE中

5.创建一个简单tcp服务器需要的流程

1.socket创建一个套接字

2.bind绑定ip和port

3.listen使套接字变为可以被动链接

4.accept等待客户端的链接

5.recv/send接收发送数据

七. shell常见问题

shell脚本远程拷贝车端自动驾驶日志

背景:自动驾驶过程中会产生各种问题,为快速分析解决问题,需及时拿到运行日志

程序功能:

1.运行在linux电脑,远程登录目标车辆,

  1. 免密码拷贝目标日志至本地

使用shell,expect

记录目标车辆ip,运行时可传入参数,目标车辆,目标模块日志

expect自动化交互输入密码和执行拷贝命令

ssh远程登录,scp拷贝文件

pyexpect

一键启动工具

1.Shell脚本是什么?

一个 Shell 脚本是一个文本文件,包含一个或多个命令。作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell 脚本)来完成这些日常工作任务。

shell就是用户和系统之间的命令解释器

2.什么是变量

很多人可能会说,可以变化的量就是变量。但是发现很多汉语意思很强大,你看的懂的字,却不一定可以理解它的意思。这里你可以理解为 a = 1,同时还可以 a =2、a = 3 ,不同的值都可以复制给同一个 变量 a 。

# 常见的3种变量

Shell编程中变量分为三种,分别是系统变量、环境变量和用户变量,Shell变量名在定义时,首个字符必须为字母(a-z,A-Z),不能以数字开头,中间不能有空格,可以使用下划线(_),不能使用(-),也不能使用标点符号等。

Shell常见的变量之一系统变量

,主要是用于对参数判断和命令返回值判断时使用,系统变量详解如下

$0 当前脚本的名称;

$n 当前脚本的第n个参数,n=1,2,…9;

$* 当前脚本的所有参数(不包括程序本身);

$# 当前脚本的参数个数(不包括程序本身);

$? 令或程序执行完后的状态,返回0表示执行成功;

$$ 程序本身的PID号。

Shell常见的变量之二环境变量

,主要是在程序运行时需要设置,环境变量详解如下:

PATH 命令所示路径,以冒号为分割;

HOME 打印用户家目录;

SHELL 显示当前Shell类型;

USER 打印当前用户名;

ID 打印当前用户id信息;

PWD 显示当前所在路径;

TERM 打印当前终端类型;

HOSTNAME 显示当前主机名;

PS1 定义主机命令提示符的;

HISTSIZE 历史命令大小,可通过 HISTTIMEFORMAT 变量设置命令执行时间;

RANDOM 随机生成一个 0 至 32767 的整数;

HOSTNAME 主机名

常见的变量之三用户变量

,用户变量又称为局部变量,主要用在Shell脚本内部或者临时局部使用,系统变量详解如下:

a=rivers 自定义变量A;

Httpd_sort=httpd-2.4.6-97.tar 自定义变量N_SOFT;

BACK_DIR=/data/backup/ 自定义变量BACK_DIR;

IPaddress=10.0.0.1 自定义变量IP1;

变量

定义变量

变量名=变量值

如:num=10

引用变量

$变量名

unset :清除变量值

3.chmod 777 test.sh 赋权4 + 2+1 可读可写可执行,当前用户,root超级用户,访客

#!/bin/bash

echo "this is a msg"

4.if语句

格式一:

if [条件1]; then

执行第一段程序

else

执行第二段程序

fi

格式二:

if [条件1]; then

执行第一段程序

elif [条件2];then

执行第二段程序

else

执行第三段程序

fi

if常见逻辑运算判断

-f 判断文件是否存在 eg: if [ -f filename ];

-d 判断目录是否存在 eg: if [ -d dir ];

-eq等于,应用于整型比较 equal;

-ne不等于,应用于整型比较 not equal;

-lt小于,应用于整型比较 letter;

-gt大于,应用于整型比较 greater;

-le小于或等于,应用于整型比较;

-ge 大于或等于,应用于整型比较;

-a双方都成立(and) 逻辑表达式 –a 逻辑表达式;

-o单方成立(or) 逻辑表达式 –o 逻辑表达式;

-z空字符串;

-x 是否具有可执行权限

|| 单方成立;

&& 双方都成立表达式。

例子

#!/bin/bash

# this is check crond

# by author rivers on 2021-9.23

# 定义一个变量名

name=crond

num=$(ps -ef|grep $name|grep -vc grep)

if [ $num -eq 1 ];then

echo "$num running!"

else

echo "$num is not running!"

fi

5.for语句

#格式:for name [ [ in [ word ... ] ] ; ] do list ; done

for 变量名 in 取值列表; do

语句 1

done

例子

#!/bin/bash

# check hosts is on/Off

# by rivers on 20219-23

Network=$1

for Host in $(seq 1 254)

do

ping -c 1 $Network.$Host > /dev/null && result=0 || result=1

if [ "$result" == 0 ];then

echo -e "\033[32;1m$Network.$Host is up \033[0m"

echo "$Network.$Host" >> /tmp/up.txt

else

echo -e "\033[;31m$Network.$Host is down \033[0m"

echo "$Network.$Host" >> /tmp/down.txt

fi

done

八.docker常见问题

1.什么是docker?什么是docker镜像?

docker是一个容器化平台,它以容器的形式将您的应用程序及其所有依赖项打包在一起,以确保您的应用程序在任何环境中无缝运行。

是docker容器的源代码,用于创建容器。使用build命令创建镜像。

(2)常见命令:

docker pull:拉取或者更新指定镜像;docker push:将镜像推送至远程仓库; dockerimages:列出所有镜像; docker rmi:删除镜像;

docker ps:列出所有容器; dockerrm:删除容器

(3)使用流程:a.创建Dockerfile后,docker build创建容器的镜像; b.推送或拉取镜像

2.什么是docker容器?docker容器有几种状态?docker容器内部机制?容器与主机之间的数据拷贝?启动容器并挂在目录?

(1)docker容器:docker容器包括应用程序及其所有依赖项,作为操作系统的独立进程运行。

(2)docker容器4种状态:运行+已暂停+重新启动+已退出

(3)docker容器内部机制:每个容器都在自己的命名空间中运行,但使用与所有其他容器完全相同的内核。发生隔离是因为内核知道分配给进程的命名空间,并且在API调用期间确保进程只能访问其自己的命名空间中的资源。

【操作系统的一个功能是允许将全局资源(如网络和磁盘)共享到进程。如果将这些全局资源包装在命名空间中,以使它们仅对在同一命名空间中运行的那些进程可见】

(4)主机copy到容器:docker cp /www96f7f14e99ab:/www/ 容器copy到主机:docker cp 96f7f14e99ab:/www /tmp/

(5)启动nginx容器(随机端口映射),并挂载本地文件目录到容器html的命令:

docker run -d -P --name nginx2 -v

/home/nginx:/usr/share/nginx/html nginx

docker run解读相见:Docker run 命令参数及使用 - 简书

(2)COPY与ADD的区别: COPY:直接拷贝; ADD:拷贝+解压功能

a.二者都是只复制目录中的文件,而不包含目录本身。

b.COPY能干的事ADD都能干,甚至还有附加功能。

c.ADD可以支持拷贝的时候顺带解压缩文件,以及添加远程文件(不在本宿主机上的文件),COPY的只能是本地文件

d.只是文件拷贝的话可以用COPY,有额外操作可以用ADD代替。

e.docker官方建议当要从远程复制文件时,尽量用curl/wget命令来代替ADD。因为用ADD的时候会创建更多的镜像层。镜像层的size也大。

3.如何在生产中监控docker?

docker提供docker stats和docker事件等工具来监控生产中的docker。我们可以使用这些命令获取重要统计数据的报告。

docker统计数据:当我们使用容器ID调用docker stats时,我们获得容器的CPU,内存使用情况等。它类似于Linux中的top命令。

docker事件:Docker事件是一个命令,用于查看Docker守护程序中正在进行的活动流。一些常见的docker事件是:attach,commit,die,detach,rename,destroy等。我们还可以使用各种选项来限制或过滤我们感兴趣的事件。

九.数据库常见问题

一、数据库概述

1、关系型数据库

关系型数据库是一个结构化的数据库,创建在关系模型(二维表格模型)基础上,一般面向于记录。

SQL 语句(标准数据查询语言)就是一种基于关系型数据库的语言,用于执行对关系型数据库中数据的检索和操作。

主流的关系型数据库包括 Oracle、MySQL、SQL Server、Microsoft Access、DB2 等。

2、非关系型数据库

NoSQL(NoSQL = Not Only SQL ),意思是“不仅仅是 SQL”,是非关系型数据库的总称。

除了主流的关系型数据库外的数据库,都认为是非关系型。

主流的 NoSQL 数据库有 Redis、MongBD、Hbase、CouhDB 等。

总结

关系型数据库:

  • 实例–>数据库–>表(table)–>记录行(row)、数据字段(column)

非关系型数据库:

  • 实例–>数据库–>集合(collection)–>键值对(key-value)

  • 非关系型数据库不需要手动建数据库和集合(表)

数据库常见问题2

缓存穿透和缓存雪崩是什么,如何解决?

缓存穿透,是指查询一个数据库一定不存在的数据。正常的使用缓存流程大致是,数据查询先进行缓存查询,

如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存.

解决办法:1.对于数据库中不存在的数据,也对其在缓存中设置默认值一般过期时间会比较短

2.可以设置一些过滤规则, 如布隆过滤器(算法, 用于判断数据是否包含在集合中), 将所有可能的值录入过滤器, 如果不包含直接返回None, 有误杀概率

缓存雪崩,是指在某一个时间段,缓存集中过期失效。

1.设置过期时间时,添加随机值,让过期时间进行一定程度分散

2.多级缓存的方式来处理

  1. 利用锁/队列的形式

七、varchar和char的区别,utf8字符集下varchar最多能存多少个字符 ?

char的长度不可变,查询效率高,可能造成存储浪费,用于手机号.varchar长度可变,,查询效率低,节省空间,用于用户名.在UTF8字符集下最大长度不能超过21845

八、primary key和unique的区别?

unique可空,可以在一个表里的一个或多个字段定义;

primary key不可空不可重复,在一个表里可以定义联合主键.

十六、三范式和反范式设计

第一范式: 字段具有原子性, 不可拆分

第二范式: 依赖于全部主键, 而非部分主键

第三范式: 只依赖于主键, 非主键字段互不依赖

目的是减少冗余字段

如果单独定义字段来记录,该字段就称为冗余字段,这种设计称为反范式设计.

通过加入冗余字段,来提高数据库的查询速度,减少关联查询,用空间换取时间

范式是武功招式, 如何运用全看自己, 也有缺点, 查询速度高了,会增加很多写入操作

四十一、数据库优化

1.在进行表设计时,可适度增加冗余字段(反范式设计),减少JOIN操作;

2.多字段表可以进行垂直分表优化,多数据表可以进行水平分表优化;

3.选择恰当的数据类型,如整型的选择;

4.对于强调快速读取的操作,可以考虑使用MyISAM数据库引擎;

5.对较频繁的作为查询条件的字段创建索引;唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件;更新非常频繁的字段不适合创建索引;

6.编写SQL时使用上面的方式对SQL语句进行优化;

7.使用慢查询工具找出效率低下的SQL语句进行优化;

8.构建缓存,减少数据库磁盘操作;

  1. 可以考虑结合使用内在型数据库,如Redis,进行混合存储。

ORM

''''

ORM,即Object-Relational Mapping(对象关系映射),它的作用是在关系型数据库和业务实体对象之间作一个映射,

这样,我们在具体的操作业务对象的时候,就不需要再去和复杂的SQL语句打交道,只需简单的操作对象的属性和方法。

'''

#ORM建立一个模型

class News(Base):

__tablename__ = 'NEWS'

id = Column(Integer, primary_key=True) #primary_key设置主键

title = Column(String(200), nullable=False)

content = Column(String(2000), nullable=False)

types = Column(String(10), nullable=False)

image = Column(String(300))

author = Column(String(20))

view_count = Column(Integer)

created_at = Column(DateTime)

is_valid = Column(Boolean)

数据库基础

大型数据库 Oracle Db2

中型数据库 sqlserver

小型数据库 mysql

微型数据库 sqlite

增:Insert into 表名 value 值

删:Delect from 表名 where 值

改:Update 表名 set 字段=字段 where 字段;

查:Select * from 表名

insert into biao value()

delect from biao where zhi

update biao set sex = 1 wher age =1

select * from bi

insert into biao value (5,car)

delete biao where id =2

update biao set sex = 1 where id =2

select * from biao

自增 auto_increment

主键 primary key

非空 not null

唯一 unique

默认值 default

外键 foreign key

字符类型

sql = '''CREATE TABLE NEWS (

id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,

title VARCHAR(200) NOT NULL,

content VARCHAR(2000) NOT NULL,

types VARCHAR(10) DEFAULT '时事',

image VARCHAR(300) NULL,

author VARCHAR(20) NULL,

view_count INT NULL,

created_at datetime NULL,

is_valid VARCHAR(20) NULL

)

#查看所有的数据库: SHOW DATABASES ;

#创建一个数据库: CREATE DATABASE k;

#删除一个数据库: DROP DATABASE k

#使用这个数据库 USE k;

#查看所有的表 SHOW TABLES ;

#创建一个表 CREATE TABLE n(id INT, name VARCHAR(10));

#删除一个存在表 DROP TABLE IF EXISTS m;

#更改存在表的名称

ALTER TABLE n RENAME m;

RENAME TABLE n TO m;

#查看表的结构(以下五条语句效果相同)

DESC n; # 因为简单,所以建议使用

DESCRIBE n;

SHOW COLUMNS IN n;

SHOW COLUMNS FROM n;

EXPLAIN n;

查看表的创建语句

SHOW CREATE TABLE n;

表的结构

#添加字段: ALTER TABLE n ADD age VARCHAR(2) ;

#删除字段: ALTER TABLE n DROP age;

#更改字段属性和属性:ALTER TABLE n CHANGE age a INT;

#只更改字段属性:ALTER TABLE n MODIFY age VARCHAR(7) ;

表的数据

#增加数据

INSERT INTO n VALUES (1, 'tom', '23'), (2, 'john', '22');

INSERT INTO n SELECT * FROM n; # 把数据复制一遍重新插入

#删除数据:DELETE FROM n WHERE id = 2;

#更改数据:UPDATE n SET name = 'tom' WHERE id = 2;

#数据查找 : SELECT * FROM n WHERE name LIKE '%h%';

#数据排序(反序) :SELECT * FROM n ORDERBY name, id DESC ;

#添加主键:ALTER TABLE n ADD PRIMARY KEY (id);

#删除主键:ALTER TABLE n DROP PRIMARY KEY ;

#添加外键

ALTER TABLE m ADD FOREIGN KEY (id) REFERENCES n(id); # 自动生成键名m_ibfk_1

ALTERTABLE m ADD CONSTRAINT fk_id FOREIGN KEY (id) REFERENCES n(id); # 使用定义的键名fk_id

#删除外键:ALTER TABLE m DROP FOREIGN KEY `fk_id`;

#修改外键:ALTER TABLE m DROP FOREIGN KEY `fk_id`,ADD CONSTRAINT fk_id2 FOREIGN KEY (id) REFERENCES n(id); # 删除之后从新建

十.git , flask,Ansible,tkinter,matplot,selenium,pywebio,vim,pyexpect,python, shell, 数据库,docker,html(pywebio),linux,ros

  1. git

一、git工作流程

git init 重新初始化本地仓库

git add . 将项目目录的 所有文件 加入git

git status 查看当前状态

git add 文件夹名 将项目目录的 指定目录 加入git

git commit -am "填写日志" 提交到本地仓库

提交时加上参数:-a ,表示新增。fix修复 feat功能 refact重构 chore小任务

git remote add origin [email protected]:rd-app/fms.git远程仓库地址 给本地仓库添加 远程仓库地址

二、创建附注标签

git tag -a v0.1.2 -m “0.1.2版本”

通常的git push不会将标签对象提交到git服务器,我们需要进行显式的操作:

git push origin v0.1.2 # 将v0.1.2标签提交到git服务器

git push origin –tags # 将本地所有标签一次性提交到git服务器

三、pull操作

1、将远程指定分支 拉取到 本地指定分支上:

git pull origin <远程分支名>:<本地分支名>

2、将远程指定分支 拉取到 本地当前分支上:

git pull origin <远程分支名>

3、将与本地当前分支同名的远程分支 拉取到 本地当前分支上(需先关联远程分支,方法见文章末尾)

git pull

在克隆远程项目的时候,本地分支会自动与远程仓库建立追踪关系,可以使用默认的origin来替代远程仓库名,

所以,我常用的命令就是 git pull origin <远程仓库名>,操作简单,安全可控。

四、push操作

1、将本地当前分支 推送到 远程指定分支上(注意:pull是远程在前本地在后,push相反):

git push origin <本地分支名>:<远程分支名>

2、将本地当前分支 推送到 与本地当前分支同名的远程分支上(注意:pull是远程在前本地在后,push相反):

git push origin <本地分支名>

3、将本地当前分支 推送到 与本地当前分支同名的远程分支上(需先关联远程分支,方法见文章末尾)

git push

同样的,推荐使用第2种方式,git push origin <远程同名分支名>

附:

// 将本地分支与远程同名分支相关联

git push --set-upstream origin <本地分支名>

简写方式:git push -u origin <本地分支名>

五、查看分支

git branch 查看当前分支

git branch -a 查看所有分支

git checkout ningbo 切换分支

六、常用

git clone [email protected]:wuyongqiang/tos_simulator.git -b master

克隆指定分支到本地

git clone http://myrepo.xxx.com/project/.git

直接克隆的是master

git clone [email protected]:tpg/mu.git -b ningbo

git clone [email protected]:tpg/trunkport.git -b feature/ningbo_abb_cps

安装好git后,在命令行或终端中使用下面的命令可以设置git自己的名字和电子邮件。这是因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

git config --global user.name "yuxin"

git config --global user.email "[email protected]"

注意git config命令的–global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址

使用git pull或者git push每次都需要输入用户名和密码,一条命令实现保存用户名和密码不用再输入

git config --global credential.helper store

git pull /git push (这里需要输入用户名和密码,以后就不用啦)

git log 查看提交记录

git fetch 拉取远程更新至本地

git reset --hard 清除本地修改至master环境

  1. selenium

python爬取jira问题信息,通过selenium模拟人工操作通过可视化工具截取关键图片

自动化测试工具

jenkins: Jenkins是一个开源CI服务器,基于Web访问,jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性,拥有大量的插件:这些插件极大的扩展了Jenkins的功能,持续集成工具,所有工作都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间和工作量;

selenium :web自动化测试框架(测试浏览器兼容性的自动化)selenium不支持桌面软件自动化测试。软件测试报告,和用例管理只能依赖第三方插件unittest优点:兼容更多的平台( Windows、Linux 、Macintosh等)以及浏览器(火狐,IE,谷歌等)

定位元素方式:id、name、class_name、tagname、link_text、partial_link_text、xpath、css_selector

pytest:pytest是一个全功能的Python测试框架,

优点:

1、简单灵活,容易上手,文档丰富;

2、支持参数化,可以细粒度地控制要测试的测试用例;

3、能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests);

4、pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等;

5、测试用例的skip和xfail处理;

6、可以很好的和CI工具结合,例如jenkins

unitest: unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果

selenium 和 Appium 是怎么联系的?有什么关系?

一、 selenium是专门做web端的自动化测试工具

Selenium与其他测试工具相比,最大好处是:

Selenium 测试直接在浏览器中运行,就像真实用户所做的一样。Selenium 测试可以在 Windows、Linux 和 Macintosh上的 Internet Explorer、Chrome和 Firefox 中运行。其他测试工具都不能覆盖如此多的平台。使用 Selenium 和在浏览器中运行测试还有很多其他好处。

下面是主要的两大好处:

通过编写模仿用户操作的 Selenium 测试脚本,可以从终端用户的角度来测试应用程序。通过在不同浏览器中运行测试,更容易发现浏览器的不兼容性。Selenium 的核心,也称browserbot,是用 JavaScript 编写的。这使得测试脚本可以在受支持的浏览器中运行。browser bot 负责执行从测试脚本接收到的命令,测试脚本要么是用 HTML 的表布局编写的,要么是使用一种受支持的编程语言编写的。

二、appium是手机app端的自动化,它继承了webdriver(也就是selenium 2)

不过appium仍然需要通过selenium最后做测试工具,但是appium起到了一个连接手机端非常好的桥梁工作!可以连接到电脑上非常方便的调用selenium工具来做测试。

Selenium 1.0版包括三个部分,分别是Selenium IDE(插件,用于录屏,并转化代码)、SeleniumGrid(扩展工具集)和Selenium RC(Remote Controller),其中最主要部分为SeleniumRC。

但是Selenium与WebDriver合并后,Selenium2.0就等价为WebDriver了,所以学习Selenium2.0的话,相当于主要学习WebDriver API了。

3.0版本直到2016年才发布,该版本彻底移出了Selenium RC,对开发环境也有了限制(例如只支持jvav8以上版本,对不同的浏览器也有最低版本要求)。相对而言,2.0版的通用性更高。

  1. Ansible常见问题

Ansible是一个自动化运维工具,基于Python开发,集合了众多运维工具的优点,可以实现批量系统配置、批量程序部署、批量运行命令等功能。并且它是基于模块工作的,本身没有批量部署的能力,真正批量部署的是ansible所运行的模块,而ansible只是提供一种框架。

2、Ansible常用模块(至少6个)?

commandping yum copy service shell file replace user group

3、什么是 Ansible 模块?

模块被认为是 Ansible 的工作单元。每个模块大多是独立的,可以用标准的脚本语言编写,如Python、Perl、Ruby、bash 等。模块的一个重要属性是幂等性,意味着一个操作执行多次不会产生副作用。

4、什么是 Ansible 的 playbooks ?

Playbooks是 Ansible 的配置、部署和编排语言,它是基于YAML语言编写的。他们可以描述您希望远程系统实施的策略,或者描述一般 IT 流程中的一系列步骤。

5、描述Ansible是如何工作的?

Ansible由节点和控制机器组成。 控制机器是安装Ansibles的地方,节点由这些机器通过SSH管理。借助SSH协议,控制机器可以部署临时存储在远程节点上的模块。

控制机器使用ansible或者ansible-playbooks在服务器终端输入的Ansible命令集或者playbook后,Ansible会遵循预先编排的规则将PLAYbook逐条拆解为Play,再将Play组织成Ansible可以识别的任务tasks,随后调用任务涉及到的所有MODULES及PLUGINS,根据主机清单INVENTORY中定义的主机列表通过SSH协议将任务集以临时文件或者命令的形式传输到远程节点并返回结果,如果是临时文件则执行完毕后自动删除。

如何查看系统都开启了哪些端口?

[root@centos6~ 13:20 #55]# netstat -lnp

7, 解释Python Flask中的数据库连接?

python中的数据库连接有两种方式

在脚本中以用第三方库正常连接,用sql语句正常操作数据库,如mysql关系型数据库的pymsql库

用ORM来进行数据库连接,flask中典型的flask_sqlalchemy,已面向对象的方式进行数据库的连接与操作

10.列举Http请求中的状态码?GET/ POST/DELETE

404 请求的url地址不存在

503 访问限制有权限

200 访问成功

302 重定向

十一 面试

项目名称:考取上海市智能网联汽车道路测试牌照

项目描述:

考取上海市智能网联汽车道路测试牌照,robotaxi自动驾驶汽车在临港获得自动驾驶道路测试许可。

个人

负责编写道路测试牌照申请资料,完成自动驾驶系统、软件仿真实车测试体系及道路测试应急预案的编写。

负责制定考牌测试用例,完成38个功能性测试,包括信号灯行人车辆等专项测试。

项目名称:robotaxi激光雷达相机传感器标定

项目描述:

标定robotaix自动驾驶车辆激光雷达相机等传感器

个人

负责标定robotaix自动驾驶车辆激光雷达相机等传感器

基于linux系统搭建标定环境,输出激光雷达和相机标定手册

十二. 传感器选型

激光雷达

知行合一2023_第32张图片

Panda64

测距原理

飞行时间测量法

扫描原理

机械旋转

线数

64

探测距离

0.3 m~200 m (10%反射率)

测量准度

±5 cm (0.3 m~1 m),

±2 cm (1 m~200 m)

回波模式

支持单回波和双回波

扫描频率

10 Hz,20 Hz

垂直视场角

40° (-25°~15°)

垂直角分辨率

0.167° (-6°~+2°),

 

1° (+2°~+3°, -14°~-6°),

 

2° (+3°~+5°),

 

3° (+5°~+11°),

 

4° (+11°~+15°),

 

5° (-19°~-14°),

 

6° (-25°~-19°)

 

 

水平视场角

360°

水平角分辨率

0.2° (10 Hz), 0.4° (20 Hz)

是否抗干扰

数据传输格式

UDP数据包 (包括距离、角度、反射率等)

点频

单回波:1,152,000 pts/s @10HZ

 

双回波:2,304,000 pts/s @10HZ

数据传输方式

UDP/IP以太网(100 Mbps)

是否支持PTP

时间来源

GPS/PTP

尺寸

高:116.70 mm

 

上直径:118.00 mm

 

下直径:116.00 mm

重量

1.52 kg

功耗

22 W

工作电压

9 V~48 V

激光器等级

Class 1人眼安全

工作温度

-20℃~+65℃

保护等级

IP6K7

相机是森云智能

十三。 清扫机器人

  1. 头部公司

酷哇,科沃斯,高仙,智行者

知行合一2023_第33张图片

  1. 技术栈

主要功能

1.自主巡航、道路清洁

2.自动绕障、停障

3.手持洗地机定点自动翻倒垃圾

4.APP和云端智能化管理

5.多种清扫任务模式自由设置

6.AI垃圾智能识别

7.行车记录,远程视频监控和接管

3.应用场景和规模

  1. 广场,公园,居民小区,工业园区

知行合一2023_第34张图片
  1. 高仙哇小白

SC50无人驾驶洗地车

蜗小白SC50是一款适用于中小型室内场景的无人驾驶洗地车,配备激光雷达、 深度相机、超声波雷达等多种传感器,具备环境感知、自动规划路径、障碍物识别 等无人驾驶功能,是一台高效、智能、安全、专业的无人驾驶洗地车。

集扫地、洗地、尘推、喷雾功能于一体,一机多用,智能清洁,支持梯控、门禁 联动功能,全场景适配,能帮助您从繁琐单调的洗地工作中解放出来,同时可选配喷雾包,实现场地喷雾功能,给您提供 整的一站式硬地面清洁方案,提高地面清洁效果,提升清洁效率,有效节省人力, 降低清洁人员工作强度,降低运营管理支出。

知行合一2023_第35张图片

应用场景

工业仓储,医院,商场,超市,写字楼,酒店,交通枢纽

十四 装车手册

十五 adas辅助自动驾驶

  1. 名词解释

全自动泊车辅助系统APA

HPP(high precision positioning)高精度定位

ADAS(advanced driving assistance system)高级驾驶辅助系统

DA(driver assistance)驾驶辅助

PA(partial automation)部分自动驾驶

CA(conditional automation)有条件自动驾驶

HA(high automation)高度自动驾驶

FA(full automation)完全自动驾驶

ACC(adaptive cruise control)自适应巡航

ELK(emergency lane keeping)紧急车道保持

LKA(lane keeping assistance)车道保持辅助

LDW(lane departure warning)车道偏离预警

LCA(lane change assistance)换道辅助

FCW(forward collision warning)前方碰撞预警

AEB(autonomous emergency braking)自动紧急制动

CMB(collision mitigation braking)碰撞预防制动

ABS(anti-lock braking system)制动防抱死系统

TCS(trace control system)循迹控制系统

VDC(vehicle dynamic control)车辆动态控制系统

HDC(hill decent control)陡坡缓降

TJA(traffic jam assist)交通拥堵辅助

HUD(heads-up display)抬头显示

BSD(blind spot detection)盲点探测

TSR(traffic sign recongnition)交通标志识别

IHS(intelligent headlight system)智能大灯

ISA(intelligent speed adaptation)智能车速控制

NVS(night vision system)夜视系统

HWA(highway assistance)高速辅助

DMS(driver monitoring system)驾驶员检测系统

PDS(pedestrain detection system)行人检测系统

TTC(time to collision)

ECU(electronic control unit)电子控制单元

TCU(transmission control unit)传动控制单元

BCM(body control unit)车身控制单元

EMS(engine management system)发动机管理系统

SRS(supplementary restraintsystem)安全气囊控制系统

SAS(steering angle sensor)方向盘转角传感器

ESP(electronic stability procedure)电子稳定程序

EPB(electronic parking brake)电子驻车制动

MFS(multi-fuction steering)多功能方向盘

HU(head unit)车载信息娱乐终端

TJP(traffic jam pilot)交通拥堵自动驾驶

APA(automatic parking assist)自动泊车辅助

EPBi(integrated electric paring brake)集成化电子驻车制动

ACM(actuator control module)换挡执行控制模块

AMP(amplifier)声音控制器

TBOX(telematics box)车载通讯基础终端

iBCM(intelligent body control module)智能车身控制单元

HPP(high precision positioning)高精度定位

EDR(event date recorder)事件数据记录仪

GPS(global positioning system)全球定位系统

UDLC(user directed lane change)用户触发换道

IACC(integated adaptive cruise control)集成式自适应巡航控制

HMI(human machine interface)人机交互

DDT(dynamic driving task)动态驾驶任务

ESC(electric stability control)电子稳定控制

EPS(electronic power steering)电动助力转向

IP(instrument panel)仪表

VRU(vulnerable road user)易受伤害的道路使用者

V2I(vihcle to infrastructure)车路通信

C2C(car to car)车车通信

V2X(vihcle to everything)

FOV(field of view)视野范围

OBU(on board unit)车载单元

OBD(on board diagnostic)车载诊断

MOST(media oriented system transport)面向多媒体的系统传输

CSMA/CD(carrier sense multiple access/collision detection)带冲突检测的载波侦听多路访问

SAE(society of automotive engineers)美国汽车工程师学会

IEEE(institute of electrical and electronic engineers)电子电气工程师学会

ISTQB(international software testing qualifications board)国际软件测试资质委员会

NCAP(new car assessment program)汽车碰撞测试

C-IASI(china insurance automotive safety index)中国保险汽车安全指数

ODD(operaltional design domain)设计运行域

OEDR(object and event detection and response)事件探测及响应

MIL(model in loop)模型在环

SIL(software in loop)软件在环

HIL(hard ware in loop)硬件在环

VIL(vhicle in loop)整车在环

  1. noa

NOA(导航辅助驾驶)属于 L3级的智能驾驶功能,是低级别智能驾驶功能如 ACC、LCC、ALC 等的叠加

小鹏 P5 国内首家市量产城市 NGP,90%” 场景对标“老司机”。小鹏城市NGP 覆盖近 90%的日常出行场景,如自动启停红绿灯、自动转弯、自动换道、自动应对加塞等。为建立人机共驾的信任感,相比于高速 NGP,小鹏将城市 NGP 的中控和仪表 SR 模拟显示做得更加丰富,比如旁车转向灯信号、车辆可行驶区域引导、转向点提示等;城市 NGP 还搭载有支持普通或简洁模式的语音交互功能。小鹏的 NGP 功能在高速和城快可达到接近零接管的智能水平,在近 90% 场景的通行效率接近导航显示的人工驾驶时间,在安全性、道路博弈能力和通行效率上超过大部分司机。

3. 全自动泊车辅助系统APA

  1. APA简介

从半自动的APA到全自动的APA:自动驾驶行业观察 | 停车不再难,L2到L4的泊车辅助系统技术剖析 - 知乎

全自动泊车辅助系统APA(Auto Parking Assist),通过控制车辆的加减速度和转向角度自动停放车辆。该系统通过AVM(环视)和USS(超声波雷达)感知泊车环境,使用IMU和车轮传感器估计车辆姿态(位置和行驶方向),并根据驾驶员的选择自动或手动设置目标泊车位。然后系统进行自动泊车轨迹计算,并通过精确的车辆定位与车辆控制系统使车辆沿定义的泊车轨迹进行全自动泊车,直至到达最终目标泊车位。

总结:APA是利用车载传感器(一般为超声波雷达或摄像头)识别有效的泊车空间,并通过控制单元控制车辆进行泊车。

APA的视觉感知分为两个部分:基于IPM(Inverse Perspective Mapping)图的停车位视觉感知,以及基于原图的道路环境感知(车位的场景检测,比如车位的背景,行人,锥桶,地锁等)。

完成自动泊车功能,需要整车的档位、EPS(电动助力转向系统)、ESP/ibooster(车身电子稳定系统)、加速、EPB、APA开关及指示灯等控制器或传感器支持:

1. 泊车控制系统通过超声波雷达及360环视信息融合泊车车位。

2. 通过APA ECU算法规划泊车轨迹。

3. 获取轮速脉冲及IMU信号,推算车辆航迹。

4. 获取EPS转向角、车速、档位等信号,用于定位融合及速度控制。

5. 根据轨迹规划结果,对车辆的档位、速度、方向盘转向角进行控制,完成车辆泊入泊出。

APA全自动泊车辅助系统采用12颗超声波雷达、4个环视摄像头和一个控制器构成,实现全自动泊车功能

知行合一2023_第36张图片

2.APA的视觉感知中的原图和IPM图的区别

如果直接对原图进行边缘提取,则会将车道线目标外的大量非目标边缘也一同提取出来,如树木、交通标志、车辆、行人等,这些构成车道线检测的干扰源。典型的检测失败案例如图所示。这也正是传统的利用Hough变换进行车道线检测的难点。

三维道路场景在二维图像平面上的透视映射过程,对后续的边缘提取及车道线建模带来不利条件。逆透视映射(Inverse Perspective Mapping, IPM)是透视映射的逆过程,可利用摄像机的角度、高度等位置信息建立三维坐标系,消除透视作用,得到场景的俯视图。经过逆透视映射之后,原本有相交趋势的车道线转化为俯视图中的平行线,更便于检测。

知行合一2023_第37张图片

3.ADAS中前视,环视,周视的区别:百度安全验证 (视觉感知的主要内容)

知行合一2023_第38张图片

1. 前视线性相机:视角较小,一般采用52°左右的相机模组安装于车辆前挡风玻璃中间,主要用来感知车辆前方较远的场景,感知距离一般为120米以内。

2. 周视广角相机:视场角相对较大,一般采用6颗100°左右的相机模组安装在车辆周围一圈,主要用来感知360°的周身环境(安装方案与特斯拉大同小异)。广角相机存在一定的畸变现象。用于

3. 环视鱼眼相机:环视鱼眼相机视角较大,可以达到180°以上,对近距离的感知较好,通常用于APA,AVP等泊车场景,安装于车辆左右后视镜下方以及前后车牌下方等4个位置做图像的拼接、车位检测、可视化等功能。

前视+周视相机往往用于行车的路况和环境感知;鱼眼相机往往用于360环视和泊车感知;车内相机往往用于驾驶员监控。但是从传感器简化的角度,行泊一体化将是未来趋势,那么势必就要考虑鱼眼和周视相机是否能统一的问题。

泊车选用的摄像头,较为常规的做法是使用四颗鱼眼相机环视拼接然后在鸟瞰图(IPM)上做停车位检测,或者在原图上障碍物检测等多任务。大多数做泊车感知时偏向于拆分成两个网络分别处理不同的任务。这种类似于松耦合的方案,两个不同的任务放在不同的网络中独立运算,然后将输出的感知结果进行过滤合并。一文详解泊车感知的摄像头需求-CSDN博客

智行者

2015年成立,是中国成立最早的无人驾驶公司

“无人驾驶大脑提供商”,而这个无人驾驶大脑是既包含了硬件解决方案(域控制器)又包含了软件解决方案(感知、定位、决策、规划、控制等算法

智能出行

智行者无人驾驶大脑IDRIVERBRAIN已成功赋能robotaxi、robobus、无人接驳车等多款L4级自动驾驶乘用车,并已在北京、苏州、武汉、成都等地落地应用。

智慧生活

搭载智行者无人驾驶大脑IDRIVERBRAIN的环卫、物流等场景车辆已实现商业化落地,成为园区、商场、医院、火车站、机场等场景的清洁、物流主力军。

特种应用

智行者无人驾驶大脑IDRIVERBRAIN被创新应用于特种领域,已成功打造无人安防车、无人巡逻车、无人驾驶物资车等多款车型,并已在高速巡逻等场景实现规模化落地。

十六 芯片

蔚来也在评估地平线的大算力芯片征程5,如果进展顺利,征程5将有可能在2023年第四季度在蔚来旗下车型上量产。

公开消息还显示,地平线征程5已签下比亚迪、自游家等多家车企的量产定

蔚来资本还投资了黑芝麻智能科技,黑芝麻也在研发用于自动驾驶的大算力芯片。黑芝麻的华山二号A1000将在今年装车量产

2022年,英伟达的大算力芯片Orin几乎席卷了国内各个智能电动车品牌的旗舰车型,蔚来ET7/ET5,小鹏G9、理想L9、智己L7、飞凡R7、威马M7、路特斯Eletre、高合HiPhi Z等无不采用了英伟达Orin,大算力芯片上车的浪潮也就此开启。

在这些旗舰车型交付之后,大算力芯片也将随着高阶智能驾驶系统的普及大规模上车。尽管面临英伟达、Mobileye、高通等传统大厂的正面竞争,国产大算力芯片正迎来最好的时候

你可能感兴趣的:(自动驾驶)