家庭用自律移動ロボット「カチャカ」の開発者API公開とROS 2インターフェイス実装

近藤 豊 <youtalk@pfrobotics.jp>

野崎 耕平

外丸 敏宏 村瀬 和都

株式会社Preferred Robotics https://www.pfrobotics.jp

日台 健一

寺田 耕志

近藤 豊@youtalk• 2021/11~ Preferred Robotics PjM / エンジニア• 2019/8 #ROS2ではじめよう 出版• 2018/5~ Preferred Networks エンジニア• 2018~ ROSCon JP 実行委員
• 2013/4~ カワダロボティクス 主任• 2013/3 奈良先端大 Ph.D
2

@pfrobotics• 2021/11 Preferred Networksより分社化• 自律移動ロボットの製品化・事業化に注力• B2C / B2B両事業の同時進行

3

すべての人にロボットをCEATEC Japan 2018

https://youtu.be/VGj3daiFNdM

スマートファニチャープラットフォーム

カチャカ

https://kachaka.life

https://youtu.be/SdVglHOJgiA@kachaka_jp• 家庭用自律移動ロボット• 家具の自動運搬を通じて物の移動、片付け、習慣化などをサポート• 本体：228,000円• カチャカシェルフ：23,800円〜• サブスクリプション：980円/月8https://www.instagram.com/youtalk/reels/9すべての移動ロボット開発者にカチャカAPIを
ROSCon JP 2023

カチャカAPI• スマフォアプリ相当のAPIを外部開発者に公開• gRPCの.protoファイル、Pythonクライアント
ライブラリ、ROS 2ブリッジの提供• ROS 2ブリッジは外部PC実行• Apache License 2.0
https://github.com/pf-robotics/
kachaka-api
11カチャカAPI• Pythonプログラミングはカチャカ
体内のJupyterLabで実行可能• カチャカAPIの開発に必要なものはブラウザだけ

12

60倍速

カチャカAPI提供機能
コマンド実行

センサ出力• 家具運搬、目的地移動• オドメトリ（自己位置と現在速度）取得• 任意の位置姿勢移動• IMUデータ取得• 速度指令• LiDAR点群データ取得• 発話• 前カメラ画像取得• 家具一覧取得、目的地一覧取得• 物体認識結果（人、家具、充電器、扉）取得• コマンド実行履歴一覧取得• カチャカマップ取得• 自動充電、手動操作の設定
14

ROS 2ブリッジ提供機能$ ros2 topic list | grep kachaka/kachaka/front_camera/camera_info/kachaka/front_camera/image_raw/kachaka/front_camera/image_raw/compressed/kachaka/imu/imu/kachaka/layout/locations/list/kachaka/layout/shelves/list/kachaka/lidar/scan/kachaka/manual_control/cmd_vel/kachaka/mapping/map/kachaka/object_detection/result/kachaka/odometry/odometry/kachaka/robot_info/version/kachaka_description/joint_states/kachaka_description/robot_description

15$ ros2 service list | grep -v parameter/kachaka/auto_homing/set_enabled/kachaka/manual_control/set_enabled$ ros2 action list
/kachaka/kachaka_command/execute$ ros2 interface list | grep kachaka.../msg/KachakaCommand.../msg/Location.../msg/LocationList.../msg/ObjectDetection.../msg/ObjectDetectionListStamped.../msg/Shelf.../msg/ShelfList.../msg/ShelfSize.../action/ExecKachakaCommandカチャカ

スマートフォンgRPC
コンテナ

Playground
コンテナ

端末

カチャカ
アプリ

gRPC
UIサーバ

JupyterLab
サーバ

ブラウザ

gRPC
APIサーバ

自作gRPC

プログラム

kachaka_grpc_ros2_bridge

自作gRPCプログラム

ros2_bridge
コンテナ

外部PC
19

自作ROS 2

プログラム

外部PC

YComponent
XComponent
RobotInfoComponent
カチャカ

Ros2TopicBridge<
kachaka_api::GetRobotVersionResponse,
std_msgs::msg::String>

gRPC
コンテナ
gRPC
APIサーバ

Converter

GetRobotVersion
RPC呼び出しros2_msg->data = grpc_msg.version()~/version
トピックPub

カチャカソフトウェアのバージョンをPubするROS 2コンポーネント

22

https://github.com/pf-robotics/kachaka-api/blob/main/ros2/
kachaka_grpc_ros2_bridge/src/component/robot_info_component.cpp

カチャカAPI経由でのナビゲーション• ExecKachakaCommand
アクションをRViz2の2D
Goal Pose機能に適用• 前カメラによるSemantic
Segmentation、LiDAR、ToFすべてをセンサー統合• 家具の積載有無でInflation
Mapも変化Navigation 2によるナビゲーション• https://github.com/ros-planning/navigation2 をリモートブレインで実行可能• センサー情報はLiDARのみ• カチャカAPIでは未提供のPathやInflation Map表示に対応

カチャカソフトウェア本気のナビゲーション• 性能自体はカチャカAPI経由とほぼ同様（ブリッジに伴うオーバーヘッドなし）• カチャカAPIでは未提供のSemantic Segmentation、ToFが使用可能• ToF APIはプライバシー問題を解決後、提供予定

25

カチャカAPIROS 2ブリッジTips

CompressedImageの利用

ImageTips• 非圧縮画像トピックはHzが低いが、JPEG画像トピックはHzが高い$ ros2 topic hz /kachaka/front_camera/
image_raw
average rate: 1.961$ ros2 topic hz /kachaka/front_camera/
image_raw/compressed
average rate: 8.672

