YouDuck.ai

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(テスト素材)。