YazawaKenichi / murakumo_ws

0 stars 0 forks source link

[ Bug ] 加減速されない #23

Closed YazawaKenichi closed 1 year ago

YazawaKenichi commented 1 year ago

問題の内容

コース記憶できた!

対応する速度も計算できた!

あとはそれに応じて速度を変化させるだけ!

... あれ?速度が変化しないよ?

実行環境

再現手順

  1. 探索する
  2. playmode accel にしてスタート
  3. 速度の変化が感じられない

予想される原因

予想が正しいことの確認方法

修正すべき内容

修正する際の注意点

参考になりそうなサイト

-

YazawaKenichi commented 1 year ago

代入される値は初期値の 0.999 であった

フラッシュに格納されている速度情報を出力してみたところ、初期値ではない値が出てきたため、フラッシュの値が悪いわけではなさそう

YazawaKenichi commented 1 year ago

考えられる原因として、fixed_speed を求める際にフラッシュの値ではなく、初期化された値を使用してしまっていることが原因かもしれない

YazawaKenichi commented 1 year ago

原因のある場所をメモしておく

- accel のモードをスタートする前に flashbuffer を初期化してしまっている可能性
- flashbuffer にフラッシュの内容を呼び出していない可能性
YazawaKenichi commented 1 year ago
flash_init();    //! flash_read() でflashbuffer に値を読みだす

が読みだされているので値の読み出しはちゃんとされてそう

course_reset_flash() が読みだされている可能性がありそう

course_reset_flash() で半径と速度を初期化しているので...(フラッシュへの書き込みは search モードじゃないとできないようになっているのでフラッシュの値が初期化されていないのもうなづける)

YazawaKenichi commented 1 year ago

全部の値が 0.999 である状況ではなくなった

main while で出力している内容を以下に記しておく

__course_debug_target_speed__ = 0.99900
__course_debug_target_speed__ = 1.10000
__course_debug_target_speed__ = 1.10000
__course_debug_target_speed__ = 1.00000
__course_debug_target_speed__ = 1.00000
__course_debug_target_speed__ = 1.10000
__course_debug_target_speed__ = 0.99900
__course_debug_target_speed__ = 0.99900
    ...
__course_debug_target_speed__ = 0.99900
__course_debug_target_speed__ = 3.26057
__course_debug_target_speed__ = 521469.09375
__course_debug_target_speed__ = 0.00000
__course_debug_target_speed__ = 0.00000
__course_debug_target_speed__ = 0.00000
__course_debug_target_speed__ = 0.00000
__course_debug_target_speed__ = 0.00000
__course_debug_target_speed__ = 0.00000
__course_debug_target_speed__ = -2591933243433647094429216646627328.00000
__course_debug_target_speed__ = -30294871059243465316589717422080.00000
__course_debug_target_speed__ = -0.00000
__course_debug_target_speed__ = -4952319706039278091480751300149248.00000
__course_debug_target_speed__ = -4951601700816492570921309808099328.00000
__course_debug_target_speed__ = 0.00000
__course_debug_target_speed__ = -4951680928979006835258903352049664.00000
__course_debug_target_speed__ = 0.00000
__course_debug_target_speed__ = 0.00000
__course_debug_target_speed__ = 0.00000
__course_debug_target_speed__ = 0.00000
__course_debug_target_speed__ = 0.00000
__course_debug_target_speed__ = nan
__course_debug_target_speed__ = nan
__course_debug_target_speed__ = -349694847246503248208087684902551552.00000
__course_debug_target_speed__ = 1384241369448155539570688.00000
__course_debug_target_speed__ = -27068604679808806364905472.00000
__course_debug_target_speed__ = -3269960585332990493945650741248.00000
__course_debug_target_speed__ = -0.00000
__course_debug_target_speed__ = -6773049729379193979915235831578624.00000
__course_debug_target_speed__ = -936297425781603625336832.00000
__course_debug_target_speed__ = -526929215323665233860362240.00000
__course_debug_target_speed__ = nan
__course_debug_target_speed__ = 5700.59668
__course_debug_target_speed__ = 0.00099
__course_debug_target_speed__ = -9344828031419154540956651039943032832.00000
__course_debug_target_speed__ = 4624.15430

最終的にモータが止まる

YazawaKenichi commented 1 year ago

はっきり言ってわけがわからない

YazawaKenichi commented 1 year ago

おそらくメモリのアクセスエラーか?

YazawaKenichi commented 1 year ago

search にすると一定距離で呼び出されている関数が、accel にすると常に呼び出されるようになっている

は?

YazawaKenichi commented 1 year ago

accel では section_length を再設定していない可能性があるかも

YazawaKenichi commented 1 year ago

accel で長さを取ったあと section_length を再設定したらキモイ動きをしなくなった!

YazawaKenichi commented 1 year ago

ただ相変わらず加減速はしてないように見える

YazawaKenichi commented 1 year ago

もう一回探索走行して二次走行させてみたら加減速してるように見えた!

ただ R10 が曲がり切れなかったので全体でできてそうな動きになるかといわれると微妙そう

YazawaKenichi commented 1 year ago

カーブの前で減速するようにしたい

YazawaKenichi commented 1 year ago

一度 MATLAB でプログラムをテストしてグラフを見てみたら、良い感じの加減速をしていたのでプログラムの問題だと思う

YazawaKenichi commented 1 year ago

メモリのアクセスエラーみたいな出力は本当にメモリのアクセスエラーだった。 (ちょっと前に解決した内容なのでほんとうにそうだったか覚えていないが...)

確かコースのインデックスをインクリメントする処理が一回のタイマ周期で二回呼び出されていたことが原因だったと思う。

該当箇所を正しく訂正した結果、キモイ動きはなくなった。

YazawaKenichi commented 1 year ago

MATLAB を用いてアルゴリズムには問題がなさそうだったので今度は実際に「半径と速度の対応付け」をちゃんとやることにした。

具体的には、実際に目標速度を変化させて、様々な半径のコースを走らせるといったやり方。

走れた半径と速度を計測し、それが走れるくらいの半径の閾値を設けて離散的に速度の対応付けができるようにした。

その結果ミニコースは加減速走行できた!

YazawaKenichi commented 1 year ago

おおきいコースでの加減速走行はできていないが、本題の issue は解決されたため、この issue は一旦閉じる