CompressedImage• remapすればRViz2などでも描画可能$ rviz2 --ros-args --remap/kachaka/front_camera/image_raw/camera_info:=/kachaka/front_camera/camera_info28

物体認識アプリケーション

Tips• 独自の学習データセットなので人は足だけでも認識可能• カチャカシェルフはカバー有無、積載有無に限らず認識可能• Network Architecture Searchによる限界までの軽量化• 人追従、家具自動発見などに

人 家具 充電器 扉

応用可能

29

IMUアプリケーション
Tips• XYZ軸の並進加速度とZ軸の回転速度を出力• キッドナップ検出、転倒検出などに応用可能

30

センサートピックのQoS設定

Tips• カチャカのセンサートピックはすべてrclcpp::SensorDataQoSを使用• ReliabilityをBest Eﬀortに設定しないと、トピックをSubできないので注意cmd_velの安全機能
Tips• 前カメラのSemantic Segmentation、LiDAR、ToFによる非常停止機能が有効• 後退は安全機能がない（ぶつかる）• 自動充電機能の無効化は可能$ ros2 service call /kachaka/auto_homing/set_enabled std_srvs/srv/SetBool "data: true"• RemapすればROS 2標準パッケージとも相性良し$ ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args --remap/cmd_vel:=/kachaka/manual_control/cmd_vel

32kachaka_grpc_ros2_bridgeのローカル実行Tips• ros2_bridgeコンテナを使わず、ローカル実行することも可能$ cd ~/kachaka-api/ros2/kachaka_grpc_ros2_bridge$ protoc -I ~/kachaka-api/protos --grpc_out gen-src--plugin=protoc-gen-grpc=/usr/bin/grpc_cpp_plugin--cpp_out=gen-src ~/src/kachaka-api/protos/kachaka-api.proto$ mkdir -p ~/kachaka-api-ros/src$ ln -s ~/kachaka-api/ros2/kachaka_* ~/kachaka-api-ros/src/$ cd ~/kachaka-api-ros$ rosdep install --from-paths src --ignore-src -r -y$ colcon build$ source ~/kachaka-api-ros/install/setup.zsh$ ros2 launch kachaka_grpc_ros2_bridge grpc_ros2_bridge.launch.xml
server_uri:=$KACHAKA_IP:26400• https://github.com/pf-robotics/kachaka-api/blob/main/Dockerfile.ros2 を参考に
33

カチャカAPIワークショップ資料

Tips

https://github.com/pf-robotics/kachaka-api/
blob/main/docs/kachaka_api_workshop.ipynb• 9/15に開催されたカチャカAPIワークショップの講義資料• 15分あれば、ご自宅のカチャカでAPIワークショップの個人学習が可能

34

弊社エンジニアによるQiita記事

Tips

https://qiita.com/organizations/pfrobotics

GitHub Discussionsの活用Tips• カチャカAPIはあくまでコミュニティー
サポート• GitHub Discussionsでの討論、GitHubIssuesでの問題提起、GitHub PRによるOSS貢献、お待ちしております

36

https://github.com/pf-robotics/
kachaka-api/discussions

https://x.com/ko1_baseba11/status/
1692509808845549620?s=20 より転載

https://x.com/_ame_a_/status/1703417718018625814?s=20 より転載

https://x.com/_ame_a_/status/
1692888644951163357?s=20 より転載

https://x.com/daijiro/status/
1699307339839582379?s=20 より転載

https://x.com/hakuturu583/status/
1681886045212909568?s=20 より転載
https://x.com/hakuturu583/status/
1702158560803828034?s=20 より転載

37

各種ECサイトで絶賛発売中

https://store.kachaka.life/

https://www.amazon.co.jp/stores/Kachaka/page/
194F8B15-D2F4-46CE-B591-F722A5D0B2F7

公式サイト

翌日配送
https://rt-net.jp/service/kachaka/

Amazonポイント

公費・校費払い
有料サポートhttps://www.rakuten.co.jp/kachaka/

楽天経済圏
楽天ポイント40

法人向け本格導入開始• カチャカが医療・福祉、飲食業界などを中心に、事業の現場においても活用が進んでいることを受け、法人向けサイトをオープン• https://kachaka.life/business/

カチャカラウンジ• 丸の内テラス内にある会員制シェアスペースOCA TOKYOにカチャカのショールームがオープン• https://prtimes.jp/main/html/rd/p/000000012.000115855.html• https://note.kachaka.life/n/
nde611aa906fa

HAPiiBOT• アマノ様と共同開発した小型床洗浄ロボット• Preferred Roboticsがナビゲーションシステム、AIビジョン、エッジCPUボードなどを開発

43

https://www.amano.co.jp/Clean/hapiibot.html より転載

https://youtu.be/-dkSf5Wor64 より転載

Cursormessage Metadata {sfixed64 cursor = 1;}• gRPCにはない独自の仕組み

message GetRequest {Metadata metadata = 1;}• cursor比較によるデータ取得の既読管理とロングポーリングを導入

message GetRobotSerialNumberResponse {Metadata metadata = 1;
string serial_number = 2;}

• cursor = 0のとき、その時点の最新値を受信• cursor = Xのとき、サーバ側がcursor != Xになるまで待機し、データを受信

service KachakaApi {rpc GetRobotSerialNumber (GetRequest)
returns (GetRobotSerialNumberResponse);}• 重複受信、再送、最新データのみ受信などの課題に対応

45

https://github.com/pf-robotics/kachaka-api/
blob/main/protos/kachaka-api.proto 抜粋

cursor = 0のケース

46

cursor != 0のケース