Closed YazawaKenichi closed 1 year ago
int_cmt0()
orb_follow_sla()
オドメトリを更新するタイミングと、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 が呼び出されていることになっている。
これすげぇ KCM をタイマーに入れなくて良いのかって思った
思ったんだけど、これってうまくやらないとモータの出力が変わるタイミングが main に依存するなぁと思った。
オドメトリの更新は int_cmt2()
で行われている。(ちなみに x の座標は x_position
)
後輩ちゃんのコードは、ざっくり書くと以下のような構造になっている。
void tim0()
{
...
(デューティ) = pid_control((速度))
...
mot_out((デューティ))
...
}
void tim2()
{
...
(現在位置), (現在速度) = odometry_update();
...
}
int main()
{
...
(速度) = KCM_main((現在位置), (現在速度))
...
}
KCM_main()
を main()
に入れるか timer()
に入れるか問題。
kcm に与える、理想的な目標速度を更新するタイミングはいつなんだろう
うっかりクローズ
今日のタスクリスト