Closed owhinata closed 1 year ago
@owhinata さん リベースは完了したのですが、リベースしたものがシミュレータで動きませんでした。
またD制御を、 steeringAmount = P制御 + kd * (今回のdiff - 前回のdiff) / 処理周期 といった形で実装しようと思うのですが、処理周期に当たる部分がわかりません(そもそも必要ですか?) よろしくお願いします。
@owhinata さん リベースは完了したのですが、リベースしたものがシミュレータで動きませんでした。
またD制御を、 steeringAmount = P制御 + kd * (今回のdiff - 前回のdiff) / 処理周期 といった形で実装しようと思うのですが、処理周期に当たる部分がわかりません(そもそも必要ですか?) よろしくお願いします。
@KodoRisei さん 動かないのは、どのレベルで動かない、ですかね? 例えば特に死んだりはしないけどスタートできないとか。。。 コンソールのログとかつけてもらえると何かわかるかもです。
処理周期は基本10msで、結構綺麗に10ms周期で動いているようです。 一定周期であれば kd に含めることもできるので不要ですね。 https://github.com/owhinata/etrobo_tr_ex3/blob/main/monitor/Uptime.h のgetUptime()でプログラム起動からの経過時間[us]を取得できるようにしています。 一旦 処理周期は無視して動かすことを目標にしてもらえると、どこかのタイミングでDriver経由でUptimeから経過時間を取得できるようにしておきますが、、、
ちなみに steeringAmount = P制御 + kd * (今回のdiff - 前回のdiff) / 処理周期 はdouble精度で計算していますが、floatにしたほうがいいかもです。 上記以外にも全体的にdouble→floatとする必要があるかもしれません → #29
@owhinata さん 言葉足らずで申し訳ありません。
Powered by TOPPERS/ASP3 RTOS of Hakoniwa Initialization is completed.. [ l_app runner: EV3RT is booted up ] [ l_app runner: EV3RT boot time: 0 secs. ] DEVICE_CONFIG_VIRTFS_TOP = __ev3rtfs 0x7ff7d04 Error: fopen(scenario.json) = 0 Initialize Start Scene 0 Walker: nil Detector: nil [ launcher: UIHttpServer start detected ] [ launcher: connected to UIcomm ] [ launcher: EV3RT is booted up, got it ] [ launcher: ready to start on left course ] [ launcher: waiting for calibration ] [ launcher: Go to the start, Ready? ] [ launcher: 3...2...1... ] [ launcher: Go!!!!!!!! ]
上記がログで、スタート位置から動きませんでした。
@owhinata さん
cd workspace/simdist/etrobo_tr_ex3/__ev3rtfs ln -f ../../../etrobo_tr_ex3/scenario.json
すみません。こちらを失念しておりました。 動作確認できました。
一旦 処理周期は無視して動かすことを目標にしてもらえると、どこかのタイミングでDriver経由でUptimeから経過時間を取得できるようにしておきますが、、、
承知しました。 まずは係数を調整して動くようにします。
一旦 処理周期は無視して動かすことを目標にしてもらえると、どこかのタイミングでDriver経由でUptimeから経過時間を取得できるようにしておきますが、、、
承知しました。 まずは係数を調整して動くようにします。
とりあえず #30 作っておきました。
@KodoRisei さん 時刻の取得ですが #32 で Walker::getUptime()で起動時間を取得できるようにしておきました。
ただしusをsecに変換しようとして↓のようなことをすると、謎な結果になるので注意してください。
整数をdoubleにキャストすると変なことになるみたいです。 ↓のようにいったんfloatにキャストしてdoubleにしてあげれば大丈夫みたいです。
シミュレータ固有の問題だと思いますが注意してください。
ちなみに同じことですが
double duration = duration_us * 1e-6
はNGで、
double duration = duration_us * 1e-6f
はOKです。
最初のほうは1e-6がdoubleなので、duartion_usをdoubleに暗黙的にキャストしているのでNG. 二つめのほうは1e-6fがfloatなので、duration_usをfloatに暗黙的にキャストしているのでOK.
@KodoRisei さん
カーブの入り口のところ、かなり安定しましたね!
ちなみにI制御もやります? https://github.com/owhinata/etrobo_tr_ex3/blob/feature/d_control/%2312/walker/LineWalker.cpp#L94
ダブルループのループのところとか、黒部分にめり込んで走行していたりするのでそれなりに効果はあるかと思います。
@owhinata さん
カーブの入り口のところ、かなり安定しましたね!
実機でもカーブの安定感が増したように感じます!
ちなみにI制御もやります?
作業の進捗的に問題なければチャレンジしたいなと思っています。
@KodoRisei さん featureブランチができていたので、コメントです。 D制御の実装は、 #25 の対応が入った fedd2b8 をベースにしたほうがいいです。 git rebase fedd2b8 でリベースできると思います。