rogy-AquaLab / omniboat_robokit

新歓で使うロボキット
https://rogy-aqualab.github.io/omniboat_robokit/
Apache License 2.0
0 stars 0 forks source link

volume_を削除 #155

Closed 23-saho closed 2 months ago

23-saho commented 2 months ago

volume_をvolume.read()に書き換えました。間違っていたら教えてください。

H1rono commented 2 months ago

volume.read()は呼ぶたびにGPIOからアナログ値を読み込むことになって非効率なので、一度だけ読み込むようにしたいです。変更元のコードはこの問題を構造体のプロパティに持たせることで解決していました。

struct Machine {
    float volume_;
    // ここではGPIO読み込み、呼び出しの度に(比較的)重たい処理が入る
    // 簡単のため volume の存在、およびこの関数の実装は省略
    float read_volume();
    // 元コードの one_step と同じように定期的に呼ばれる
    void one_step();
    // one_step 中になんかやる関数たち 実装は略
    void do_something1();
    void do_something2();
};

void Machine::one_step() {
    // volume 読み込み
    this->volume_ = this->read_volume();
    // 読み込んだ値を使ってなんかやる
    // this->read_volume() を呼び出す代わりに this->volume_ を参照するので効率がいい
    this->do_something1();
    this->do_something2();
}

https://github.com/rogy-AquaLab/omniboat_robokit/blob/b1b184764f4c2e733ae38876f785120f3f25585c/src/schneider_model.cpp#L77

https://github.com/rogy-AquaLab/omniboat_robokit/blob/b1b184764f4c2e733ae38876f785120f3f25585c/src/schneider_model.cpp#L83-L84

https://github.com/rogy-AquaLab/omniboat_robokit/blob/b1b184764f4c2e733ae38876f785120f3f25585c/src/schneider_model.cpp#L222

H1rono commented 2 months ago

しかし、わざわざプロパティにせずともローカル変数で読み込んだ値を受け渡せるのでは?というのが #144 の趣旨です。

struct Machine {
    //float volume_; 最終的にここを消したい
    // ここではGPIO読み込み、呼び出しの度に(比較的)重たい処理が入る
    // 簡単のため volume の存在、およびこの関数の実装は省略
    float read_volume();
    // 元コードの one_step と同じように定期的に呼ばれる
    void one_step();
    // one_step 中になんかやる関数たち 実装は略
    // volume を引数で受け取ることで read_volume() の呼び出しを避ける
    void do_something1(float volume);
    void do_something2(float volume);
};

void Machine::one_step() {
    // volume 読み込み
    float volume = this->read_volume();
    // 読み込んだ値を使ってなんかやる
    // this->read_volume() を呼び出す代わりにここでは volume の値を読む
    this->do_something1(volume);
    this->do_something2(volume);
}

これは #156 がかなりいい感じに実現できています。そこも参考にしつつ書き直してください。