2017年1月7日土曜日

Anki cozmoをROSで動かす

前回CozmoSDKのインストールをしました。
SDKが出たら当然ROS化したくなるのが心情です。

なので作ってみました。以下です。

https://github.com/OTL/cozmo_driver

マニアックな動画も用意しました。rqt_ez_publisherで動かして、rvizで表示しています。
https://www.youtube.com/watch?v=1RK-Mo6DGEw



出来たもの

いまのところ以下のようなことが出来てます。
  • カメラ画像のPublish (sensor_msgs/Image)
  • 台車の操作 (geometry_msgs/Twist)
  • 首とリフトの操作(面倒だったのでstd_msgs/Float64でやっちゃってます)
  • 発話 (std_msgs/String)
  • 背中のLED操作 (std_msgs/ColorRGBA)
  • 首とリフトの角度をPublish(sensor_msgs/JointState)
  • 見えたCubeの位置姿勢をPublish, /tf
  • バッテリ残量 (sensor_msgs/BatteryState)
  • IMU (sensor_msgs/Imu)
今後できそうなこととしては
  • trajectory_msgs/JointTrajectoryのサポート
  • キューブ関係
があります。Cozmo SDKは機能が豊富なのですべてをカバーするのは結構大変です。公式からなかなか出ないのも納得。機能的にSDK自体が豊富でよく出来ているのでROSでラップするありがたみもあまり感じないかもです。SDK自体がそもそもAndroidとの単なるブリッジだし、それをさらにラップするのもなぁ、って感じ。

Cozmoは発売してかなり経つのですが、いままでROS対応した人が(おそらく)いなかったのには理由があります。
Cozmo SDKがpython3.5必須なので、python2.7が必要なrospyとは同居出来ないのです。
私はその事実を知って驚愕しましたが、(危険な?)ハックでなんとか動かしました。なのでしばらくは日の目をみなそう(公式にReleaseできなかったり、動かしたくないと思う人もいるかも。)

Python3でrospy?

一応Python3でROS(のごく一部)を動かす方法を下に書いておきますが、真似しないようにしましょう。
やっても動くものは限られるので今回のようなシチュエーションじゃないと意味ないです。今回作ったcozmo_driverが使うのはrospyとメッセージ定義くらいだったのでなんとか動きました。(最近のROSはpython3でも動くように推奨されているので公式に近いコードは本質的には動くが、バイナリインストールとの兼ね合いで問題が発生している。)

sudo apt-get install python3-yaml
sudo pip3 install rospkg catkin_pkg

ハードウェア構成

Cozmo SDKを使ってないとわかりにくいのですが、ハードウェア的には結構ややこしいことになっています。

Cozmo(WiFi Station) <---WiFi---> Android Phone() <--- USB cable ---> PC (SDK and ROS)

となっています。なのでROSは完全に手元のPCで動いていて、それが携帯に送られ、Cozmoが動きます。ちょっと微妙ですが、Cozmo SDKとはそういうものなのです。

2017年1月6日金曜日

Anki Cozmo SDKをUbuntu16.04にインストールする

AnkiのCozmoを米アマゾンから買いました。非常に良く出来ています。
https://anki.com/en-us/cozmo
http://www.itmedia.co.jp/news/articles/1606/28/news124.html



日本で買うと4万円近いですが本当は$180です。amazon.comから買いましょう。
https://www.amazon.com/dp/B01GA1298S

SDKが用意してあって、自由にプログラミングすることができます。
カメラが付いていて、かわいいロボットが$180で手に入るのはすばらしいですね。

SDKの情報は以下から入手出来ます。
https://developer.anki.com/en-us

Python3.5を使うことから、古いOS(Ubuntu14.04)だとインストールがちょっと厄介なので、Ubuntu16.04にインストールしてみます。MacやWindowsもサポートされています。

Linux用インストール手順
http://cozmosdk.anki.com/docs/install-linux.html#install-linux

Python3と依存関係のインストール


sudo apt-get update
sudo apt-get install python3 python3-pip python3-pil.imagetk

SDKインストール


pip3 install --user 'cozmo[camera]'

あとはAndroid/iOSでやることが違います。これはSDKが携帯を経由してロボットを動かすという仕組みだからです。そもそもcozmoは家庭内LAN・インターネットに接続しません。
ロボット自体がWLANステーションとなって、携帯とだけつながります。

今回はAndroidでやります。

Android&Linux用手順

http://cozmosdk.anki.com/docs/adb.html#adb

sudo apt-get install default-jre adb

本当はadbは公式から入れないといけないみたいですが、端折って標準のやつを入れてみましたが今のところ動いています。(が、真似しないほうがいいでしょう)

あとはAndroidを開発者モードにしてUSBデバッグを有効な状態にすればOK。("Android USBデバッグ" ググってください)

最後に動作確認として以下の4行をPython3で実行してcozmoが喋ればOK!(必ずpython3で実行する必要があります)

Hello Worldプログラム


import cozmo
def cozmo_program(robot: cozmo.robot.Robot):
    robot.say_text("Hello World").wait_for_completed()
cozmo.run_program(cozmo_program)

これは以下のものをコピペしたものです。(Apache License, Version 2.0)
https://github.com/anki/cozmo-python-sdk/blob/master/examples/tutorials/01_basics/01_hello_world.py

まだチュートリアルとかはあまり充実していませんが、色々できそうです。
APIも良く出来ていると思います。

次回ROSで動かします。