数据定义先假定

首先定义我们在自动驾驶,并且可以获取前后左右各个车的数据。传感器和摄像头已经在车身上部署好。
 假定我们在车道上行驶,根据跟驰模型数据我们能知道的是:
1 左车距离
2 右车距离
3 前车距离
为了简化问题,我们暂时不使用后车距离,事实上我们也是可以获取的。

    图中可以看出我们的输出值为5类,-1 为前往左车道,1 为前往右车道,2 为加速行驶,0 为保持跟驰, -2 为刹车慢速

也就是简化模型为:三维输入,三个距离,一维输出,是前进还是保持,是刹车还是右行,为了得到神经网络权值,我们必须来假设一批数据。
如下图,三个车道,前方有车220米,右边为200米,左边为170米,我们的输出是什么?随着不断地变化,我们的自动驾驶该怎么做?

设定数据

float train_data[13][3] = {
{ 200,100,250 }, //1
{70,70,70}, //2
{ 50, 50, 45},//3
{ 50,100, 50},//4
{100,300,100},//5
{100,100,115},//6
{100,100,100},//7
{200,300,200},//8
{300,60,100},//9
{30,50,150}, //10
{100,50,100}, //11
{400,100,300},{50,60,200}
};
我们举个例子,在左车道距离为50,本车道为60,右车道为200的时候,我们可以选择右行,打右向灯,离开本车道到右车道, 输出为1.
float labels[13] = { 1,0,0,0,2,1,0,2,-1,1,-2 ,-1,1};
上面13个数据的输出为float型,ok,准备好数据,我们可以开始了。

我们可以手写一段神经网络代码,也可以使用现有的工具,设计是第一位的,我们此次设计的是,三个输入,隐层10层,一个输出,使用最简单的网络来做这次自动驾驶。


#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/imgcodecs/imgcodecs.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/ml/ml.hpp"
int main
{// 训练样本//离左前方距离为 ,前方距离, 右前方距离float train_data[13][3] = {{ 200,100,250 }, //1{70,70,70}, //2{ 50, 50, 45},//3{ 50,100, 50},//4{100,300,100},//5{100,100,115},//6{100,100,100},//7{200,300,200},//8{300,60,100},//9{30,50,150}, //10{100,50,100}, //11{400,100,300},{50,60,200}};// 每个样本数据对应的输出float labels[13] = { 1,0,0,0,2,1,0,2,-1,1,-2 ,-1,1};Mat train_data_mat(13, 3, CV_32FC1, train_data);Mat labels_mat(13, 1, CV_32FC1, labels);// BP 模型创建和参数设置Ptr<ml::ANN_MLP> bp = ml::ANN_MLP::create();Mat layers_size = (Mat_<int>(1, 3) << 3, 10, 1); // 3维输入,1维输出bp->setLayerSizes(layers_size);bp->setTrainMethod(ml::ANN_MLP::BACKPROP, 0.1, 0.1);bp->setActivationFunction(ml::ANN_MLP::SIGMOID_SYM);bp->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 10000, /*FLT_EPSILON*/1e-6));// 保存训练好的神经网络参数try{bool trained = bp->train(train_data_mat, ml::ROW_SAMPLE, labels_mat);if (trained) {bp->save("bp_param");}}catch (cv::Exception &ex){std::cout << ex.msg << std::endl;}Mat sample_mat = (Mat_<float>(1, 3) << 60,60,60);Mat response_mat;bp->predict(sample_mat, response_mat);float response = response_mat.ptr<float>(0)[0];std::cout << "the response is " << response << std::endl;sample_mat = (Mat_<float>(1, 3) << 60, 60, 200);bp->predict(sample_mat, response_mat);response = response_mat.ptr<float>(0)[0];std::cout << "the response is " << response << std::endl;sample_mat = (Mat_<float>(1, 3) << 260, 60, 100);bp->predict(sample_mat, response_mat);response = response_mat.ptr<float>(0)[0];std::cout << "the response is " << response << std::endl;
}

测试输出

本次得到的数据结果如下,

2 ->加速
左<-1      0      1 ->右
               -2 ->刹车
得到的数据分析:
1、在60,60,60的情况下,得到的结果接近为0,也就是保持不变
2、在60,60,200 的情况下,得到的结果接近为1,也就是右车距离200是比较安全,(注意这里不是真的安全),可以右行。
3、在260,60,100的情况下,结果为负数,也就是要么刹车,要么左行,可以先刹车后左行。

结论

因为数据非常少,实际上该次神经网络的权值并不理想,只要我们完善数据,根据设计需求来完善网络。此次是一个示例。改进:
1 可以完善更多的数据,在外部加载进来
2 可以完善网络,下次再聊

