アンオフィシャル - Aldebaran Robotics NAO とそのほかロボットについて

NAO とそのほかロボットについての情報を発信。ここの情報はアルデバラン非公式です。内容に誤りがあった場合はごめんなさい。

Aldebaran Robotics 社の NAO、そのほかロボットに関連する情報を発信します。

NAO ハンズオン(Pepper アプリ開発経験者向け基礎編)開催します

NAO ハンズオン、第2回目を開催します。

イベント告知ページ

social-robots-japan.connpass.com

今回は Choregraphe 経験者を対象とし、NAO のアプリ開発固有のトピックなどを中心に扱う予定です。
Choregraphe の汎用性を知ってもらう意味でもためにかるかも。

興味のある方是非!

NAO ハンズオン(基礎編)開催します

以前告知していた NAO ハンズオン、第一回目を開催してみます。

イベント告知ページ
social-robots-japan.connpass.com

すでに参加の表明をいただいている方が何名かおり、告知ページからの募集は2枠だけですが、、

これからも定期的に勉強会、開催できればと思っています!

JSON データを NAO/Pepper で扱うときの文字列の問題

忘却録としてのメモです。

過去何度か JSON データを NAO/Pepper で扱うと文字化け問題が起こり、都度場当たり的な対応をしていました。根本的に解決する方法がわかればいいのですが、そこに行き着くまでに、まず、同じことを何度も調べ直さなくてもいいように少し場当たり的だけど簡単な解決方法を残しておきます。

問題を引き起こす可能性が高いのは

json.loads()

これは JSON 形式の文字列を Python のオブジェクトに変換してくれる非常に便利なメソッドですが、ここで変換された値が文字列の場合、unicode 文字列になっていると。NAO/Pepper の TTS などには utf-8 文字列を渡してあげる必要があり、ここでデータ形式の不整合が発生します。

これに対する少し場当たり的だけど最も簡単な解決方法は、取り出したデータを都度 .encode("utf-8") として utf-8エンコードしなおしてあげると

以下、確認用のテストコード。'{"text":"おはよう"}' という文字列が来た想定で、要素 text の値を取り出し、変数 textValue に代入

    import json
    jsonText = '{"text":"おはよう"}'
    data = json.loads(jsonText)
        
    textValue = data['text'].encode('utf-8')

(Pepper) レーザーセンサー活用サンプル、近付いてきている物体を捉える

つい先日 Pepper アプリ開発ハッカソン、「Pepper at BEAMS JAPAN Hack 2016」に参加しました。
そこで実装した機能の一部、色々なシーンで流用ができそうな部品を github に公開しました。

github.com

これはPepper のレーザーセンサーを活用して周辺で近づいてきたものを捉えるボックスサンプルです。ハッカソンではこれを利用して近づいてきたものの方を向き、人物だったら「すいませんなんでもありせん」などと言って振り向いて立ち去っていくという動作をさせています。ちなみにハッカソンで作ったアプリは「コミュ障の Pepper 」でした、、

f:id:takuji_kawata:20160831214428p:plain

ボックスの出力からは検出された物体の角度が出てきます。ハッカソンではその方向に人物がいるかどうかを見て、人がいたら180度回転してモゴモゴ言いながら立ち去っていくと、、

レーザーセンサーを使った理由はハッカソン会場、人が多い場所なので、顔認識だけだと近づいてきた人だけを認識するということが期待通りにいかないと思われたからです。

このボックス、用途としては例えば監視ロボットとして Pepper を使うとか。前180度(左右30度のブラインドゾーンがあるけど)を同時に捉えることができるので、カメラより視野が広いのと真っ暗闇でも機能するので、夜間でも大丈夫。

遠方を無視するパラメータと、首を近づいてきた物体の方に向けるかどうかのパラメータがあります。そのあたりはサンプルプログラムにコメントで残しておいたので確認ください。

ハッカソンメイドの即席なのでバグはあるかも。その時はごめんなさい。何れにしてもレーザーセンサーに直接アクセスして情報を取ってくる例、少ないかなと思い、参考になればと思います。

