基于神经网络预测车道行驶的自动驾驶
数据定义先假定
首先定义我们在自动驾驶,并且可以获取前后左右各个车的数据。传感器和摄像头已经在车身上部署好。
假定我们在车道上行驶,根据跟驰模型数据我们能知道的是:
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 可以完善网络,下次再聊
基于神经网络预测车道行驶的自动驾驶相关推荐
- 基于RGB和LiDAR融合的自动驾驶3D语义分割
基于RGB和LiDAR融合的自动驾驶3D语义分割 论文 RGB and LiDAR fusion based 3D Semantic Segmentationfor Autonomous Drivin ...
- 基于车路协同的高等级自动驾驶数据交互内容
基于车路协同的高等级自动驾驶数据交互内容 基于车路协同的高等级自动驾驶系统组成 1. 系统架构 2. 系统功能 2.1 RSS各组成单元功能 2.2 VSS各组成单元功能 3. 系统交互 基于车路协同 ...
- 基于OpenCV和深度学习的自动驾驶遥控小车
阅读原文 项目中使用的技术 Python + OpenCV Neural Network + Haar-Cascade Classifiers 项目目标 改装后遥控小车完成三个任务:自动驾驶,识别信号 ...
- 基于骁龙820A系统的自动驾驶发展趋势
目前,随着无线技术的加速创新和发展,全球汽车行业正经历着前所未有的技术创新加速.数据显示,全球已有超过2000万辆汽车搭载了骁龙调制解调器. 高通提供了神经网络处理引擎(SNPE).这款深度学习开发套 ...
- 基于模型参考自适应控制(MRAC)的自动驾驶方向盘(油门)控制方法
实习还是能学到很多学校学不到的东西,总结下实习期间学到的一个自适应控制方法.最近比较忙,先大致写下原理的笔记供自己复习,后面有空再更下仿真.如有错误请不吝赐教~ 背景 举个例子,目前公司自动驾驶车队主 ...
- 毕业设计 - 车道线检测(自动驾驶 机器视觉)
文章目录 0 前言 1 车道线检测 2 目标 3 检测思路 4 代码实现 4.1 视频图像加载 4.2 车道线区域 4.3 区域 4.4 canny 边缘检测 4.5 霍夫变换(Hough trans ...
- 环宇智行基于NVIDIA TX2的L4级自动驾驶方案
参考: http://www.in-driving.com/product/showproduct.php?lang=cn&id=54#ad-image-0 http://zhidx.com/ ...
- 科普天地|“GPS欺骗”如何误导自动驾驶汽车
文章来源:新华网,版权归原作者及刊载媒体所有. 新华社北京11月2日电(记者彭茜)一辆正常行驶的自动驾驶汽车在30秒内径直蹭上了马路牙子,车载全球定位系统(GPS).激光雷达等"高精尖&qu ...
- 一文带你看懂自动驾驶
▌汽车智能化发展 汽车智能化技术在减少交通事故.缓解交通拥堵.提高道路及车辆利用率等方面具有巨大潜能,已成为众多企业的竞争热点.我国发布的<中国制造 2025>中明确指出将智能网联汽车作为 ...
最新文章
- iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(上)
- 【052】测试数据引发的骚乱
- php sql alert,SQL ALTER
- crontab详解及实例
- Modal提示框插件的使用
- 科普!程序员分不清万圣节和圣诞节?
- 有权限的网页能分享内页?_有哪些舍不得分享的办公软件?
- agaular 离线文档_Zeal 国外一款面向开发者的离线文档查看工具
- django之视图函数
- 学生信息管理系统问题集锦(三)
- 2013 蓝桥杯校内选拔赛 java本科B组(题目+答案)
- Python ‘,=‘ 语句的使用
- java le下载安装_JCreator LE
- 计算机鼠标双击怎么,电脑鼠标双击变成属性的解决方法
- Zabbix全网监控
- 手机应用误删怎么恢复
- 2020高中计算机会考成绩查询,2020年高中会考成绩查询入口
- python微信投票平台_Python——开发一个自动化微信投票器【附代码实例方法】
- 小红书html布局自适应,Flutter实现马蜂窝小红书自适应高度轮播图
- php 错误 异常,PHP错误异常处理
热门文章
- Ubuntu上可使用的15个桌面环境
- 与mysql数据库的交互实战_基于 Go 语言开发在线论坛(二):通过模型类与MySQL数据库交互...
- realme Q5 Pro Vans联名版曝光:经典棋盘格图案设计 辨识度拉满
- ST众泰:未与长城汽车签署过任何战略协议
- 上海市消保委:春节长假期间 共受理消费者投诉4600件
- 刘强东退出武汉京东世纪贸易有限公司经理一职
- 商家自述:今年双11,我们更难了
- 华为高管“泄密”,华为P40 Pro外观定了!
- 12月10日见!卢伟冰:红米K30将用上液冷散热
- 王思聪限制消费令被取消!