AIカメラで命を吹き込む！インタラクティブなネコ型ロボット開発秘話

## はじめに
「つくる」を通じて、誰もがヒーローになれる開発コンテスト[「ヒーローズ・リーグ 2024」](https://heroes-league.net/)において、私の作品「**クロとシロ**」が**オンラインヒーロー賞**をいただきました。ありがとうございます。

https://protopedia.net/prototype/5916

この記事では、開発秘話と題して「クロとシロ」のインタラクション技術について紹介します。

## 作品概要
「クロとシロ」は「アニマトロニクスでかわいい動物をつくる」個人プロジェクトのひとつです。かわいらしい見た目だけでなく、インタラクティブな動作と高度な機能を兼ね備えています。「クロとシロ」の2体はそれぞれ異なる性格を持ち、見る人に親近感を与えながら楽しい体験を提供します。

以降は「クロとシロ」のことをシンプルに「ネコ」と表現します。

### 主な機能の紹介
ネコは喋ります。

https://x.com/CH1H160/status/1827720655061868672?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1827720655061868672%7Ctwgr%5E62b9bcc25c5f0db7448c4b18283ddd9385ad54c7%7Ctwcon%5Es1_c10&ref_url=https%3A%2F%2Fprotopedia.net%2Fprototype%2F5916

触れると反応します。

https://x.com/CH1H160/status/1823660106111967568?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1823660106111967568%7Ctwgr%5E62b9bcc25c5f0db7448c4b18283ddd9385ad54c7%7Ctwcon%5Es1_c10&ref_url=https%3A%2F%2Fprotopedia.net%2Fprototype%2F5916

物を見せても反応します。

https://x.com/CH1H160/status/1827669875894223083?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1827669875894223083%7Ctwgr%5E62b9bcc25c5f0db7448c4b18283ddd9385ad54c7%7Ctwcon%5Es1_c10&ref_url=https%3A%2F%2Fprotopedia.net%2Fprototype%2F5916

### 実現している技術について
ネコのモーションはUnityでシミュレータを自作して生成しています。実機を使わず試せるので便利です。シミュレータでアニメーションを作れば、自動で各軸の値(CSV形式)が出力されます。その値を実機に送ることで連携動作が可能です。

https://x.com/CH1H160/status/1824414537883222062?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1824414537883222062%7Ctwgr%5Ee99dfb3c218357d1206f3e73a4c925bdacefaa80%7Ctwcon%5Es1_c10&ref_url=https%3A%2F%2Fprotopedia.net%2Fprototype%2F5916

その他のインタラクション技術のほとんどは、AIカメラの機能を賄っている**AKARI**によって実現しています。例えば、物を認識したり対話したりする部分です。ネコの台座部分にあたります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63199/05eab0cf-7eea-3e76-5123-5b09633f78df.png)

## AKARIとは
AKARIは「誰もがロボット作りを身近に！」を目指して開発した、オープンソースの小型卓上ロボットです。

https://akarigroup.github.io/docs/index.html

### 特徴と魅力
AKARIはAIカメラを搭載しており、単体でも画像認識が行えるほか、Webブラウザ上からの開発にも対応しています。初心者が基礎を学ぶだけでなく、上級者が高度なプロジェクトを実現することも可能です。

https://x.com/akariRobot/status/1781531898080293276