ハッカソンではこれ以外に、チャットサービスに、テキスト / 写真を投稿する機能を用意、これも再利用できそうな形で公開できればなと思います。ちなみにハッカソンで作ったアプリは、人と出会うたび Pepper が「やべえ変な奴きた」みたいなことチャットサービスに投稿したり、勝手に写真撮って投稿して「こいつのファッションどう思う?」みたいな暴言を吐きまくってました、、

審査員も含め皆さんに楽しんでいただき、それなりに評価もいただきよかった。

イデアを具現化するためのテクノロジーが骨組ならば、喋らせることばや動作が血や肉ですね。これらが合わさって一つの作品になる。そんなことが体験できた貴重な機会でした。

OpenNAO OS VirtualBox を使って NAO (Pepper) を機能拡張してみる

Softbank Robotics デベロッパーコミュニティーサイト(旧アルデバラン コミュニティーサイト)から入手できるソフトウェアの一つに 「OpenNAO OS VirtualBox」なるものがあります。 NAO/Pepper は Gentoo Linux 上で NAOqi OS が動いているわけですが、「OpenNAO OS VirtualBox 」はこの Gentoo Linux 部分について NAO と同様のものを VirtualBox 上の仮想環境で動かすことができるものです。 肝心の NAOqi が入っていないので、ロボットのエミュレータとしては使えないのですが、代わりにコンパイラなどの開発に必要なツールがインストールされています。

OpenNAO OS VirtualBox 2.1.2 とリアルロボットのアプリ開発に関連した機能の比較

