Here is my solution. I implement a variable int crosstrack error outside my main loop
then initialize with zero.
I then add to the int crosstrack error my local crosstrack_error.
Then I have a controller that steers in proportion to the intcrosstrackerror.
When I hit run, I find that my y variable slowly converges all the way down to 0 or 0.05.
I get even faster conversions when I set this parameter to 0.01,
looking down you can see a little overshoot, but my controller converges to 0.0 fairly quickly
and then tends to stay close to 0.0.
This PID controller is kind of the best solution for the control problem at hand.
You just implemented one.
Now, here's the big question for you.
How can we find good control gains
where control gains are these parameters tau p, d, and i.
Now, this is my favorite part of this class.
Every one of my students has made it through it, and every one of my students
is puzzled why I insist on this, but when they implement it they get to love what I'm just about to show you.
The answer is to called "twiddle."
Twiddle is my favorite algorithm that I have used in my entire life.
Some people call it "coordinate ascent" to make it sound a little more sophisticated,
but I just called it twiddle, because it really gets to the heart of what's happening.
これが私の答えです
変数int_crosstrack_errorを
メインループの外に実装しました
0で初期化します
int_crosstrack_errorに
ローカルなcrosstrack_errorを加えます
int_crosstrack_errorに比例して
操舵するコントローラがあります
RUNボタンを押すと変数yが
最後に0か0.05へ至るまで
ゆっくりと収束することが分かります
このパラメータを0.01に設定すると
より早く収束します
見ていくと少し基準線を越えていますが
コントローラは急速に0.0に収束します
また0.0に近いままでいる傾向があります
このPID制御は
制御問題に対する最適な解決法です
まさに今 実装しました
ここで重要な質問があります
どうやって適切な制御ゲインを
見つければいいでしょうか?
制御ゲインはパラメータτp、τd、τiです
これはこの講義で私が好きな部分です
受講者全員がやり遂げました
みんな私の主張に当惑していましたが
実装後はこれから行うことを気に入りました
先ほどの正解には“いじり回し”と
呼ばれるものを使います
いじり回しは私がこれまで使ってきた中で
気に入っているアルゴリズムです
少し上品に聞こえるよう
座標上昇法と呼ぶ人もいますが
動作をうまく言い表しているので
私はいじり回しと呼んでいます
Вот мое решение. Я реализую ошибку crosstrack Переменная int вне моей основной цикл
затем инициализируйте с нуля.
Я затем добавить int crosstrack ошибка моей местной crosstrack_error.
Затем у меня есть контроллер, который направляет пропорционально intcrosstrackerror.
Когда я ударил перспективе, я считаю, что моя переменная y медленно сходится вплоть до 0 или 0,05.
Я получаю еще быстрее преобразования когда этого параметра задать значение 0.01,
Глядя вниз вы можете видеть немного выброс, но мой контроллер сходится к 0.0 довольно быстро
и затем, как правило, остаться близко к 0.0.
Этот PID контроллер является своего рода лучшее решение для управления проблемы под рукой.
Вы просто реализован один.
Теперь вот большой вопрос для вас.
Как мы можем найти хороший контроль прибыли
где управления успехи являются эти параметры Тау p, d и я.
Теперь это моя любимая часть этого класса.
Каждый из моих учеников сделал это через него и каждый из моих учеников
— недоумевают, почему я настаиваю на этом, но когда они реализуют это, они получают любить то, что я просто хотел показать вам.
Ответ заключается в том, чтобы под названием «вертеть.»
Вертеть это мой любимый алгоритм, который я использовал в моей жизни.
Некоторые люди называют его «координировать восхождение» сделать его звук немного более сложные,
но я просто назвал его вертеть, потому что он действительно получает в сердце то, что происходит.
这里是我的解法 我在主循环声明了新变量int_crosstrack_error
并把它初始化为0
然后我把循环体内的crosstrack_error加到int_crosstrack_error上
之后我给控制器加上int_crosstrack_error的比例项
点击"RUN" 我发现我的y值缓慢地收敛到0
当我把这个参数设置为0.01 收敛变得更快了
向下看你会发现有些越界 但我的控制器迅速收敛到0了
并且倾向于保持在0.0附近
PID控制器是控制问题中已有的最好的解决方案之一
你刚刚就实现了一个
现在 有个重要问题给你
我们要如何寻找好的控制增益呢?
控制增益指的是这些参数tau_p tau_d tan_i
这里是这节课中我最喜欢的部分
我的每一个学生都搞定了它 但他们都困惑我为什么执着于它
不过当他们看见我将要向你展示的东西 并亲手实现它后 也都爱上了它
问题的答案叫"twiddle"
Twiddle是我最喜欢的算法 并且用了一辈子
一些人管它叫"coordinate ascent" 这听上去变得有点复杂的样子
但我就把它叫做twiddle 因为它形象地描述了算法的核心过程