Closed YazawaKenichi closed 1 year ago
代入される値は初期値の 0.999 であった
フラッシュに格納されている速度情報を出力してみたところ、初期値ではない値が出てきたため、フラッシュの値が悪いわけではなさそう
考えられる原因として、fixed_speed を求める際にフラッシュの値ではなく、初期化された値を使用してしまっていることが原因かもしれない
原因のある場所をメモしておく
- accel のモードをスタートする前に flashbuffer を初期化してしまっている可能性
- flashbuffer にフラッシュの内容を呼び出していない可能性
flash_init(); //! flash_read() でflashbuffer に値を読みだす
が読みだされているので値の読み出しはちゃんとされてそう
course_reset_flash()
が読みだされている可能性がありそう
course_reset_flash()
で半径と速度を初期化しているので...(フラッシュへの書き込みは search モードじゃないとできないようになっているのでフラッシュの値が初期化されていないのもうなづける)
全部の値が 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
最終的にモータが止まる
はっきり言ってわけがわからない
おそらくメモリのアクセスエラーか?
search にすると一定距離で呼び出されている関数が、accel にすると常に呼び出されるようになっている
は?
accel では section_length を再設定していない可能性があるかも
accel で長さを取ったあと section_length を再設定したらキモイ動きをしなくなった!
ただ相変わらず加減速はしてないように見える
もう一回探索走行して二次走行させてみたら加減速してるように見えた!
ただ R10 が曲がり切れなかったので全体でできてそうな動きになるかといわれると微妙そう
カーブの前で減速するようにしたい
一度 MATLAB でプログラムをテストしてグラフを見てみたら、良い感じの加減速をしていたのでプログラムの問題だと思う
メモリのアクセスエラーみたいな出力は本当にメモリのアクセスエラーだった。 (ちょっと前に解決した内容なのでほんとうにそうだったか覚えていないが...)
確かコースのインデックスをインクリメントする処理が一回のタイマ周期で二回呼び出されていたことが原因だったと思う。
該当箇所を正しく訂正した結果、キモイ動きはなくなった。
MATLAB を用いてアルゴリズムには問題がなさそうだったので今度は実際に「半径と速度の対応付け」をちゃんとやることにした。
具体的には、実際に目標速度を変化させて、様々な半径のコースを走らせるといったやり方。
走れた半径と速度を計測し、それが走れるくらいの半径の閾値を設けて離散的に速度の対応付けができるようにした。
その結果ミニコースは加減速走行できた!
おおきいコースでの加減速走行はできていないが、本題の issue は解決されたため、この issue は一旦閉じる
問題の内容
コース記憶できた!
対応する速度も計算できた!
あとはそれに応じて速度を変化させるだけ!
... あれ?速度が変化しないよ?
実行環境
再現手順
予想される原因
予想が正しいことの確認方法
修正すべき内容
修正する際の注意点
参考になりそうなサイト
-