名前 カーネル NAOqi C/C++コンパイラ emerge pip
OpenNAO OS VirtualBox 2.1.2 2.6.33.9-rt31-aldebaran-rt no gcc version 4.5.3 yes yes
NAO (NAOqi 2.1.4) 2.6.33.9-rt31-aldebaran-rt yes no no no
Pepper(NAOqi 2.4.3 3.10.33-rt33-aldebaran-rt yes no no no

pip は Pythonのパッケージの管理ツール。例えば、公開されている Python パッケージを NAO の中で動かしたい場合、OpenNAO OS VirtualBox 2.1.2 で構築したインストール構成を移行するという手法が取れそうです。 
emerge は Gentoo Linux のパッケージ管理ツール。これを使って特定の Linux ベース機能を拡張することができそうです。
CコンパイラLinux プラットフォーム内のライブラリを使うようなネイティブコードのコンパイルに使えそうです。ただ NAOqi が 入っていないので、NAOqi と連携するネイティブプログラムのコンパイルに使うのは少し難しそうです。 ネイティブモジュールの開発には C++ NAOqi SDK を使うのが常套手段です。

OpenNAO OS VirtualBox を使って ffmpeg にネットワーク機能、h264 エンコーダなどの機能を追加する

ffmpeg は動画と音声を変換することのできるソフトウェアーです。動画ファイルから、音声だけを抜き出したり、動画ファイルを複数の画像ファイルで切り出したり、様々なことをコマンドラインツールを使って行うことができます。このツール NAO/Pepper の中にも組み込まれているのですが、幾つかの機能が落とされています。特許やライセンスが関わっている機能なので、おそらく意図的に落としているのでしょう。 商用でアプリ配信をする場合、これら機能を使うこと一定の配慮が必要そうですが、デモンストレーショや個人での利用においては、特に問題ないかと思います。 ffmpeg の機能拡張版を OpenNAO OS VirtualBox 2.1.2 で作ってみましょう。
次から手順を説明します。

1. OpenNAO OS VirtualBox 2.1.2 のダウンロード

OpenNAO OS VirtualBox 2.1.2 は Softbank Robotics コミュニティーサイトより入手できます。(コミュニティーサイトにアクセスするにはまず コミュニティーサイトにユーザーされている必要があります。ユーザー登録は
Create New Customer Account から行います)

コミュニティーサイト、リソースページより OpenNAO OS VirtualBox 2.1.2 をダウンロードします。

https://community.ald.softbankrobotics.com/en/resources/software/

f:id:takuji_kawata:20160813211913p:plain

2. VirtualBox で OpenNAO OS VirtualBox 2.1.2 を実行

VirtualBox のインストール、セットアップについては外部のサイトを参考にしてください。
OpenNAO OS VirtualBox 2.1.2 は GUI を持っていません。基本、操作は全てコマンドラインで行うことになります。ログイン ID は nao、パスワードも nao でログインできます。
この後の作業を進める前に一つ変更しておきたい設定があります。仮想環境のネットワーク設定を開き、接続方法を Bridge にします。

f:id:takuji_kawata:20160813213754p:plain

f:id:takuji_kawata:20160813213808p:plain

変更したら一旦仮想環境を再起動、再度ログインしたら ifconfig コマンドを実行 IP アドレスを調べておきます。

VirtualBox から開かれる仮想環境のターミナルはコピー&ペーストができないなど何かと使い勝手が悪いので、以降の作業は ssh で仮想環境にアクセスして操作することをお勧めします。

3. emerge を実行してカスタム ffmpeg を作る

sudo USE="faac network librtmp x264 static-libs" emerge media-video/ffmpeg

ここでは ffmpeg にネットワークストリーミング機能、h264 エンコーディング機能、aac エンコーディング機能、rtmp ストリーミング機能を有効にしています。emerge、と各オプションの詳細については外部サイトを参考にしてください。

4. NAO に持って行く

構築されたファイルは /home/nao/opennao-distro/packages 配下に保存されています。これを NAO に持って行きましょう。
まずはファイルが複数あるので、移動用にアーカイブします。
仮想環境にて

cd /home/nao/opennao-distro/packages
zip -r  ../../myffmpeg.zip  media-libs  media-video

次にいったん PC にファイルを持ってきます。
PC にて

scp nao@<仮想環境のIPアドレス>:./myffmpeg.zip ./

これを NAO に持って行きます。
PC にて

scp ./myffmpeg.zip  nao@<NAOのIPアドレス>:./

5. NAO に配置

ssh で NAO にログイン

ssh  nao@<NAOのIPアドレス>

次のコマンドで myffmpeg ディレクトリを作成、配置

mkdir myffmpeg
mv myffmpeg.zip myffmpeg
cd myffmpeg/
unzip myffmpeg.zip 
tar -jxvf media-libs/faac-1.28-r1.tbz2 
tar -jxvf media-libs/libmp4v2-1.9.1.tbz2 
tar -jxvf media-libs/x264-0.0.20110426.tbz2 
tar -jxvf media-video/ffmpeg-0.7.8.tbz2

6. NAO 上で確認

ssh で NAO にログイン

次のコマンドで、環境変数にパスを設定、実行を確認

export PATH=~/myffmpeg/usr/bin:$PATH
export LD_LIBRARY_PATH=~/myffmpeg/usr/lib:$LD_LIBRARY_PATH
ffmpeg

次のように自分のコマンドのビルド日付が emerge を実行した時と一致していれば、自身が構築した ffmpeg が実行されたと考えて良さそうです。

f:id:takuji_kawata:20160813224318p:plain

どのように使えるのか?

今回、ffmpeg にライブエンコーディングの機能とネットワークストリーミングの機能を追加しました。これらを使って NAO のカメラ画像、マイク音声をストリーミングサーバーを介して遠隔に届けることが可能です。これはつい先日行われた「DO-IT Japan2016」の「Pepperのプログラミング教室」の中で遠隔地から会場の状況を確認し、ロボットを遠隔操作できる仕組みとして試験的に導入されました(この時は Pepper を使用)。

f:id:takuji_kawata:20160813230022p:plain

(参考:「DO-IT Japan2016」の「Pepperのプログラミング教室」に関するロボットスタートの記事
障害のある学生たちにICT教育を行う「DO-IT Japan」でソフトバンクがPepper講義 | ロボスタ

今回有効にした h264 エンコーダなどは商用利用においては特許やライセンスなどでクリアしなければならないところがあるのですが、デモ出展、試験導入的な利用では問題ないでしょう。その他 OpenNAO OS VirtualBox 色々使い道ある気がしますので、是非一度お試しいただければと思います!