双向直线车辆单个红绿灯路口设计

 

 报 告 名 称:     双向车辆直线通行单个红绿灯路口  

摘要:

   使用unity模拟一个简单十字路口,实现红绿灯的切换,控制其中一辆小车的运行。在3个坐标随机生成直线运行的小车,遇到红灯可以停止运动。

引言

  本unity研究与已有的完善的多车道、可转弯、可显示实时车量、多画面显示的交通系统数字孪生研究相对比,优势在于简单易开发容易理解,本研究涉及的插件少,逻辑清晰,框架简单,对于入门学习unity的人具有一定参考意义和价值。

技术路线:

一、AI思路:

1、创建道路和交通信号灯模型:使用Unity的建模工具创建道路和交通信号灯模型,确保道路和交通信号灯的位置和布局符合你的需求。

2、添加车辆和行人模型:使用Unity的资源库或自定义模型,添加车辆和行人模型到场景中,以模拟真实的交通情况。

3、设置车辆和行人的行为:使用Unity的脚本编写车辆和行人的行为逻辑,例如遵守交通规则、避免碰撞等,实现这些行为逻辑。

4、添加交通信号灯控制逻辑:使用Unity的脚本编写交通信号灯的控制逻辑,例如根据时间或车辆流量来改变信号灯的状态。

5、运行场景并观察结果:在Unity中运行场景,观察车辆和行人的行为以及交通信号灯的控制效果。根据观察结果,对模型和逻辑进行调整和优化。

二、实际具体设计思路:

1、实际受限于学习能力、调试时间成本、设计生命周期。很难采用并行工程的思想一次设计成功,作为unity初学者,无法熟练使用软件,采用累加的方法实现,列出需要实现的功能:

(1)横向红绿灯颜色切换

(2)汽车生成

(3)随机汽车生成

(4)横向单方向随机汽车等待红灯

(5)横向双方向随机汽车等待红灯

(6)横向双方向汽车防止穿模,追尾,前方有汽车等红灯静止时后方汽车减速或停止

(7)纵向红绿灯颜色切换,与横向红绿灯对应

(8)纵向单方向随机汽车等待红灯、防止穿模,追尾,前方有汽车等红灯静止时后方汽车减速或停止

 2、一步步增添、修改代码累加功能、同时调整参数

设计过程

一、资源准备

  准备模型、贴图(normal、diffuse、镜像、法向)、预制体、粒子特效、音乐、花式字体等,模型从unity store 下载。较复杂的模块可在其他新建项目中做好后导出资源包,再导入本项目,也可以在本unity项目另建场景进行设置,设为预制体后使用。资源不需要一步添加到位,是实现什么功能,需要什么导入什么,在设计过程中不断添加。

二、搭建场景

1、设置地形:

(1)导入地形贴图,set height设置高度差与地形凹凸。

图 1  设置地形相对原点高度

(2)paint teture,设置地形具体颜色。

(3)种花草、树、paint detail,优化地形细节。

(4)物体对齐,选中物体后f+v,在shaded wireframe下聚焦对齐。

(5)设置一空节点,用于度量位置。

2.、路口设置红绿灯杆。

(1)添加圆柱、长方体等原生物体模拟红绿灯形状,也可以导入现有模型。

(2)添加点光源,调整光强和光照范围。

三、设计红绿灯路口

红绿灯信号周期设置

表 1横向红绿灯信号

颜色

时长

信号

实际输出信号

处理

Red

5

0

1

Green

4

1

2

yellow

1

2

0

表 2纵向向红绿灯信号

颜色

时长

信号

实际输出信号

信号处理

Green

4

0

1

yellow

1

1

2

Red

5

2

0

图 2   红绿灯信号周期

四、编写程序

以下为部分重要脚本阐释说明

1、红绿灯切换脚本——RGB light

 因不是设计多个路口,未使用定时器全局设置,简单使用延时函数Invokerepeating()。时间线设置为红灯5s,绿灯4s,黄灯1s,一轮循环10s。处理信号根据生成位置做不同处理。

