YazawaKenichi / murakumo_ws

0 stars 0 forks source link

[ Tasks ] Today's Tasks KCM を実行できるようにする #36

Closed YazawaKenichi closed 1 year ago

YazawaKenichi commented 1 year ago

今日のタスクリスト

YazawaKenichi commented 1 year ago

参考になりそうなサイト

YazawaKenichi commented 1 year ago

疑問

オドメトリを更新するタイミングと、KCM を実行するタイミングがどのようにずれているのかを知るために後輩のコードを拝見させてもらった。

見たところ、角速度の PID を行っている int_cmt0() は、環境ですでに用意されたタイマーっぽい。

対して KCM を行っている orb_follow_sla() は自作の関数である。

この orb_follow_sla() がどのくらいの周期で実行されることになるのか調べようと、VSCode に全検索をかけたところ、

main() > while(1) > switch(mode) > case 9:

で呼び出されていたり、

main() > while(1) > switch(mode) > case 15: > if(sen_fr.value + sen_fl.value + sen_r.value + sen_l.value > SEN_DECISION * 4) > adjust() > while(1) > switch(ad_mode) > case 4 : > if(sen_fr.value + sen_fl.value + sen_l.value > SEN_DECISION * 4)

で呼び出されていたりと、突き詰めると main() > while(1) で KCM が呼び出されていることになっている。

YazawaKenichi commented 1 year ago

これすげぇ KCM をタイマーに入れなくて良いのかって思った

思ったんだけど、これってうまくやらないとモータの出力が変わるタイミングが main に依存するなぁと思った。

YazawaKenichi commented 1 year ago

オドメトリの更新は int_cmt2() で行われている。(ちなみに x の座標は x_position

YazawaKenichi commented 1 year ago

後輩ちゃんのコードは、ざっくり書くと以下のような構造になっている。

void tim0()
{
    ...
    (デューティ) = pid_control((速度))
    ...
    mot_out((デューティ))
    ...
}

void tim2()
{
    ...
    (現在位置), (現在速度) = odometry_update();
    ...
}

int main()
{
    ...
    (速度) = KCM_main((現在位置), (現在速度))
    ...
}
YazawaKenichi commented 1 year ago

研究

KCM_main()main() に入れるか timer() に入れるか問題。

YazawaKenichi commented 1 year ago

kcm に与える、理想的な目標速度を更新するタイミングはいつなんだろう

YazawaKenichi commented 1 year ago

うっかりクローズ

YazawaKenichi commented 1 year ago

こっちに統合