The basic next question is is there a way to void the overshoot?
It would be nice if we could do this, because driving in an oscillating car is no fun.
In fact, it makes you really seasick, believe me.
I've been in this car for months on end when we prepared for the Darpa Grand Challenge.
The trick is called "PD-control."
In PD-control my steering alpha is no just related to the crosstrack error by virtue
by virtue of the gain parameter tau p,
but also to the temporal derivative of the crosstrack error.
What this means is that when the car has turned enough to reduce the crosstrack error,
it won't just go shooting for the x axis,
but it will notice that it's already reducing the error.
The error is becoming smaller over time. It counter steers. It steers up again.
This will allow it to gracefully approach our target trajectory,
assuming appropriate settings of our differential gain--tau d versus the proportional gain tau p.
How do you compute this derivative over here?
Well, at time t this is the same as the crosstrack error at time t minus the crosstrack error
at time t minus 1 divided by the time span between t and t minus 1.
In our code, we assume delta t equals 1, so so we can omit this.
The difference of the current crosscheck error and the previous one is this term over here.
We now control not just in proportion to the error itself but also to this difference
of the error using a second constant tau d.
Let's implement this. Now I give the run command two parameters--param1 and param2.
I want you to implement a controller that varies the steering direction proportionally
according to parameter 1, and differentially proportionally to parameter 2.
Again, run for 100 time steps and see what happens.
When I run my new controller with proportionality parameter of 0.2
and the differentiation one is 3.0.
Then, I get a sequence of y values that converge much more gently to 0.
Miraculously, as time goes on, they really go down to 0 and stay at 0,
which we didn't achieve for the proportional controller.
Please write that routine so we can test it.
次の基本的な質問は基準線を
越えない方法があるかについてです
蛇行する車に乗っていても楽しくないので
蛇行をなくすことができればいいですね
実際に乗ると車酔いします
DARPAグランド・チャレンジの準備で
数ヵ月間乗っていたのでこれは事実です
解消するにはPD制御と呼ばれる方法を使います
PD制御では操舵αはゲインパラメータτpに基づく
クロストラックエラーのみと
関係するわけではありません
クロストラックエラーの時間導関数にも関係します
つまりどういうことかと言うと
クロストラックエラーを減らすために
車が十分に向きを変えた時
x軸に向かって思い切り動くだけでなく
それまでのエラーの減少にも注目します
エラーが小さくなると逆に操舵し
再び上方向へ誘導します
車は目標軌道へ緩やかに接近することができます
ただし微分ゲインτdと
比例ゲインτpの適切な設定が前提です
この導関数をどう求めますか?
これは時間tにおいてCTEt-CTEt-1を
tとt-1の間のタイムスパンΔtで
割ったものと等しいです
コードではΔt=1とするとこれを省略できます
現在と前回のクロストラックエラーの差が
この項です
エラーそのものだけでなく
エラーの差分にも比例するように制御します
エラーの差分は2つ目の定数τdを使います
これを実装しましょう runコマンドに
2つのパラメータparam1とparam2を与えます
操舵の向きを変えるコントローラを
実装してください
param1に従って比例的に
param2に従って微分的に行います
今回も100ステップ実行し
何が起こるか確認しましょう
新たなコントローラを実行します
比例パラメータ0.2と
微分パラメータ3.0です
すると0に向かって穏やかに収束する
yの値の数列を得ます
すばらしいことに時間がたつにつれ
本当に0に収まってそのまま落ち着きます
比例コントローラでは
成し遂げられなかったことです
テスト用にこのルーチンを書いてください
Основные следующий вопрос-есть ли способ аннулировать выброс?
Было бы хорошо, если мы могли бы сделать это, потому что вождение в колебательных автомобиль является не весело.
В самом деле, это делает вас действительно тошноту, поверьте мне.
Я был в этой машине для нескольких месяцев в конце, когда мы подготовили для Darpa Grand Challenge.
Трюк называется «PD-контроль.»
В PD-управления моей руководящей альфа не просто связана с crosstrack ошибки добродетели
в силу усиления параметра Тау p,
но и для временной производное crosstrack ошибка.
Это означает, что, когда автомобиль оказалось достаточно, чтобы уменьшить ошибки crosstrack,
Он просто не идут съемки для оси x
но будет заметить, что он уже снижается ошибку.
Ошибка становится меньше с течением времени. Это счетчик Бычков. Он направляет вверх снова.
Это позволит ему грациозно подходить к нашей целевой траектории,
Если соответствующие параметры нашей дифференциального прибыль--Тау d против p Тау пропорциональной выгоды.
Как вычислять эта производная над здесь?
Ну в момент времени t это то же самое, как crosstrack ошибка в момент времени t минус crosstrack ошибка
в момент времени t минус 1, деленное на время промежутка между t и t минус 1.
В нашем коде мы предполагаем, что дельта t равен 1, так что мы можем пропустить это.
Текущей ошибке crosscheck и предыдущий разница этот термин более здесь.
Мы теперь управлять не только пропорционально ошибка себя, но и эта разница
ошибки с помощью второй постоянный Тау d.
Давайте выполнять это. Теперь я даю два параметра команды run--param1 и param2.
Я хочу вам реализовать контроллер, который меняется руля направления пропорционально
по словам параметра равным 1 и различной степени пропорционально значению параметра 2.
Снова баллотироваться на 100 шагов время и посмотреть, что происходит.
Когда я запускаю мой новый контроллер с параметром соразмерности 0.2
и дифференциация, один 3.0.
Тогда я получаю последовательность значений y, которые сходятся гораздо более осторожно, равным 0.
Чудом как время идет дальше, они действительно идти вниз до 0 и остановиться в 0,
которые мы не добиться пропорционального контроллера.
Пожалуйста, напишите что регулярное, чтобы мы могли проверить его.