### 活用方法
AKARIは組み立てを通じてハードウェアの仕組みを学べるだけでなく、プログラミングの基礎教育にも最適です。例えば、ビジュアルプログラミング言語である「[Scratch](https://scratch.mit.edu/)」にも対応しています。

https://github.com/AkariGroup/akari_scratch/tree/main

さらに、日常生活に役立つプロジェクトや、研究開発用途としても活用できます。AIカメラの物体認識技術を応用したり、遠隔操作可能な監視ロボットの構築が可能です。

### 技術仕様
AKARIのAIカメラはOAK-D Liteを採用しています。推論を行うことができる演算機能が搭載されており、顔認識・物体認識はもちろん、セグメンテーションや骨格推定など様々な画像認識を使うことも可能です。

https://shop.luxonis.com/products/oak-d-lite-1?srsltid=AfmBOopiiZQYI8F_i1WjUXWaD3iYKqjzwxlosqXg30uWjt4q2r4svAE1

また、他のシステムはMakerに人気のM5Stackやそのセンサー群、DYNAMIXELサーボで構成されており、親しみやすいと思います。

## AKARIをネコにする方法
AKARIで直接ネコを動かすこともできたでしょうが、作品をうまくパッケージングするため、ネコの開発では一部システムを変更して利用しました。主な変更点を紹介します。

### 通信プロトコルの変更
ハードウェアの大きな変更点は、AKARIヘッド部のDYNAMIXELサーボを、ネコ独自のモータ制御基板とサーボ群に置き換えてるところです。ネコはAKARIよりも軸数が増えるためです。通信プロトコルをDYNAMIXELからModbusに変更しています。

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63199/a1afe864-98f6-e06c-78fa-f794803f5084.png">

ネコのモータ制御基板は、モーションを受信することで動きを再生するようにしています。よって、ネコは以下のようなメッセージ構造にしています。例えば「ウィンク」のモーションをネコに送信するにはアドレス1に0、アドレス2に50を入れて送信します。

| アドレス | 内容 | 値 |
| :---: | :---: | :---: |
| 1 | 左目の開閉 | 0~50 |
| 2 | 右目の開閉 | 0~50 |
| 3 | 左目の横移動 | 0~50 |
| 4 | 右目の横移動 | 0~50 |
| 5 | 左耳の回転 | 0~100 |
| 6 | 右耳の回転 | 0~100 |
| 7 | 口の開き | 0~15 |
| 8 | 頭の回転 | 0~800 |
| 9 | 頭の前傾 | 0~250 |
| 10 | 頭の左傾 | 0~250 |
| 11 | 頭の右傾 | 0~250 |
| 12 | 尻尾の左方向 | 0~200 |
| 13 | 尻尾の右方向 | 0~200 |

:::note info
**こだわりポイント**
ネコの瞬き動作だけは通信を介さず、モータ制御基板内のランダムな周期で自動実行されます。これは通信負荷を下げる目的に加え、上位ソフトを動かしていないときでも生物感ある動きを実行し続けるためです。
:::

### 音声合成の変更
AKARIにはakari_chatgpt_botという音声認識、文章生成、音声合成を使って対話するチャットボットアプリが提供されています。この機能を用いてネコの対話も実現しています。しかしながら、ネコは渋い声にしたかったので、このリポジトリ内のVOICEVOXキャラクターを変更して使用しています。

https://github.com/AkariGroup/akari_chatgpt_bot

使用したのはVOICEVOX 青山龍星です。

https://voicevox.hiroshiba.jp/product/aoyama_ryusei/

:::note info
**こだわりポイント**
ネコのクロは重厚で低音な声である「青山龍星」、シロは柔らかく温かい声である「冥鳴ひまり」にして、それぞれの個性を引き立てました。
:::

### 物体検出の変更
AKARIにはYOLOの推論を行うアプリも提供されています。これを使うことで簡単に物体検出ができます。

https://github.com/AkariGroup/akari_yolo_inference

ネコはオリジナルのデータセットで物体認識を行いたかったため、以下を参考にアノテーションと学習を実施しました。

https://akarigroup.github.io/docs/source/dev/custom_object_detection/main.html

これにより、例えば「ウィンクして」と書いてある魚を検出できるようになりました。この検出結果をトリガーにしてモーションが実行されます。

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63199/a75a5040-29eb-4ade-5c69-0ec021aaf532.png">

:::note info
**こだわりポイント**
分かりやすい形状かつ、背景と一致しない色合いにしました。ネズミで試したら、灰色なので背景に溶け込みやすく検出しにくかったです。
:::

## 気に入った技術を使ってみよう
AKARIは、流行りの認識技術や対話機能を誰でも簡単に試せるのが魅力的です。今までは構成部品がやや高価なところもありましたが、RaspberryPi5を使用した廉価版も公開されたため、開発の敷居も下がったのではないでしょうか。ライセンスも気軽に利用しやすいCC BY 4.0やApache2.0です。

https://akarigroup.github.io/docs/source/assembly_light/main.html

ネコのような作品をいちから作り始めるのは大変ですが、AKARIのような技術から学ぶことでインタラクティブな作品を作りやすくなります。近年進化が目覚ましい、AIや音声対話などの技術を自身のハードウェアに取り込むことで、少しずつ自分の作品に命が宿ったようにも見えてくることでしょう。

<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63199/de8c0020-20be-fbce-650a-7695f3b0344b.jpeg">