2021 . 2 . 27
プログラム班はここまで試作機のプログラム作成、ロボットのモデリングを行ってきました。
試作機のプログラム作成
まず、PV撮影用に試作機のプログラムを作りました。システムの構成にはRobot Operating System(ROS)を用いています。システムは以下のようになっています。

以上のシステムを使って試作機を動かしたところ、次の問題点が浮かび上がりました。
ボタンに移動する際はあらかじめ決めていた関節角度を参考にしていたため、Lynxの位置が少しでも変わるとボタンを押せなくなってしまった
関節角度などを測定するセンサーが搭載されていないため、細かな制御が困難だった
ROS1ではPython2系しか使えないため、将来的にAIを実装することを考えるとPython3を利用したい
これらの反省点を踏まえ、初号機ではシステムを次のように変更することにしました。
関節のサーボモーターをPWMからコマンド方式のものに変更することで関節角度の細かな調整、現在角度の取得が可能になる
ロボットのモデリングを行い、Move It!(ROSの機能)を利用することで逆運動問題を解く。これによりLynxの位置が変わっても正確にDJセットを操作できるようになると期待される
Python3を利用するため、ROS1からROS2に移行する
現在Move It!による逆運動問題を進めています。ロボットのモデリングは終了しているため、Move It!の利用練習をしています。以下の写真はモデリングしたロボットになります。(今はまだダサいですがこれから調整していく予定です!笑)

Lynx自信にセットリストを組ませる(考えさせる)
選んだ曲同士の繋げ方や演出を決めさせる
の2つです。
とりあえずデータが無いと始まらないので、まずはセットリストのデータ集めを行いました。1001tracklists という大量のセットリストが記録された素晴らしいサイトがあるので、ここから情報を集めてデータセットを作ります。
ここで得られる情報は
セットリストがプレイされたラジオやイベント名と、その日時
作った人(アーティスト)
流された曲
セットリスト(に含まれる曲)のジャンル
などです。
かなりの数のセットリストが得られそうなので、CSVでまとめたりすると後々作業効率の低下を招きそうです。今回はとりあえずSQLiteで保存することにしました。
上記の情報を取得・保存して、流れた順番に曲名を記録したらセットリストが一つできあがりです。
データベースは
セットリストそのものの情報を記録するテーブル
セットリスト中に流れた曲とその順番を記録するテーブル
曲名と作者、レーベルが記録されたテーブル
の3つのテーブルで構成しました。アーティストを表すテーブルも作ればよかったと後悔しています。
一つ目のテーブルはこんな感じです。ジャンルを表現するために、各ジャンルのカラムを定義して1か0を割り振ってます。自己流なのであまり良い方法じゃないかもしれません。

二つ目はこんなです。セットリストの番号と曲の番号を紐づけてます。orderinsetlist列は念のためいれときましたが、多分必要ないです。その曲を流し始めた時刻も記録されていたりされていなかったりします。情報が存在しないものは諦めるしかないです。

三つ目では曲名を記録して番号を割り振っています。Remixかどうかを表す列があるのにRemixした人を表す列が無いのはおかしいと思うかもしれませんが、僕もそう思います。いずれ追加します。

このようにして実際のセットリストを集めて、まずは人が作ったものと見分けがつかないセットリストを作るAIの開発にとりかかります。その後、どういうジャンルの曲でセットリストを作るとか、誰々っぽいセットリストを作るとかしていく予定です。まだ試してはいませんが、シーケンスを生成するという意味では文章生成に近いタスクだと思っています。文章生成と違うのは明確な正解というものが存在しないことで、その辺を解決するには敵対的生成ネットワーク(架空のキャラクターの画像を作るAIなどに利用される技術)の類が向いてると思っています。
現在は楽曲のメタデータのみを用いてセットリストを扱っています。実際の曲を聞かずに決めるなんておかしいので、どうにかして音源データを収集して選曲に利用していく予定です。最近は合法的にダウンロードできる音源がいっぱいあるので、ひとまず学習用にはそれで十分だと思います。ただ、楽曲の数は100万種類を超える可能性があるので、その中から選び出すアルゴリズムは検討の余地があります。あと、ストレージが足りなくなりそうで怖いです。
ABOUT DJ Robotics
DJ Robotics wants to create a society where people and humanoid robots coexist and robots can play an active role in our daily lives. To achieve this, we provide opportunities and experiences for people to meet robots through entertainment.