pf-robotics / kachaka-api

スマートファニチャープラットフォーム「カチャカ」API
https://kachaka.zendesk.com/hc/ja/articles/7660222791183-%E3%82%AB%E3%83%81%E3%83%A3%E3%82%ABAPI
Apache License 2.0
85 stars 24 forks source link
grpc kachaka python robot ros2

スマートファニチャー・プラットフォーム「カチャカ」 APIマニュアル

目次

用語

IPアドレスとポート番号

ポート番号 用途
26400 gRPC
26500 ssh
26501 JupyterLab
26502~26509 割り当てなし(自由利用可能)

Note IPアドレスが変わってしまい不便な場合は、ルータ等でカチャカのMACアドレスに対して固定IPアドレスを付与すると便利です。

カチャカAPIとは

kachaka-api

対応環境・言語

カチャカAPI仕様

利用開始の手順

enable-api

api-enable-dialog

サンプルコードをJupyterLabで実行する

準備

jupyter-login

パスワードの変更方法

jupyter-terminal

jupyter lab password
Enter password: <新しいパスワード>
Verify password: <新しいパスワード>

サンプルコードのダウンロード

jupyter-readme

jupyter-restart-dialog

jupyter-clone-sample

依存ライブラリのインストール

ダウンロード後初回の一回だけ、下記の手順を実行する必要があります。

サンプルコードの実行方法

jupyter-sample-speal

実行結果

「カチャカです、よろしくね」とカチャカが発話します。

カチャカAPIライブラリ

使用方法

docs/kachaka_api_client.ipynb で各APIを動作させながら試すことができます。

カチャカAPIライブラリのサンプルコード

非同期ライブラリ

gRPCの呼び出しを非同期にしたライブラリも提供しています。必要に応じてご利用ください。
同期ライブラリの機能に加えてcallback登録をサポートしています。
callback機能についてはsample_llm_speak.pyをご参照ください。
使用方法を非同期版に書き換えたものはこちらです。docs/kachaka_api_client_async.ipynb

gRPC

ROS 2

ROS 2 Humbleのセットアップ

Dockerのセットアップ

Dockerイメージのビルド

docker buildx build -t kachaka-api --target kachaka-grpc-ros2-bridge -f Dockerfile.ros2 . --build-arg BASE_ARCH=x86_64 --load

サンプルコードのダウンロード

cd ~
git clone https://github.com/pf-robotics/kachaka-api.git

kachaka_interfaces, kachaka_descriptionのビルド

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
ln -s ~/kachaka-api/ros2/kachaka_interfaces/ kachaka_interfaces
ln -s ~/kachaka-api/ros2/kachaka_description/ kachaka_description

cd ~/ros2_ws
source /opt/ros/humble/setup.bash
colcon build

動作確認

cd ~/kachaka-api/tools/ros2_bridge
./start_bridge.sh <カチャカのIPアドレス>
cd ~/ros2_ws
source install/setup.bash
ros2 topic list
cd ~/ros2_ws
source install/setup.bash
ros2 topic echo /kachaka/layout/locations/list

目的地一覧の例

locations:
- id: L01
  name: ダイニング
  type: 0
  pose:
    x: 1.33572
    y: 2.328592
    theta: 0.0
cd ~/ros2_ws
source install/setup.bash
cd src/kachaka_description/config
rviz2 -d kachaka.rviz

サンプルコード

Playground

Playgroundにsshでログインする

set-authorized-keys

set-authorized-keys-from-github

以下のコマンドを実行してPlaygroundにログインします

ssh -p 26500 -i <登録した公開鍵に対応する秘密鍵> kachaka@<kachakaのIPアドレス>

Playgroundでサンプルプログラムを実行する

cd ~
git clone https://github.com/pf-robotics/kachaka-api.git
pip install -r /home/kachaka/kachaka-api/python/demos/requirements.txt
python3 /home/kachaka/kachaka-api/python/demos/time_signal.py 100.94.1.1:26400

自作ソフトの自動起動

サンプルを自動起動する例

jupyter-lab --port=26501 --ip='0.0.0.0' &

以下の行を追加します

python3 -u /home/kachaka/kachaka-api/python/demos/time_signal.py 100.94.1.1:26400 &


* 保存後、カチャカを再起動します。再起動後、暫くすると、1分間隔で現在時刻を発話します。

### Playgroundのリソース制限

* ストレージ総計(/home, tmp) 3GB
* メモリー 512MB

## Web

* ブラウザで動作するwebアプリからも、カチャカAPIを利用することができます。
* ただし、webアプリからの通信は現状grpc-webのプロトコルに則る必要があり、これを仲介してくれるプロキシサーバーを立てる必要があります。
  * gRPCの通信に必要なHTTP/2の通信をjavascriptから自由に取り扱うことが可能な環境は限られており、HTTP/1.1で表現するgrpc-webプロトコルが必要です。
* ここでは、プロキシをenvoyを使って立てる方法を紹介し、webアプリからカチャカAPIを利用するサンプルをご紹介します。

### プロキシサーバ

* プロキシサーバーの起動

$ ./tools/web_proxy/start_proxy_remote.sh <カチャカのIPアドレス>


* プロキシサーバーは、webアプリからアクセスでき、またカチャカにアクセスできるネットワーク接続を備えた場所であればどこで起動しても構いません。
* このスクリプトでは、`localhost:50000`にプロキシサーバを立てる例を示しています。

### Webサンプル (React + TypeScript)

![](docs/images/web_sample_capture.png)

* Reactを利用して、カチャカAPIと連携するwebアプリのサンプルです。
* プラスボタンを押すとパネルが追加され、パネルの種類を選ぶと対応するAPIを利用した表示がなされるデモです。
* 起動するには、以下のコマンドを実行してください。

$ cd web/demos/kachaka_api_web_sample $ npm install $ npm run dev


* npmの環境がない方は、適宜インストール作業を行って下さい。
* 以下にインストール方法の例を示します。
  * aptでインストールされるnpmは古い可能性があります。nで最新のstableをインストールすることを推奨します。
  * サンプルは nodejs v18.17.1、npm 9.6.7 で動作を確認しています。

$ sudo apt install nodejs npm $ sudo npm install -g n $ sudo n stable



#### カチャカAPIとReact hook
* [Cursor の概念](#cursor-の概念)で紹介したとおり、カチャカAPIではcursorという概念を用いることで、無駄のない値の更新を行っています。
* React hookでは、このカーソルの更新をつかってGet系のAPIを呼び出し、レスポンスが返ってくるたびにstateを更新することで、値が変更されるたびに最低限の計算でレンダリングを行うことができます。
* 具体的な処理については `web/demos/kachaka_api_web_sample/src/kachakaApi.ts` を参照してください。

## License
Copyright 2023 Preferred Robotics, Inc.
Licensed under [the Apache License, Version 2.0](LICENSE).