robotctl chorale
最終更新
robotctl chorale
robotctl chorale --off
robotctl chorale --piece 2
同じ部屋にいる 2 台のアヒルが四声の曲を合唱し、他の個体は既に始まっている演奏に加わります。Ctrl-C まで続きます。
既定でオフ、しかも不可視のオフ
robotd.toml の [chorale] accept で、参加させたい個体それぞれに設定する必要があります。
オフは不可視を意味します。参加していないアヒルは、丁寧に断るのではなく空中に何も出しません。理由は実際的です。合唱は口と頭を動かすので、別のアヒルが部屋に入ってきたせいで動き出す個体は、誰も頼んでいない動作をしていることになります。
どう協調しているか
疑問が出てくる順に、4 つの決定です。
誰も指揮者に任命されていません。 両方が同じビーコンを見て、id の小さいほうが指揮します。選挙に負けることも、届かなければ困るメッセージもありません。
共有クロックがありません。 ボードには NTP も RTC の一致もないため、指揮者の拍カウンタそのものが時間基準です。BLE アドバタイズ内の 1 バイトを 1 拍ごとに増やし、新しい値の到着が強拍になります。追従側は約 25 拍で位相を平均し、無線のジッタを合奏に必要な ±20 ms 以内に収めます。
声部は割り当てではなく算出されます。 最低音のアヒルがベースを歌います。指揮者が名簿を配信し、全員がその上で同じ配席を再現します。各個体が見ている部屋の範囲が違っても、2 台が同じ声部を歌わないのはこのためです。
参加しても誰の声部も変わりません。 到着した個体は空いている声部を取り、去った個体は席を保持したまま、その声部は歌われなくなります。合唱団から誰かが出ていったのと同じです。
曲目
--piece はその個体が指揮する場合に選ぶ曲を固定します。追従側はビーコンが示す曲を歌うので、曲を確実に決めたければ全個体に設定します。id は 1 wistful、2 duck-strut、3 outer-wilds(テスト素材)。