trip generation, modal choice, routine choice
Path planning, Maneuver regulation
Parking
central command center send instructions
Some win, some lose
plan trip independently, selfish
little communication
Sometime efficient, sometime inefficient
static, in form of map
enable the route to be adapted to changing traffic conditions
$v[t]$
$R>= 0$
$u[t]$(accel)
$v[t+dt] = v[t]+u[t]*dt$
Specify the control input $u[t]$ for all t in $[0,T]$
not a good idea for autonomous driving.
In practice, we need to consider the uncertainty of the system.
We should have:
$$
v[t+dt]=v[t]+u[t]dt+w(t)
$$
Where w(t) is the noise term capturing the uncertainty of the system.
Specify the control input $u[t]$ as a function of the state $v[t]$
able to adapt to the uncertainty of the system.
Compare the state $v[t]$ with the desired state $v_desired[t]$
Essentially, we need a mapping from state to control input
like map speed to acceleration
$$
v[t+dt]=v[t]+mu[v[t]]dt+w(t)
$$
the $u[t]$ has linear relationship with $v[t]$
$$
\mu[v] = k[v-v_{desired}]
$$
linear time-invariant
exponential convergence is stronger than asymptotic convergent
if LTI system is asymptotic convergent, it is also exponential convergent
$$
x[t+1]=ax[t]+bu[t]
$$
given:
$v_{desired}, \delta$
determine:
$u[t]$ $t = 0,1,2$
state
$v[t]$
$v[t+1] = v[t] + u[t]\delta + w[t]$
select $u[t]$ so that $w[t]$ will not accumulate
$u[t]=\mu(v[t]) = kv[t]$
$$
v[t+1] = f(v[t],u[t])
$$
Remember the review question
Overview:
track means asymptotic convergent
$x[t]$ and $x_{desired}[t]$
$\lim_{t\rightarrow\infty}|x[t]-x_{desired}[t] | = 0$
state of system:$[x[t], v[t]]^T$
if successful:
$$
[x[t], v[t]]^T \rightarrow [x_{desired}[t], v_{desired}[t]]^T
$$
$$
u[t] = -k_1(x[t]-x_{desired}[t])-k_2(v[t]-v_{desired}[t])
$$
$$
k_1,k_2>0
$$
Only contain the control over control surface (on control over throttle)
Function: KeepPitch()
Control the angle of horizontal tail (elevator)
First keep the angle of elevator same with AoA(攻角), to avoid the disturbance of the horizontal tail on the attitide of the aircraft.
1 | aircraft.PitchAngle = aircraft.AoA; |
这里的aircraft.PitchAngle指的是飞机升降舵的角度(下片为正)
根据当前俯仰角,俯仰速度,和目标俯仰角,调整升降舵面的角度
1 | aircraft.PitchAngle += 5 * (p - aircraft.Pitch) / Mathf.Exp(10 * aircraft.PitchSpeed * Mathf.Sign(p - aircraft.Pitch)); |
与俯仰角类似(分别控制滚转舵面以及偏航舵面),不过不需要第一步
Control the thrust of aircraft to change the angle of gliding
保持飞机的俯仰角不变(5度仰角)
1 | KeepPitch(5f); |
计算当前下滑角
1 | float velAngle = 90 - Vector3.Angle(aircraft.rb.velocity, Vector3.up); |
根据下滑角更改油门大小
1 | aircraft.Thrust += (p - velAngle)/500f; |
通过调整飞机的下滑角来使飞机在竖直面上接近并维持在理想的下滑道
1 | Vector3 approachDirection = Vector3.ProjectOnPlane(route.Destination - transform.position, route.direction); |
1 | ThrustKeepGliding(-3 + Mathf.Clamp(approachDirection.y / 10f, -5,5)); |
通过调整飞机的偏航舵面角度(进而影响飞机的y轴rotation)来使飞机在水平面上接近并维持在理想的航道上
1 | Vector3 approachDirection = Vector3.ProjectOnPlane(route.Destination - transform.position, route.direction); |
1 | KeepYaw(-8 + Mathf.Clamp(distance / 10f, -50, 50)); |
基本的策略以及阐述完毕,那么所谓的理想下滑道到底应该怎么得到呢?
理想下滑道是一个射线,包含一个终点(飞机着陆的终点)和一个方向(飞机接近的方向)
1 | public class Target_Route |
理想航道的偏航角和下滑角已知(分别为-8(平行于着陆跑道)和-3)
通过迭代飞机着陆所需时间来求得下滑道终点的位置
1 | route.Destination = CV.transform.position; |
A prefab is a template for a game object that can be reused across multiple scenes. Using prefabs can help build scenes faster because a prefab can be created and then reused across multiple scenes without having to recreate the same game object each time.
To create a prefab, first create a game object in the Hierarchy window and add components and child game objects to it until it looks like the desired prefab. Then drag the game object from the Hierarchy window to the Assets folder in the Project window. This will turn the game object into a prefab that can be reused across multiple scenes.
An empty prefab can also be created by right-clicking in the Project window and selecting Create > Prefab, and then editing it in the Inspector window.
To instantiate an existing prefab in a script, first create a public variable in the script to reference the prefab, and then drag the prefab onto that variable in the Inspector window. For example:
1 | public GameObject myPrefab; |
The above code creates a public variable named myPrefab and uses the Instantiate method in the Start method to create an instance of the prefab. The prefab can be dragged onto the myPrefab variable in the Inspector window so that it is instantiated at runtime.
To instantiate a prefab from the Assets folder in a script, use the Resources.Load method to load the prefab and then use the Instantiate method to instantiate it. For example:
1 | void Start() |
The above code uses the Resources.Load method to load a prefab named MyPrefab from the Resources folder in the Assets folder and then uses the Instantiate method to create an instance of the prefab.
Note: To use the Resources.Load method, the prefab must be located in a Resources folder within the Assets folder.

Starting point
The unity’s build-in physics engine PhysX is far from being precise enough for a vehicle simulator.
动手能力对于公司创业初期有关键作用
基础研发实力决定公司后期发展(学科)
读书永远风险最低, 长线收益最高
李教授能搞项目是因为他可以带动硕博本,但本科生指挥不动人
以项目为导向,兼顾基础知识的课程
自上而下, 夯实基础原理的理解,而不是调参摁卷(某些竞赛就是源代码拿来然后使劲调参,钻牛角尖,不符合人才培养要求,无基础能力,适应力差)
某些创新的小比赛就比较好,能给自己的成果锦上添花
1 | sudo dpkg -i *.deb |
1 | chmod +777 *.AppImage |
1 | sudo apt -f install |
See all the process:
1 | ps aux |
Find the target pid
1
pgrep [partial name]
return the pid of the process
kill the process
1
kill [pid]
Search for confirmed strings in file
1 | grep [option] [pattern] [file] |
display the battery percentage
1 | upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep percentage |