Unity场景内画车道线(根据五阶曲线系数)

news/2024/9/29 0:29:12/

        之前做过使用Dreamteck Splines插件构建车道线之前需求是给定车道线的点位,根据点位来进行构建。

        由于AI识别出来的点位不线性,画出来的车道线经常是歪七扭八,所以使用五阶曲线系数进行构建。

        使用在线图形计算器进行测试构建,公式为:

x=a+b*y+c*y^2-d*y^3+e*y^4

        我使用的测试系数为:

        a=1,b=0.01,c=0.005,d=0.0001,e=0

        代入后公式即为:

x=1+0.01y+0.005y^2-0.0001y^3+0y^4

        这里是输入y轴坐标点,返回结果为x坐标,想知道多远的点位坐标,将位置信息代入y即可。

构建出来的图形如下图所示,

        在unity中,将公式转为代码,输入五阶曲线系数数组,与y点的坐标,返回值为该坐标的x点坐标。即为:

 public float GetSplineX(float[] fit_params, float y_point){      return fit_params[0] + (fit_params[1] * y_point) + (fit_params[2] * (float)Math.Pow(y_point, 2.0)) - (fit_params[3] * (float)Math.Pow(y_point, 3.0)) + (fit_params[4] * (float)Math.Pow(y_point, 4.0));}

        初始化时构建车道线,创建Spline的物体

  private void CreatSplineMesh(){Spline_Render_Objs = new GameObject("Spline");Spline_Render_Objs.transform.localPosition = Vector3.zero;Spline_Render_Objs.transform.SetParent(base.transform);splineComputer = Spline_Render_Objs.AddComponent<SplineComputer>();splineComputer.type = Spline.Type.BSpline;//使用插件自带的Bspline效果划线,也可以选择贝塞尔曲线splineComputer.sampleRate = 5;splineComputer.sampleMode = SplineComputer.SampleMode.Uniform;splineComputer.space = SplineComputer.Space.Local;Spline_Render_Objs.AddComponent<MeshRenderer>().material = DottedLine_mat;//指定车道线材质SplineRenderer splineRenderer = Spline_Render_Objs.AddComponent<SplineRenderer>();splineRenderer.spline = splineComputer;splineRenderer.uvMode = MeshGenerator.UVMode.UniformClip;splineRenderer.uvScale = new Vector2(1f, 0.2f);splineComputer.RebuildImmediate();}

        在进行点位创建和赋值

for (int i = 0; i < y_distance; i++)//y_distance为具体想显示的长度
{x_Pos = GetSplineX(lane_info.lane_fit_params_left_5rd, i);SplinePoint m_point = new SplinePoint();m_point.position = pos;m_point.size = 0.5f;m_point.color = Color.white;splineComputer.SetPoint(_idx, m_point);
}

        构建出来的车道线如下图所示,这里只选择了0-39米的点位。

        目前车道线的长短可以根据Y轴的距离进行调整。

        但是若是遇到虚线+实线+虚线的车道线,该方法还有待升级(我也没想好咋整)


http://www.ppmy.cn/news/1531230.html

相关文章

6-4 汪星人和喵星人

小王和小苗分别是一只可爱的狗狗和猫猫&#xff0c;它们都属于哺乳动物(Mammal)&#xff0c;性格非常活跃&#xff0c;并对自己的名字都很在意并感到自豪&#xff0c;同时&#xff0c;为了显示存在感&#xff0c;它们还经常发出一些噪音。 请编写一个抽象类Mammal和接口CanJum…

Python库matplotlib之一

Python库matplotlib之一 plot函数使用列表或数组画线绘图的格式 matplotlib.pyplot 是使 matplotlib 像 MATLAB 一样工作的函数集合。每个 pyplot 函数都会对图形进行一些更改&#xff1a;例如&#xff0c; 创建图形在图形中创建绘图区域在绘图区域中绘制一些线条用标签装饰绘…

数据结构 - 概述及其术语

经过上一章节《数据结构与算法之间有何关系&#xff1f;》的阐述&#xff0c;相信大家对数据结构多少有了点了解&#xff0c;今天我们将进入数据结构的正式学习中。 在计算机科学中&#xff0c;数据结构是一种数据管理、组织和存储的格式。它是相互之间存在一种或多种特定关系的…

Ubuntu下安装向日葵:闪退

下载 https://sunlogin.oray.com/download 初次安装 $ sudo dpkg -i SunloginClient_15.2.0.63064_amd64.deb 正在选中未选择的软件包 sunloginclient。 (正在读取数据库 ... 系统当前共安装有 234281 个文件和目录。) 准备解压 SunloginClient_15.2.0.63064_amd64.deb ..…

自动驾驶综述 | 定位、感知、规划常见算法汇总

1. 引言 自动驾驶技术是当代科技领域的前沿之一&#xff0c;它综合了多个学科的知识&#xff0c;如计算机视觉、深度学习、传感器融合、控制理论等。在自动驾驶系统中&#xff0c;定位、感知和规划是实现自动驾驶的核心部分。本文将从这三个方面汇总自动驾驶中常见的算法&…

Spring系统学习(五)——Spring数据库编程

Spring 数据库编程概述 在Spring中&#xff0c;数据库编程的核心模块是Spring JDBC和事务管理。Spring提供了简化数据库操作的工具和接口&#xff0c;例如JdbcTemplate&#xff0c;大大减少了与JDBC API相关的繁琐代码。接下来&#xff0c;我们详细介绍Spring JDBC及其事务管理…

Unity3D入门(二) :Unity3D实现视角的丝滑过渡切换

1. 前言 上篇文章&#xff0c;我们已经初步了解了Unity3D&#xff0c;并新建并运行起来了一个项目&#xff0c;使相机视角自动围绕着立方体旋转。 这篇文章&#xff0c;我们来讲一下Unity3D怎么过渡地切换视角。 我们继续是我上篇文章中的项目&#xff0c;但是需要向把Camera…

JAIN SLEE 和 Spring Boot对比

在性能方面&#xff0c;JAIN SLEE 和 Spring Boot 各有优势&#xff0c;取决于使用场景。为了更好地比较两者的性能&#xff0c;以下从几个关键方面进行分析&#xff1a; 1. 设计目标与适用场景 JAIN SLEE&#xff1a;专门为电信级应用设计&#xff0c;擅长处理高并发、低延迟…