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とはそういうものなのです。

0 件のコメント:

コメントを投稿