Qt [GC9-14]:HUD-定速巡航、自适应巡航、车道偏离、车距保持

举报
DreamLife 发表于 2022/04/15 00:36:41 2022/04/15
【摘要】 基于Qt的汽车仪表模拟 如下图所示,今天主要实现定速巡航、自适应巡航、车道偏离、车距保持这几个功能 我通过观察我车的HUD发现,定速巡航就是自适应巡航的一部分,同时自适应巡航其实就是定速巡航的升级版本。当我们启动巡航是,给车辆一个固定的速度,当车辆检测到前方没有车辆是,那就按照我们给定的速度行驶,这时就是定速巡航,如果...

基于Qt的汽车仪表模拟

如下图所示,今天主要实现定速巡航、自适应巡航、车道偏离、车距保持这几个功能

我通过观察我车的HUD发现,定速巡航就是自适应巡航的一部分,同时自适应巡航其实就是定速巡航的升级版本。当我们启动巡航是,给车辆一个固定的速度,当车辆检测到前方没有车辆是,那就按照我们给定的速度行驶,这时就是定速巡航,如果检测到前方有车辆,那么这时就是自适应巡航,自适应巡航就是按照前方的车速跟车行驶,当前方车辆大于我们给定速度是,按照我们给定的速度行驶。

车道偏离检测,我观察看来就是在我前风挡玻璃的前面有一个摄像头,通过摄像头拍摄路面情况解析算出车道线的位置,并判断车辆是否压线。当车辆压线是,对应的方向的车道线消失,这个功能在60Km/h的时候才会被激活或者是显示。

车距检测,这个现在大家的做法应该都一样,可能每个车安装的设备都是一家的,就是通过车前方的一个雷达来实时检测前车与我们的位置,并根据当前车数和车身自身参数给定一个安全的距离,HUD上面的分为三个档,即上图中中间那三个矩形。随着我们与前车距离的虽小而减少并至消失。

 

先来实现我们的定速巡航与自适应巡航。当定数巡航被激活是,HUD上面显示“[ ]”,当车辆检车到前方车辆切换自适应巡航时,图中[]中小汽车图标出现,表示当前工作模式为自适应巡航。当前车消失是,小汽车图标消失,表示切换为定速巡航模式,以我们给定的速度定速实行。实现方式简单,这里就不画流程图了,还是补上流程图吧

 

首先定义三个宏定义,用来标记巡航的工作模式如下


  
  
  1. #define ADAPTIVICRUISECONTROL_OFF 0 //巡航关闭
  2. #define ADAPTIVICRUISECONTROL_NOCAR 1 //定速巡航
  3. #define ADAPTIVICRUISECONTROL_CAR 2 //自适应巡航

不定义也可以,自己能分的清楚就可以

实现接口如下

 


  
  
  1. void HUD::set_AdaptiveCruiseControl(int controlModel)
  2. {
  3. switch (controlModel) {
  4. case ADAPTIVICRUISECONTROL_OFF:
  5. ui->label_car->hide();
  6. ui->label_constSpeed->hide();
  7. break;
  8. case ADAPTIVICRUISECONTROL_NOCAR:
  9. ui->label_car->hide();
  10. ui->label_constSpeed->show();
  11. break;
  12. case ADAPTIVICRUISECONTROL_CAR:
  13. ui->label_car->show();
  14. ui->label_constSpeed->show();
  15. break;
  16. default:
  17. break;
  18. }
  19. }

以上就是定速巡航和自适应巡航的显示部分,逻辑部分后面再说。

车道偏离与上面实现方类似,定义三个混定义表示那个车道线

 


  
  
  1. #define LANEDEPARTTURE_L 1 //左车道线
  2. #define LANEDEPARTTURE_R 2 //右车道线
  3. #define LANEDEPARTTURE_DOUBLE 3 //双车道线

实现接口如下

 


  
  
  1. void HUD::set_LaneDeparture(int position, bool isOn)
  2. {
  3. switch (position) {
  4. case LANEDEPARTTURE_L:
  5. {
  6. if(isOn)
  7. {
  8. ui->label_runLine_L->show();
  9. }
  10. else
  11. {
  12. ui->label_runLine_L->hide();
  13. }
  14. break;
  15. }
  16. case LANEDEPARTTURE_R:
  17. {
  18. if(isOn)
  19. {
  20. ui->label_runLine_R->show();
  21. }
  22. else
  23. {
  24. ui->label_runLine_R->hide();
  25. }
  26. break;
  27. }
  28. case LANEDEPARTTURE_DOUBLE:
  29. {
  30. if(isOn)
  31. {
  32. ui->label_runLine_L->show();
  33. ui->label_runLine_R->show();
  34. }
  35. else
  36. {
  37. ui->label_runLine_L->hide();
  38. ui->label_runLine_R->hide();
  39. }
  40. break;
  41. }
  42. default:
  43. break;
  44. }
  45. }

 

车距保持,同理定义三个宏定义用来表示当前的距离等级,这里我试用了距离等级这个东西,HUD上面的三个矩形表示的是三个范围,而不是三个具体的值,所以我用了距离等级,呵呵呵。

 


  
  
  1. #define CARDISTANE_1 1 //距离1离前车太近
  2. #define CARDISTANE_2 2 //距离2离前车存在隐患
  3. #define CARDISTANE_3 3 //距离3离前车安全

实现接口如下

 


  
  
  1. void HUD::set_CarDistance(int level)
  2. {
  3. switch (level) {
  4. case CARDISTANE_1:
  5. ui->label_scale_1->show();
  6. ui->label_scale_2->hide();
  7. ui->label_scale_3->hide();
  8. break;
  9. case CARDISTANE_2:
  10. ui->label_scale_1->show();
  11. ui->label_scale_2->show();
  12. ui->label_scale_3->hide();
  13. break;
  14. case CARDISTANE_3:
  15. ui->label_scale_1->show();
  16. ui->label_scale_2->show();
  17. ui->label_scale_3->show();
  18. break;
  19. default:
  20. break;
  21. }
  22. }

以上就是今天要实现的内容

2019/07/23 15:23

 

 

 

 

 

 

 

 

 

 

 

文章来源: dreamlife.blog.csdn.net,作者:DreamLife.,版权归原作者所有,如需转载,请联系作者。

原文链接:dreamlife.blog.csdn.net/article/details/97485581

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。