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できなかったり、動かしたくないと思う人もいるかも。)
やっても動くものは限られるので今回のようなシチュエーションじゃないと意味ないです。今回作ったcozmo_driverが使うのはrospyとメッセージ定義くらいだったのでなんとか動きました。(最近のROSはpython3でも動くように推奨されているので公式に近いコードは本質的には動くが、バイナリインストールとの兼ね合いで問題が発生している。)
Cozmo(WiFi Station) <---WiFi---> Android Phone() <--- USB cable ---> PC (SDK and ROS)
となっています。なのでROSは完全に手元のPCで動いていて、それが携帯に送られ、Cozmoが動きます。ちょっと微妙ですが、Cozmo SDKとはそういうものなのです。
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とはそういうものなのです。