基于神经网络预测车道行驶的自动驾驶相关推荐

  1. 基于RGB和LiDAR融合的自动驾驶3D语义分割

    基于RGB和LiDAR融合的自动驾驶3D语义分割 论文 RGB and LiDAR fusion based 3D Semantic Segmentationfor Autonomous Drivin ...

  2. 基于车路协同的高等级自动驾驶数据交互内容

    基于车路协同的高等级自动驾驶数据交互内容 基于车路协同的高等级自动驾驶系统组成 1. 系统架构 2. 系统功能 2.1 RSS各组成单元功能 2.2 VSS各组成单元功能 3. 系统交互 基于车路协同 ...

  3. 基于OpenCV和深度学习的自动驾驶遥控小车

    阅读原文 项目中使用的技术 Python + OpenCV Neural Network + Haar-Cascade Classifiers 项目目标 改装后遥控小车完成三个任务:自动驾驶,识别信号 ...

  4. 基于骁龙820A系统的自动驾驶发展趋势

    目前,随着无线技术的加速创新和发展,全球汽车行业正经历着前所未有的技术创新加速.数据显示,全球已有超过2000万辆汽车搭载了骁龙调制解调器. 高通提供了神经网络处理引擎(SNPE).这款深度学习开发套 ...

  5. 基于模型参考自适应控制(MRAC)的自动驾驶方向盘(油门)控制方法

    实习还是能学到很多学校学不到的东西,总结下实习期间学到的一个自适应控制方法.最近比较忙,先大致写下原理的笔记供自己复习,后面有空再更下仿真.如有错误请不吝赐教~ 背景 举个例子,目前公司自动驾驶车队主 ...

  6. 毕业设计 - 车道线检测(自动驾驶 机器视觉)

    文章目录 0 前言 1 车道线检测 2 目标 3 检测思路 4 代码实现 4.1 视频图像加载 4.2 车道线区域 4.3 区域 4.4 canny 边缘检测 4.5 霍夫变换(Hough trans ...

  7. 环宇智行基于NVIDIA TX2的L4级自动驾驶方案

    参考: http://www.in-driving.com/product/showproduct.php?lang=cn&id=54#ad-image-0 http://zhidx.com/ ...

  8. 科普天地|“GPS欺骗”如何误导自动驾驶汽车

    文章来源:新华网,版权归原作者及刊载媒体所有. 新华社北京11月2日电(记者彭茜)一辆正常行驶的自动驾驶汽车在30秒内径直蹭上了马路牙子,车载全球定位系统(GPS).激光雷达等"高精尖&qu ...

  9. 一文带你看懂自动驾驶

    ▌汽车智能化发展 汽车智能化技术在减少交通事故.缓解交通拥堵.提高道路及车辆利用率等方面具有巨大潜能,已成为众多企业的竞争热点.我国发布的<中国制造 2025>中明确指出将智能网联汽车作为 ...

最新文章

  1. iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(上)
  2. 【052】测试数据引发的骚乱
  3. php sql alert,SQL ALTER
  4. crontab详解及实例
  5. Modal提示框插件的使用
  6. 科普!程序员分不清万圣节和圣诞节?
  7. 有权限的网页能分享内页?_有哪些舍不得分享的办公软件?
  8. agaular 离线文档_Zeal 国外一款面向开发者的离线文档查看工具
  9. django之视图函数
  10. 学生信息管理系统问题集锦(三)
  11. 2013 蓝桥杯校内选拔赛 java本科B组(题目+答案)
  12. Python ‘,=‘ 语句的使用
  13. java le下载安装_JCreator LE
  14. 计算机鼠标双击怎么,电脑鼠标双击变成属性的解决方法
  15. Zabbix全网监控
  16. 手机应用误删怎么恢复
  17. 2020高中计算机会考成绩查询,2020年高中会考成绩查询入口
  18. python微信投票平台_Python——开发一个自动化微信投票器【附代码实例方法】
  19. 小红书html布局自适应,Flutter实现马蜂窝小红书自适应高度轮播图
  20. php 错误 异常,PHP错误异常处理

热门文章

  1. Ubuntu上可使用的15个桌面环境
  2. 与mysql数据库的交互实战_基于 Go 语言开发在线论坛(二):通过模型类与MySQL数据库交互...
  3. realme Q5 Pro Vans联名版曝光:经典棋盘格图案设计 辨识度拉满
  4. ST众泰:未与长城汽车签署过任何战略协议
  5. 上海市消保委:春节长假期间 共受理消费者投诉4600件
  6. 刘强东退出武汉京东世纪贸易有限公司经理一职
  7. 商家自述:今年双11,我们更难了
  8. 华为高管“泄密”,华为P40 Pro外观定了!
  9. 12月10日见!卢伟冰:红米K30将用上液冷散热
  10. 王思聪限制消费令被取消!