2、生成预制体脚本——RGB light

 为了方便传递参数仍在RGB light脚本中实现。定义小车列表,定义位置列表,使用instantiate()函数实现。

图 3  预制体的生成脚本部分代码

3、Prefabcar

设置小车运动,根据信号、距离路口距离和生成位置判断运动方向、停车等红灯。设置车间距,防止追尾。

图 4  射线检测相关代码

4、carmove

控制小车运动。未设置撞击爆炸特效、音效。先前设计的小车通过物理系统加力的方式运动,地形不平整,碰撞体的编辑、重力。摩擦力等环境参数不好设置,调试过程中经常翻车。改为了通过transform组件直接运动。

5、Raycast

射线检测,判断控制的小车是否闯红灯。

6、HUD

设置HUD跟随控制的小车,显示速度。控制显示用时、超速、闯红灯UI界面,HUD未设置距离显示。

7、Camerafollow

控制摄像机运动轨迹,角度。

8、RobotControl

导入的Robot模型自带脚本,修改了部分动画状态机和动画脚本。

9、Mouselook

控制摄像机视角。

10、UImusic

控制音乐的播放

11、Scenemanager

场景切换

图 5 场景切换关键代码截屏

五、测试,调整参数

设置采用度量点和原生物体辅助测量,多次调试。

图 6  测量点的展示

六、选择性加入音乐、粒子特效、sky天空盒等

花瓣、雨雪等粒子特效实现:

设置Paticale材质,在粒子系统(particle system)中调整rotation over lifetime实现旋转、Color over lifetime实现淡入淡出,force over lifetime受力等,loop循环播放。更精细的场景采用粒子特效组合方式实现。

图 7  粒子系统设置

设计结果

1、实现红绿灯的切换,控制其中一辆小车的运行。在3个坐标随机生成直线运行的小车,遇到红灯可以停止运动。

2、控制小车按键设置:前进加速w,后退q,减速s,转向a、d,重置位置r

3、数字键1-6切换场景

4、UI按钮雨雪实现天气切换

设计缺陷

1、随机生成汽车,随机间隔,随机速度,长时运行存在概率卡死路口。

2、未设计超车、逆行、闯红灯、超速、变道等行为。

3、仅设计单路口,不涉及交通系统

4、未设置行人

    5、未设置撞击效果

设计改进

1、单车道改成多车道。

2、设计人行道,加入行人,调整汽车速度和红绿灯周期等调参数。

3、设计小车拐弯。

4、单路口改为多路口。

5、加入地面烘焙。

6、设计小车行使路径。

7、设置T型、一字型路口。

5、设计交通堵塞。

6、设计店铺、楼房等路边场景。

7、导入A*算法,实现小车自动寻路

8、实现车牌识别,计算实时车辆。

9、添加天气模块,模拟下雪、下雨天气。

结论

采用累加功能的思路设计,每一步清晰可见,代码比较简洁基础,容易学习使用修改,如果有人想设计红绿灯路口或交通系统,可以参考借鉴本研究的设计方法和unity具体场景。

参考文献

[1]Lawa0592.物体跟随移动的不同实现方法.[DB/OL].https://blog.csdn.net/weixin_42358083/article/details/122753421

[2]mr_five567.Unity 获取物体的子物体的方法.[DB/OL].Unity 获取物体的子物体的方法_unity获取子物体-CSDN博客

[3]robot.[DB/OL].https://assetstore.unity.com/zh?category=decentralization&orderBy=1

[4]米牙.交通系统.[DB/OL].https://blog.csdn.net/BDDNH/article/details/117479916?utm_medium=distribute.pc_relevant.none-task-blog-2~

[5].事件函数执行顺序[DB/OL].https://docs.unity.cn/cn/current/Manual/ExecutionOrder.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值