jjzjj

任务优先是自动驾驶事故“元凶”?

中国汽车报 2023-03-28 原文
特斯拉的自动驾驶安全,再度被推上“风口浪尖”。近日,美国法院公布了一则刑事案例:驾驶员因滥用特斯拉L2级辅助驾驶系统致人死亡,被控过失杀人罪。这又引起一波关于自动驾驶安全的讨论。对于特斯拉自动驾驶事故频发的原因,有观点指出根源在于操作系统以任务为先而不是时间优先,致使车辆面对即将发生的风险没能及时作出反应。

就此观点,《中国汽车报》记者专访了南京航空航天大学计算机科学与技术学院教授韩皓和南京大学计算机软件新技术国家重点实验室特任助理研究员吴昊。韩皓告诉记者,自动驾驶车辆上不同区块使用不同的操作系统,时间优先还是任务优先取决于这个区块的功能需求。不过,记者也了解到,目前存在的五花八门的操作系统在反映灵敏性上的确存在差异。

01 自动驾驶操作系统五花八门 实时反映差距明显

如今,我们使用的电脑基本上绕不开微软的Windows操作系统,或者苹果的IOS操作系统,这两家企业几乎垄断了电脑操作系统市场。但是,自动驾驶汽车甫一起步,便伴随着各种操作系统的诞生,多家具有实力的大公司均开发出各具特色的操作系统。

韩皓告诉记者,目前比较知名的自动驾驶操作系统有华为的鸿蒙操作系统、加拿大黑莓公司开发的QNX操作系统、特斯拉采用的Linux内核操作系统。“有些汽车企业也在开发自己的操作系统,比如,大众汽车的操作系统与特斯拉的就不同。它们开发的操作系统都是不开源系统,因此,很难知道它们操作系统的全貌。”韩皓说。

事实上,与自动驾驶汽车一样,在计算机刚兴起时,全球也有着数不清的操作系统。

比如上世纪八十年代初期风靡一时的DOS操作系统,此外还有UNIX、FreeBSD操作系统等。因操作系统功能的实现与芯片等密切相关,在后来纷繁复杂的操作系统竞争中,微软抢抓先机与英特尔达成战略合作,Windows操作系统与英特尔的芯片研发同步进行。因Windows操作系统紧贴英特尔的芯片功能,把芯片功能发挥得淋漓尽致,于是在众多操作系统中脱颖而出。如今,Windows代替了当年DOS处于“霸主”地位,也结束了计算机领域操作系统“混战”的局面。

其实,在汽车领域,自动驾驶汽车兴起之前,汽车上便使用了芯片,比如,发动机、变速器的ECU中都有芯片,但这些芯片的运行还用不着操作系统,仅需功能软件起到控制作用即可。“传统汽车上使用的芯片各自独立运行,互相之间几乎不发生关系,因此,传统汽车不需要操作系统把它们统一起来。” 韩皓说。自动驾驶汽车兴起后,车用操作系统便紧跟着发展起来。“目前,自动驾驶汽车和计算机行业刚起步时一样,操作系统五花八门,还没有哪种操作系统占据主导地位。” 韩皓说。

记者注意到,目前自动驾驶汽车的操作系统都支持多核,但在实时、启动速度等方面有较大差别。特斯拉自动驾驶采用的Linux操作系统,在实时性方面,不打开CONFIG_PREEMPT_RT(适时抢占补丁)的情况下,启动速度可以达到毫秒级,打开CONFIG_PREEMPT_RT的情况下,则是微秒级。两者之间相差1000倍。

与之相比,QNX操作系统的实时性稍好于特斯拉的操作系统,不过也有微秒级的任务调度延迟。综合来看,目前的几种主流操作系统的实时性仍有较大差异,Linux操作系统的启动速度从1秒到10秒不等,QNX为几百毫秒,传统的简单RTOS系统也是几百毫秒,甚至更短。在实时性上,Linux并不占优,在内核功能安全上,Linux操作系统也没有功能安全等级之分,这或许也是有观点认为特斯拉自动驾驶事故频出的原因所在。

不过,尽管Linux操作系统在多个方面并不占优,但其软件生态极为丰富,大量的免费软件可以从开源社区获得,因此,Linux操作系统大量运用于中控娱乐、导航、行车记录仪等设备。那么,Linux操作系统是否适合驾驶控制系统?是否适合功能优先?业内人士认为,在实时性和启动速度上,Linux操作系统表现不佳,在功能使用上,行业、企业应该认真思考如何应用。

韩皓也表示,计算机各种命令都在Windows操作系统的指挥之下,但自动驾驶汽车的不同操作对应的功能相差很大,不同的功能对反应时间的要求也相差很大,这也对操作系统提出了更高要求。他认为:“关系到驾乘人员安全的区块,要求反应灵敏,制动时间短,此时操作系统应要求时间优先。在座舱操作系统中又有很多子系统,比如打开音响、启动空调等功能操作的时间不那么紧迫,这类操作系统就可以选择任务优先。”

业内人士认为,出于各方面的考虑,车企自动驾驶操作系统会采取时间优先或者任务优先,但最根本的还是要把消费者的利益和安全放在最前面。

02 加强测试以降低风险

