天天看點

Qt [GC9-14]:HUD-定速巡航、自适應巡航、車道偏離、車距保持

Qt [GC9-14]:HUD-定速巡航、自适應巡航、車道偏離、車距保持

我通過觀察我車的HUD發現,定速巡航就是自适應巡航的一部分,同時自适應巡航其實就是定速巡航的更新版本。當我們啟動巡航是,給車輛一個固定的速度,當車輛檢測到前方沒有車輛是,那就按照我們給定的速度行駛,這時就是定速巡航,如果檢測到前方有車輛,那麼這時就是自适應巡航,自适應巡航就是按照前方的車速跟車行駛,目前方車輛大于我們給定速度是,按照我們給定的速度行駛。

車道偏離檢測,我觀察看來就是在我前風擋玻璃的前面有一個攝像頭,通過攝像頭拍攝路面情況解析算出車道線的位置,并判斷車輛是否壓線。當車輛壓線是,對應的方向的車道線消失,這個功能在60Km/h的時候才會被激活或者是顯示。

車距檢測,這個現在大家的做法應該都一樣,可能每個車安裝的裝置都是一家的,就是通過車前方的一個雷達來實時檢測前車與我們的位置,并根據目前車數和車身自身參數給定一個安全的距離,HUD上面的分為三個檔,即上圖中中間那三個矩形。随着我們與前車距離的雖小而減少并至消失。

先來實作我們的定速巡航與自适應巡航。當定數巡航被激活是,HUD上面顯示“[ ]”,當車輛檢車到前方車輛切換自适應巡航時,圖中[]中小汽車圖示出現,表示目前工作模式為自适應巡航。目前車消失是,小汽車圖示消失,表示切換為定速巡航模式,以我們給定的速度定速實行。實作方式簡單,這裡就不畫流程圖了,還是補上流程圖吧

Qt [GC9-14]:HUD-定速巡航、自适應巡航、車道偏離、車距保持

首先定義三個宏定義,用來标記巡航的工作模式如下

1.#define ADAPTIVICRUISECONTROL_OFF 0 //巡航關閉
#define ADAPTIVICRUISECONTROL_NOCAR 1   //定速巡航
#define ADAPTIVICRUISECONTROL_CAR 2     //自适應巡航      

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

實作接口如下

void HUD::set_AdaptiveCruiseControl(int controlModel)
{
    switch (controlModel) {
    case ADAPTIVICRUISECONTROL_OFF:
        ui->label_car->hide();
        ui->label_constSpeed->hide();
        break;
    case ADAPTIVICRUISECONTROL_NOCAR:
        ui->label_car->hide();
        ui->label_constSpeed->show();
        break;
    case ADAPTIVICRUISECONTROL_CAR:
        ui->label_car->show();
        ui->label_constSpeed->show();
        break;
    default:
        break;
    }
}      

以上就是定速巡航和自适應巡航的顯示部分,邏輯部分後面再說。

車道偏離與上面實作方類似,定義三個混定義表示那個車道線

Qt [GC9-14]:HUD-定速巡航、自适應巡航、車道偏離、車距保持
#define LANEDEPARTTURE_L 1  //左車道線
#define LANEDEPARTTURE_R 2  //右車道線
#define LANEDEPARTTURE_DOUBLE 3 //雙車道線      
void HUD::set_LaneDeparture(int position, bool isOn)
{
    switch (position) {
    case LANEDEPARTTURE_L:
    {
        if(isOn)
        {
            ui->label_runLine_L->show();
        }
        else
        {
            ui->label_runLine_L->hide();
        }
        break;
    }
    case LANEDEPARTTURE_R:
    {
        if(isOn)
        {
            ui->label_runLine_R->show();
        }
        else
        {
            ui->label_runLine_R->hide();
        }
        break;
    }
    case LANEDEPARTTURE_DOUBLE:
    {
        if(isOn)
        {
            ui->label_runLine_L->show();
            ui->label_runLine_R->show();
        }
        else
        {
            ui->label_runLine_L->hide();
            ui->label_runLine_R->hide();
        }
        break;
    }
    default:
        break;
    }
}      

車距保持,同理定義三個宏定義用來表示目前的距離等級,這裡我試用了距離等級這個東西,HUD上面的三個矩形表示的是三個範圍,而不是三個具體的值,是以我用了距離等級,呵呵呵。

Qt [GC9-14]:HUD-定速巡航、自适應巡航、車道偏離、車距保持
#define CARDISTANE_1 1  //距離1離前車太近
#define CARDISTANE_2 2  //距離2離前車存在隐患
#define CARDISTANE_3 3  //距離3離前車安全      
void HUD::set_CarDistance(int level)
{
    switch (level) {
    case CARDISTANE_1:
        ui->label_scale_1->show();
        ui->label_scale_2->hide();
        ui->label_scale_3->hide();
        break;
    case CARDISTANE_2:
        ui->label_scale_1->show();
        ui->label_scale_2->show();
        ui->label_scale_3->hide();
        break;
    case CARDISTANE_3:
        ui->label_scale_1->show();
        ui->label_scale_2->show();
        ui->label_scale_3->show();
        break;
    default:
        break;
    }
}      

以上就是今天要實作的内容

Qt [GC9-14]:HUD-定速巡航、自适應巡航、車道偏離、車距保持

繼續閱讀