在五花八门的操作系统面前如何保障安全?这就需要加强自动驾驶汽车的测试。吴昊告诉记者:“自动驾驶汽车的测试包括两部分,传统汽车功能测试和自动驾驶功能测试。通俗地说,传统汽车上路,车辆要取得合格证,驾驶人要有驾照。自动驾驶汽车就是把驾驶人的驾照转换成自动驾驶系统,只有这套系统取得了‘驾照’,车辆才能上路。”

自动驾驶汽车与传统汽车有很大区别,因此在自动驾驶汽车测试中,一般会先采用仿真技术进行测试,大型仿真软件虚拟出多个驾驶场景,观测车辆在这些虚拟环境下的表现。通过仿真测试之后,车辆才会被投放到指定的测试道路上试运行。吴昊说:“目前全国多个城市开辟了自动驾驶测试道路,为智能网联汽车的驾驶功能完善起到了促进作用。”

不过,目前自动驾驶技术进步很快,测试手段却一直滞后于技术迭代,这会不会导致测试难以起到监督作用?对此,吴昊认为:“自动驾驶测试只针对结果,要求功能、性能达到要求即可,对于实现的过程不会去考虑,因此,技术迭代速度与测试不存在脱节现象。”

不容忽视的是,自动驾驶测试也面临不少麻烦,韩皓告诉记者,目前各大车企的操作系统都是封闭的,没有开放源码,原因之一是所有的操作系统不可避免地都存在漏洞,一旦开放源码被发现漏洞后,对自身不利,但这给测试带来很多阻碍。另外,目前,自动驾驶分为视觉派和激光雷达派两派,这种差别导致很难制定统一的检测标准,给自动驾驶测试提出了挑战。

03 信息安全也不能忽视

除了业内外更关注的诸如碰撞事故等传统功能安全外,韩皓认为行业更应关注信息安全。韩皓说:“传统汽车主要强调功能安全,比如,制动安全、碰撞安全等。但自动驾驶汽车大量使用IT技术,在传统汽车功能安全的基础之上,信息安全变得更加突出。”

据介绍,大型软件及操作系统很难避免漏洞,这就导致自动驾驶软件存在一定的安全隐患。“目前,车联网安全面临的问题包括网络安全事件频发、存在安全技术缺口、技术平台建立处于起步阶段还没有发挥高效功能、政策法规体系也有待完善等。”韩皓说。

据介绍,2016年以来,全球发生的安全事件增加了605%,仅2019年就增加了1倍以上,这其中31%属于汽车盗窃,27%属于汽车系统控制,23%属于数据隐私泄露,19%归属于其他。韩皓认为:“目前对自动驾驶汽车还缺乏完善的安全测试方法和专业工具,也缺乏通信协议分析和威胁预警工具。自动驾驶汽车还处于摸索阶段,对车联网运行过程中产生的数据缺乏有效利用的方法。”

韩皓告诉记者,目前在自动驾驶汽车领域,在技术平台层面还存在检测结果与监测数据不能有效互认和共享的问题,造成了供需对接存在信息不对等,以及技术和数据资源浪费的现象。因此,在政策法规方面需要加强车主个人信息安全保护法律法规的制定,以及车联网数据安全管理。“车联网相关重要数据出境等方面尤其需要高度重视。”韩皓说。


有关任务优先是自动驾驶事故“元凶”?的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  3. ruby - 如何使用 RSpec::Core::RakeTask 创建 RSpec Rake 任务? - 2

    如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake

  4. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  5. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  6. ruby-on-rails - Rake 任务仅调用一次时执行两次 - 2

    我写了一个非常简单的rake任务来尝试找到这个问题的根源。namespace:foodotaskbar::environmentdoputs'RUNNING'endend当在控制台中执行rakefoo:bar时,输出为:RUNNINGRUNNING当我执行任何rake任务时会发生这种情况。有没有人遇到过这样的事情?编辑上面的rake任务就是写在那个.rake文件中的所有内容。这是当前正在使用的Rakefile。requireFile.expand_path('../config/application',__FILE__)OurApp::Application.load_tasks这里

  7. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  8. ruby - 帮助使用 Ruby 中的 "Whenever"gem 来执行 cron 任务 - 2

    我以前没有使用过cron,所以我不能确定我这样做是对的。我想要自动化的任务似乎没有运行。我在终端中执行了这些步骤:sudogeminstall每当切换到应用程序目录无论何时。(这创建了文件schedule.rb)我将此代码添加到schedule.rb:every10.minutesdorunner"User.vote",environment=>"development"endevery:hourdorunner"Digest.rss",:environment=>"development"end我将此代码添加到deploy.rb:after"deploy:symlink","depl

  9. ruby - 在 rake 任务中运行 capybara - 2

    如何在Rake任务中运行Capybara功能?例如:访问('http://google.com')谢谢! 最佳答案 在任务中尝试这样的事情:require'capybara'require'capybara/dsl'Capybara.current_driver=:seleniumBrowser=Class.new{includeCapybara::DSL}page=Browser.new.pagepage.visit("http://www.google.com")puts(page.html)

  10. ruby - 在 ruby​​ 中使用自动创建插入数组 - 2

    我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?

随机推荐