Giter Club home page Giter Club logo

pf-robotics / kachaka-api Goto Github PK

View Code? Open in Web Editor NEW
85.0 10.0 24.0 5.83 MB

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

Home Page: https://kachaka.zendesk.com/hc/ja/articles/7660222791183-%E3%82%AB%E3%83%81%E3%83%A3%E3%82%ABAPI

License: Apache License 2.0

Shell 2.91% Jupyter Notebook 8.93% Python 32.43% CMake 0.93% C++ 13.94% Dockerfile 0.05% JavaScript 0.15% HTML 0.04% TypeScript 40.46% CSS 0.16%
grpc python robot ros2 kachaka

kachaka-api's Introduction

目次

用語

  • Playground
    • カチャカ本体内で動くコンテナ環境。ユーザが自由にログインして自作のソフトウェアを実行できる。
  • ros2_bridge
    • ros2のtopic, service, actionをカチャカとやり取りするサーバー

IPアドレスとポート番号

  • IPアドレス
    • カチャカのIPアドレス
      • スマートフォンアプリの「設定」→「アプリ情報」→「IPアドレス」に表示されます
    • Playground内部からgRPCを利用する場合のIPアドレス
      • 100.94.1.1
  • ポート番号
ポート番号 用途
26400 gRPC
26500 ssh
26501 JupyterLab
26502~26509 割り当てなし(自由利用可能)

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

カチャカAPIとは

  • カチャカはgRPCに準拠したAPIを備えており、ローカルネットワーク内、およびカチャカ本体のPlayground内から利用することが出来ます。
  • サンプルとして提供されるカチャカAPIライブラリを使用する事により、gRPCを意識せずに簡単に使うことも可能です。
  • また、ros2_bridgeを使用することにより、ROS 2からgRPCで提供されるサービスの一部を実行することが出来ます。

kachaka-api

対応環境・言語

  • カチャカ本体内で動作するJupyterLabを利用することで、OSを問わずWebブラウザのみ用意すれば開発を行うことができます。
  • カチャカ外部のPCからAPIを利用することも可能で、本ドキュメントの内容は以下の環境にて確認していますが、多くはmacOSやWindowsなど他の環境でも可能です。
    • 動作確認済みのOS
      • Ubuntu 22.04 LTS
    • 開発言語
      • Python3.10
    • ROS 2(使用する場合)
      • ROS 2 Humble

カチャカAPI仕様

  • APIの詳細
  • エラーコード
  • カチャカを移動させるコマンドは、アプリの安全設定などに従い、障害物を検出して止まる事があります。
  • ソフトウェアアップデート中はAPIを実行しないでください。

利用開始の手順

  • スマートフォンアプリを以下の手順に従って操作し、カチャカAPIを有効にしてください。
    • 設定タブ → ロボットを選択 → 「カチャカAPI 」→ 「カチャカAPIを有効化する」をONにします。

enable-api

  • 以下のダイアログが表示されるので、「利用規約」を確認の上、「カチャカAPI利用規約に同意する」をチェックして「設定する」を押して下さい。

api-enable-dialog

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

  • JupyterLabを使用してサンプルコードを実行する方法を説明します。

準備

  • IPアドレスを確認します。
    • スマートフォンアプリの「設定」→「アプリ情報」→「IPアドレス」にカチャカのIPアドレスが記載されています。
  • PCのブラウザを起動します。
  • ブラウザで以下のURLにアクセスします。
    • http://<カチャカのIPアドレス>:26501/
      • <カチャカのIPアドレス>には、アプリで確認したIPアドレスが入ります。
  • ログイン画面が表示されるので、以下のパスワードを入力してください。
    • パスワード:kachaka

jupyter-login

パスワードの変更方法

  • パスワードを変更する場合は、まずLauncherから「Terminal」を選択します。

jupyter-terminal

  • Terminalで、以下のコマンドを入力します。
jupyter lab password
Enter password: <新しいパスワード>
Verify password: <新しいパスワード>
  • カチャカ本体を再起動すると、新しいパスワードが反映されます。

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

  • 左側のファイル一覧から README.ipynb をダブルクリックしてください。
  • 上部メニューの「▶▶」をクリックしてください。

jupyter-readme

  • 以下のダイアログが表示された場合は「Restart」ボタンを押してください。

jupyter-restart-dialog

  • サンプルコードのダウンロードが完了すると、以下のようなメッセージが表示され、左側のファイル一覧に kachaka-apiフォルダが作成されます。

jupyter-clone-sample

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

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

  • 左側のファイル一覧からkachaka-api → python → demosフォルダを選択します。
  • install_libraries.ipynbをダブルクリックすると、右側にソースコードが表示されます。
  • 上部メニューの「▶▶」ボタンを押して実行します。

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

  • 左側のファイル一覧からkachaka-api → python → demosフォルダを選択します。
  • speak.ipynbをダブルクリックすると、右側にソースコードが表示されます。
  • 上部メニューの「▶▶」ボタンを押して実行します。

jupyter-sample-speal

実行結果

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

カチャカAPIライブラリ

  • カチャカAPIライブラリは、gRPCを意識せずにPythonで開発を行うことができるライブラリです。
  • 同期、非同期それぞれのライブラリがあります。

使用方法

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

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

  • sample_llm_speak.py ... ChatGPT を使って、コマンド終了時にお喋りをするサンプル
  • その他、python/demos/ 以下に、JupyterLab で利用できる Notebook 形式が多数あります

非同期ライブラリ

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

gRPC

  • ライブラリを用いなくても、gRPCのインターフェースで直接カチャカAPIを利用することも可能です。
  • 詳細はgRPCをご参照ください。

ROS 2

ROS 2 Humbleのセットアップ

Dockerのセットアップ

Dockerイメージのビルド

  • 初期設定では配布Dockerイメージを使って起動したDockerコンテナ上でros2_bridgeを動作させます。配布Dockerイメージを使う場合はこの手順はスキップしてください。
  • Dockerイメージをカスタマイズしたい場合、以下の手順でビルドします。
    • 以下の実行例ではBASE_ARCH=x86_64としていますが、ros2_bridgeをx86_64アーキテクチャのCPU上で実行させる場合の例です。
    • ros2_bridgeをarm64アーキテクチャのCPU上で実行させる場合はBASE_ARCH=arm64としてください。
docker buildx build -t kachaka-api --target kachaka-grpc-ros2-bridge -f Dockerfile.ros2 . --build-arg BASE_ARCH=x86_64 --load
  • tools/ros2_bridge/docker-compose.yamlに対して以下の変更を行います。
    • 変更前:image: "asia-northeast1-docker.pkg.dev/kachaka-api/docker/kachaka-grpc-ros2-bridge:${TAG}"
    • 変更後:image: kachaka-api:latest

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

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

動作確認

  • ros2_bridgeの起動
    • 別のターミナルで以下を実行してください。
    • 初回実行時に、Dockerイメージがダウンロードされます。
      • イメージの提供は予告なく停止される場合があります。
cd ~/kachaka-api/tools/ros2_bridge
./start_bridge.sh <カチャカのIPアドレス>
  • ros2コマンドによる動作確認
    • 以下のコマンドを実行すると、topic一覧が表示されます
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
  • rviz2による可視化
cd ~/ros2_ws
source install/setup.bash
cd src/kachaka_description/config
rviz2 -d kachaka.rviz

サンプルコード

  • サンプルコードは以下の場所にあります
  • サンプルコードの実行方法
    • サンプルコードのREADME.mdの手順を実行してください

Playground

  • カチャカ本体の資源の一部(Playground)を開発者が使用する事が出来ます。
  • 以下にログイン方法や、便利な使い方の説明をします。

Playgroundにsshでログインする

  • jupyterlabのterminalもしくは下記のnotebookいずれかを用いて公開鍵の設定を行います
    • utils/set_authorized_keys.ipynb
    • utils/set_authorized_keys_from_github.ipynb
      • githubに登録している鍵をカチャカでも利用したい場合、こちらのスクリプトが便利です
  • utils/set_authorized_keys.ipynbを使用した設定方法
    • 画面左上のFile Browserを選択します。
    • 画面左のファイル一覧からutils → set_authorized_keys.ipynbをダブルクリックします。
    • 画面**のpublic_keysに公開鍵のテキストを貼り付けます。
    • 上部メニューの「▶▶」ボタンを押します。

set-authorized-keys

  • utils/set_authorized_keys_from_github.ipynbを使用した設定方法
    • 画面左上のFile Browserを選択します。
    • 画面左のファイル一覧からutils → set_authorized_keys_from_github.ipynbをダブルクリックします。
    • 画面**のuserにgithubのユーザ名を入力します。
    • 上部メニューの「▶▶」ボタンを押します

set-authorized-keys-from-github

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

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

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

  • カチャカにsshでログインします。
  • 以下のコマンドを実行すると、カチャカが時報を1分間隔で発話します。
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

自作ソフトの自動起動

  • /home/kachaka/kachaka_startup.sh に自動起動したい処理を記述してください。
  • カチャカ起動時に自動的に実行されます
  • ログが /tmp/kachaka_startup.log に記録されます
    • python3 を自動起動する際は -u オプションを付けると良いです。そうでないと標準出力がバッファリングされてしまい、ログが確認できないことがあります。

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

  • /home/kachaka/kachaka_startup.sh を以下のように編集します。
#!/bin/bash

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)

  • 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 の概念で紹介したとおり、カチャカ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.

kachaka-api's People

Contributors

3110 avatar atinfinity avatar dieu-detruit avatar h-wata avatar hidai-pfr avatar kenjisato-qt avatar kimushun1101 avatar kmurase-pfr avatar ksyundo-pfr avatar nakaoka-pfr avatar nozaki-pfr avatar terakoji-pfr avatar watanabe-pfr avatar yamaguchi-am avatar yoshikai-qt avatar youtalk-pfr avatar yukiendo-pfr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kachaka-api's Issues

kachaka_nav2_bringupパッケージのナビゲーション時にエラーが出る

現象

kachaka_nav2_bringupパッケージのnavigation_launch.py実行時に以下のエラーが発生し、走行ががたつくことがあります。map、odom間の変換が正常にできないことがあるようです。

[controller_server-1] [INFO] [1721806791.956888899] [controller_server]: Passing new path to controller.
[controller_server-1] [ERROR] [1721806792.114764736] [tf_help]: Transform data too old when converting from odom to map
[controller_server-1] [ERROR] [1721806792.114836098] [tf_help]: Data time: 1721806792s 88418722ns, Transform time: 1721806791s 859294000ns

前提

調査内容

[controller_server-1] [ERROR] [1721806792.114764736] [tf_help]: Transform data too old when converting from odom to map

map、odom間のtfはkachaka_grpc_ros2_bridgeが出しています。このtfのタイムスタンプ設定処理を読むとgRPCで渡されたタイムスタンプをそのまま付けているように見受けられます。
https://github.com/pf-robotics/kachaka-api/blob/main/ros2/kachaka_grpc_ros2_bridge/src/converter/ros_header.cpp

そのため、カチャカ内部の時刻とROS 2を動かすPCの時刻がずれていることが原因なのではないかと考えていますが、見解を頂きたいです。

image_compressed トピックの発行

現在 ros2 bridgeを立ち上げたところimage_rawトピックのみしか発行されておらず、image_compressedを発行する方法があるという話を伺ったのですが、どの設定ファイルを変更すればimage_compressedトピックをブリッジできるのかわからなくって困っています。
よろしくおねがいします。

開発用Docker Imageを公開するgithub actionsの追加

gRPCはrosdepで依存解決するのが少し難しかったと記憶しており、Dockerで開発ができると非常に嬉しいです。
そこで公開頂いているこちらのDockerfileなのですが、docker pullするだけで使えたら非常に嬉しいと考えています。
Github ActionsでDocker ImageをBuildしてPushするのは簡単なのでそれがいいかなと思っています。
イメージを無料で公開できる先として考えられるものに

あたりが考えられると思います。
このあたりのサービスを使ってDocker Imageを公開できたらなと思っています。

ただ、リポジトリの内部でPFRさんのCI設定らしきものも見つけてるのでどうコミットしたものかなと考えています。

ご検討よろしくお願いいたします。

/clockトピックの発行

ROS 2ではclockトピックを用いて分散計算環境の時刻同期を行うと認識していますが、トピックのリストを確認するとそのトピックが出ていないように見えます。

/clicked_point
/goal_pose
/initialpose
/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/mapping/map_updates
/kachaka/object_detection/result
/kachaka/odometry/odometry
/kachaka/robot_info/version
/kachaka_description/joint_states
/kachaka_description/robot_description
/parameter_events
/rosout
/tf
/tf_static

rvizで可視化を実行すると以下のようなエラーがでており、使用しているPCが大きく時間がずれているわけではないためNPTによる時刻同期かclockトピックによる時刻同期が必要かと思います。

[INFO] [1692065101.170873319] [rviz]: Message Filter dropping message: frame 'odom' at time 1692065097.799 for reason 'discarding message because the queue is full

ROS 2ブリッジから地図、自己位置を配信しない

#101で「mapが空の状態でros2bridgeがエラーにならないようにする」対応がなされる予定となっています。この状態でナビゲーションをしようとすると、自身のmapping、localizationアルゴリズムを動かせるようになりそうです。一方、現状のROS 2ブリッジからはマップデータおよびodom、map間のtfが出ているため、自身のmapping、localizationアルゴリズムを動かせないように思っています。

ROS 2ブリッジから地図、自己位置を配信しないようにすることについて今後対応の予定はありますか?

How to get the data

Hey!! Great work!

I would like to know, how we can get the database for the position that are stored when we mark the position. I want to build a code so that a user can create his ID for a specific location by giving the coordinate (x,y) along with the name.

Can not get image data via rviz

Hi, I am using kachaka in ros2 humble environment, it seems that I can not get image data in rviz even if I subscribe to the /kachaka/front_camera/image_raw. I check the topic list and topic info, the image message was published and subscribed, but I just can not see it in rviz.

`ros2 topic echo /kachaka/layout/locations/list` does not show any message from brdige

Setup Procedure

  1. setup ros:humble workspace with https://docs.ros.org/en/humble/Installation/Alternatives/Ubuntu-Development-Setup.html# (with ros2/ros2@74aa201)
  2. start bridge as described in https://github.com/pf-robotics/kachaka-api#%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D
tomoyafujita@~/DVT/docker_ws/kachaka-api/tools/ros2_bridge >pwd
/home/tomoyafujita/DVT/docker_ws/kachaka-api/tools/ros2_bridge
tomoyafujita@~/DVT/docker_ws/kachaka-api/tools/ros2_bridge >./start_bridge.sh 192.168.1.226
...
  1. Build kachaka required interfaces with colcon workspace.
root@tomoyafujita:~/docker_ws/ros2_humble/src/ros2# ls -lt | grep kachaka
lrwxrwxrwx  1 1000 1000   46 Dec  6 18:26 kachaka_description -> ../../../kachaka-api/ros2/kachaka_description/
lrwxrwxrwx  1 1000 1000   45 Dec  6 18:25 kachaka_interfaces -> ../../../kachaka-api/ros2/kachaka_interfaces/
root@tomoyafujita:~/docker_ws/ros2_humble/src/ros2# cd ../../
root@tomoyafujita:~/docker_ws/ros2_humble# colcon build --symlink-install
  1. check ROS 2 topics from colcon workspace created procedure-1
root@tomoyafujita:~/docker_ws/ros2_humble# source install/local_setup.bash 
root@tomoyafujita:~/docker_ws/ros2_humble# ros2 topic list
/goal_pose
/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
/parameter_events
/rosout
/tf
/tf_static
  1. ros2 topic echo
root@tomoyafujita:~/docker_ws/ros2_humble# ros2 topic echo /kachaka/layout/locations/list
### NO OUTPUT ###

Expected Behavior

root@tomoyafujita:~/docker_ws/ros2_humble# ros2 topic echo /kachaka/layout/locations/list

should print the kachaka_interfaces/msg/LocationList.

ROS2 colcon build error: No SOURCES given to target: kachaka_grpc_ros2_bridge

Hello, I'm having trouble building the kachaka ros2 project on Ubuntu 22.04, ROS2 Humble.
I would really appreciate some help to make it working.

In .bashrc file, I'm sourcing both ros2 and kachaka ros2 libs:

...
# ROS2 Versions
source /opt/ros/humble/setup.bash
# Kachaka
source /opt/kachaka/setup.bash
...
(base) administrator@B760:~/workspaces/ros2_kachaka$ ls
src
(base) administrator@B760:~/workspaces/ros2_kachaka$ colcon build
Starting >>> kachaka_interfaces
Starting >>> kachaka_description
Starting >>> kachaka_bringup
Starting >>> kachaka_speak
Starting >>> kachaka_vision                                      
--- stderr: kachaka_speak            
/usr/lib/python3/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
  warnings.warn(
---
Finished <<< kachaka_speak [0.75s]
Finished <<< kachaka_bringup [0.81s]
Finished <<< kachaka_description [1.51s]
--- stderr: kachaka_interfaces       
CMake Warning (dev) at /opt/ros/humble/share/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake:20 (find_package):
  Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules
  are removed.  Run "cmake --help-policy CMP0148" for policy details.  Use
  the cmake_policy command to set the policy and suppress this warning.

Call Stack (most recent call first):
  /opt/ros/humble/share/ament_cmake_core/cmake/core/ament_execute_extensions.cmake:48 (include)
  /opt/ros/humble/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:286 (ament_execute_extensions)
  CMakeLists.txt:18 (rosidl_generate_interfaces)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /opt/ros/humble/share/python_cmake_module/cmake/Modules/FindPythonExtra.cmake:52 (find_package):
  Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules
  are removed.  Run "cmake --help-policy CMP0148" for policy details.  Use
  the cmake_policy command to set the policy and suppress this warning.

Call Stack (most recent call first):
  /opt/ros/humble/share/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake:23 (find_package)
  /opt/ros/humble/share/ament_cmake_core/cmake/core/ament_execute_extensions.cmake:48 (include)
  /opt/ros/humble/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:286 (ament_execute_extensions)
  CMakeLists.txt:18 (rosidl_generate_interfaces)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /opt/ros/humble/share/python_cmake_module/cmake/Modules/FindPythonExtra.cmake:140 (find_package):
  Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules
  are removed.  Run "cmake --help-policy CMP0148" for policy details.  Use
  the cmake_policy command to set the policy and suppress this warning.

Call Stack (most recent call first):
  /opt/ros/humble/share/rosidl_generator_py/cmake/rosidl_generator_py_generate_interfaces.cmake:23 (find_package)
  /opt/ros/humble/share/ament_cmake_core/cmake/core/ament_execute_extensions.cmake:48 (include)
  /opt/ros/humble/share/rosidl_cmake/cmake/rosidl_generate_interfaces.cmake:286 (ament_execute_extensions)
  CMakeLists.txt:18 (rosidl_generate_interfaces)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /opt/ros/humble/share/python_cmake_module/cmake/Modules/FindPythonExtra.cmake:52 (find_package):
  Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules
  are removed.  Run "cmake --help-policy CMP0148" for policy details.  Use
  the cmake_policy command to set the policy and suppress this warning.

Call Stack (most recent call first):
  /opt/ros/humble/share/launch_testing_ament_cmake/cmake/launch_testing_ament_cmake-extras.cmake:18 (find_package)
  /opt/ros/humble/share/launch_testing_ament_cmake/cmake/launch_testing_ament_cmakeConfig.cmake:41 (include)
  /opt/ros/humble/share/ament_lint_auto/cmake/ament_lint_auto_find_test_dependencies.cmake:36 (find_package)
  CMakeLists.txt:38 (ament_lint_auto_find_test_dependencies)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /opt/ros/humble/share/python_cmake_module/cmake/Modules/FindPythonExtra.cmake:140 (find_package):
  Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules
  are removed.  Run "cmake --help-policy CMP0148" for policy details.  Use
  the cmake_policy command to set the policy and suppress this warning.

Call Stack (most recent call first):
  /opt/ros/humble/share/launch_testing_ament_cmake/cmake/launch_testing_ament_cmake-extras.cmake:18 (find_package)
  /opt/ros/humble/share/launch_testing_ament_cmake/cmake/launch_testing_ament_cmakeConfig.cmake:41 (include)
  /opt/ros/humble/share/ament_lint_auto/cmake/ament_lint_auto_find_test_dependencies.cmake:36 (find_package)
  CMakeLists.txt:38 (ament_lint_auto_find_test_dependencies)
This warning is for project developers.  Use -Wno-dev to suppress it.

---
Finished <<< kachaka_interfaces [4.90s]
Starting >>> kachaka_follow
Starting >>> kachaka_grpc_ros2_bridge
Starting >>> kachaka_smart_speaker
--- stderr: kachaka_smart_speaker    
/usr/lib/python3/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
  warnings.warn(
---
Finished <<< kachaka_smart_speaker [0.85s]
--- stderr: kachaka_follow
/usr/lib/python3/dist-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools.
  warnings.warn(
---
Finished <<< kachaka_follow [0.95s]
--- stderr: kachaka_grpc_ros2_bridge 
CMake Warning (dev) at /opt/ros/humble/share/python_cmake_module/cmake/Modules/FindPythonExtra.cmake:52 (find_package):
  Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules
  are removed.  Run "cmake --help-policy CMP0148" for policy details.  Use
  the cmake_policy command to set the policy and suppress this warning.

Call Stack (most recent call first):
  /opt/ros/humble/share/launch_testing_ament_cmake/cmake/launch_testing_ament_cmake-extras.cmake:18 (find_package)
  /opt/ros/humble/share/launch_testing_ament_cmake/cmake/launch_testing_ament_cmakeConfig.cmake:41 (include)
  /opt/ros/humble/share/ament_lint_auto/cmake/ament_lint_auto_find_test_dependencies.cmake:36 (find_package)
  CMakeLists.txt:164 (ament_lint_auto_find_test_dependencies)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Warning (dev) at /opt/ros/humble/share/python_cmake_module/cmake/Modules/FindPythonExtra.cmake:140 (find_package):
  Policy CMP0148 is not set: The FindPythonInterp and FindPythonLibs modules
  are removed.  Run "cmake --help-policy CMP0148" for policy details.  Use
  the cmake_policy command to set the policy and suppress this warning.

Call Stack (most recent call first):
  /opt/ros/humble/share/launch_testing_ament_cmake/cmake/launch_testing_ament_cmake-extras.cmake:18 (find_package)
  /opt/ros/humble/share/launch_testing_ament_cmake/cmake/launch_testing_ament_cmakeConfig.cmake:41 (include)
  /opt/ros/humble/share/ament_lint_auto/cmake/ament_lint_auto_find_test_dependencies.cmake:36 (find_package)
  CMakeLists.txt:164 (ament_lint_auto_find_test_dependencies)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Error at /opt/ros/humble/share/ament_cmake_auto/cmake/ament_auto_add_library.cmake:66 (add_library):
  Cannot find source file:

    gen-src/kachaka-api.grpc.pb.cc

  Tried extensions .c .C .c++ .cc .cpp .cxx .cu .mpp .m .M .mm .ixx .cppm
  .ccm .cxxm .c++m .h .hh .h++ .hm .hpp .hxx .in .txx .f .F .for .f77 .f90
  .f95 .f03 .hip .ispc
Call Stack (most recent call first):
  CMakeLists.txt:28 (ament_auto_add_library)


CMake Error at /opt/ros/humble/share/ament_cmake_auto/cmake/ament_auto_add_library.cmake:66 (add_library):
  No SOURCES given to target: kachaka_grpc_ros2_bridge
Call Stack (most recent call first):
  CMakeLists.txt:28 (ament_auto_add_library)


CMake Generate step failed.  Build files cannot be regenerated correctly.
---
Failed   <<< kachaka_grpc_ros2_bridge [1.78s, exited with code 1]
Aborted  <<< kachaka_vision [6.74s] 

Summary: 6 packages finished [7.36s]
  1 package failed: kachaka_grpc_ros2_bridge
  1 package aborted: kachaka_vision
  6 packages had stderr output: kachaka_follow kachaka_grpc_ros2_bridge kachaka_interfaces kachaka_smart_speaker kachaka_speak kachaka_vision

ros2_bridgeについて

ros2_bridgeを使うためにhttps://github.com/pf-robotics/kachaka-api?tab=readme-ov-file#動作確認を読んでいます。READMEにある

cd ~/kachaka-api/tools/ros2_bridge
./start_bridge.sh <カチャカのIPアドレス>

では、Dockerイメージをpullし、Dockerコンテナを起動して、ros2_bridgeを実行しているという理解です。ここでpullされるDockerイメージはx86_64、arm64どちらのアーキテクチャ向けも提供していますか?arm64のホスト環境で実行しようと思っています。

[LiDAR] Scan data publishing is stopped when robot not moving

[ENG]
The LiDAR sensor is exhibiting inconsistent behavior regarding data publication. Specifically:

  • Data publication starts: Only when the robot begins to move.
  • Data publication stops: Approximately 5 seconds after the robot comes to a complete stop.

This behavior is undesirable as it limits the ability to utilize LiDAR data for static environment mapping and obstacle detection during stationary periods.

To address this issue, it would be desirable to introduce a ROS service that can toggle the LiDAR scan data publication on and off independently of the robot's movement state.


[日本語]
LiDARセンサーからのデータはパブリッシュされないときがあります。具体的には以下の通りです。

  • データパブリッシュ開始: ロボットが動き始めた時。
  • データパブリッシュ停止: ロボットが完全に停止してから約5秒後。

静止状態での環境マッピングや障害物検知にLiDARデータを利用することを制限されます。

この問題に対処するために、ロボットの移動状態に関係なくLiDARスキャンデータのパブリッシュをオン/オフできるようにROSサービスを導入することのよって解決できるかと考えられます。

Additional Information:
lidar_rviz

[LiDAR] Scan Data lenght is not constant and header might be incorrect

[ENG]
We are experiencing issues with obtaining a correct scan data from the LiDAR which is being published on the /kachaka/lidar/scan topic.

Scan Data Header content:

  • The published scan data indicates a full 360-degree coverage (angle_min: -3.1415927410125732, angle_max: 3.1415927410125732).
  • However, physical observations of the robot suggest an occlusion in the rear field of view.
  • This discrepancy implies that the published header information (e.g., angle_min, angle_max) might be incorrect.

Scan Data Length Variation:

  • The length of the ranges array in the scan data is not constant across scans.
  • This inconsistency suggests potential data merging, possibly with data from another sensor like a TOF sensor.

It would be beneficial to access the raw LiDAR data and any additional sensor data (e.g., TOF) independently.


[日本語]
/kachaka/lidar/scan トピックでパブリッシュされているLiDARのスキャンデータに不整合が見られます。

スキャンデータヘッダの内容:

  • 公開されているスキャンデータは360度の全方位をカバーしていることを示しています (angle_min: -3.1415927410125732, angle_max: 3.1415927410125732)。
  • しかし、実機を確認したところ、後方の視野が遮られていることがわかりました。
  • この不一致から、パブリッシュされているヘッダ情報 (angle_min, angle_max など) が正しくない可能性があります。

スキャンデータの変動:

  • スキャンデータの ranges 配列の長さがスキャンごとに変わっています。
  • 他のセンサー (TOFセンサーなど) のデータとマージされているからだと考えられます。

生のLiDARデータと他のセンサーデータ (TOFなど) に個別にアクセスできる方法があれば、ご教示ください。

Additional Information:

Here we share the information got with ros2 topic echo /kachaka/lidar/scan:

header:
  stamp:
    sec: 1723212284
    nanosec: 860031000
  frame_id: laser_frame
angle_min: -3.1415927410125732
angle_max: 3.1415927410125732
angle_increment: 0.00998916570097208
time_increment: 0.00019924482330679893
scan_time: 0.12532499432563782
range_min: 0.10000000149011612
range_max: 10.0
ranges:
- 0.0
- 5.0329999923706055
- 5.044000148773193
- 0.0
- 5.057000160217285
- 5.071000099182129
- ...

Where ranges length over the scans seems to be similar to this:

[INFO] [1723212225.861439148] [lidar_length_node]: Length of LiDAR ranges: 646
[INFO] [1723212225.959220199] [lidar_length_node]: Length of LiDAR ranges: 661
[INFO] [1723212226.079582270] [lidar_length_node]: Length of LiDAR ranges: 669
[INFO] [1723212226.188875728] [lidar_length_node]: Length of LiDAR ranges: 672
[INFO] [1723212226.406561765] [lidar_length_node]: Length of LiDAR ranges: 665
[INFO] [1723212226.527574158] [lidar_length_node]: Length of LiDAR ranges: 659
[INFO] [1723212226.631671547] [lidar_length_node]: Length of LiDAR ranges: 652
[INFO] [1723212226.741832658] [lidar_length_node]: Length of LiDAR ranges: 645
[INFO] [1723212226.862682051] [lidar_length_node]: Length of LiDAR ranges: 636
[INFO] [1723212226.982428452] [lidar_length_node]: Length of LiDAR ranges: 634
...

rqt_robot_steeringでマニュアル走行を試みたところエラーが出る

/kachaka/manual_control/cmd_vel

Topicに対してrqt_robot_steeringを介して geometry_msgs/msg/Twist型のデータを投げたところカチャカが動き出さずブリッジが以下のエラーを吐き出していることを確認しました。

ros2_bridge_1            | [component_container_mt-1] [ERROR] [1692035822.885589870] [kachaka.manual_control]: 'manual_control' error #14: failed to connect to all addresses

別ターミナルを立ち上げて

ros2 topic echo /kachaka/manual_control/cmd_vel

を実行してみてtopicに正しい非ゼロな速度司令が入力されていることは確認しています。

カチャカが静止していてもscan配信を継続したい

#100 (comment)で質問した件です。#100 (comment)

scanトピックを抑制しない方法ですが、
https://github.com/pf-robotics/kachaka-api/blob/main/python/demos/get_laser_scan.ipynb
に記載されているactivatorを使うとトピックが止まらないようになります。

ros2側にinterfaceを現状では出していないので、kachaka-apiと併用してお使いください。

というご回答を受けたので、python/demos/get_laser_scan.ipynbを参考にして、以下のコードをNotebook上で実行していますが、カチャカが10秒静止しているとscanの配信が止まってしまいました。

import kachaka_api
from kachaka_api.util.vision import LaserScanActivator

client = kachaka_api.aio.KachakaApiClient()

async def get_and_show_laser_scan_loop():
    client.ros_laser_scan.stream()

activator = LaserScanActivator()
with activator.activate():
    await get_and_show_laser_scan_loop()

Notebookのコメントに

上記の方法は、手動操縦モードをONにすることでLiDARを動かしており、カチャカが動かずしばらく経つとスキャンが止まります。

とあるので、client.set_manual_control_enabled(True)は呼び出していません。Python APIの呼び出し方が意図通りになっていませんか?

Cyclone DDS対応

https://github.com/pf-robotics/kachaka-api/tree/main/tools/ros2_bridge以下のファイルを読むと、ROS 2ブリッジ(ROS 2 Humble)でFast DDSを使う前提になっていそうですが、Cyclone DDSにも対応できるとなおよさそうです。おそらく、以下の対応で実現できると考えています。

Dockerイメージ

Dockerイメージにros-humble-rmw-cyclonedds-cppも含める。

docker-compose.yaml

https://github.com/pf-robotics/kachaka-api/blob/main/tools/ros2_bridge/docker-compose.yamlで環境変数RMW_IMPLEMENTATIONを渡せるようにする

依存関係解決に関する相談

この手順に従ってROS2 bridgeの起動を試みたところ、自分の環境にdocker-composeが入っておらず失敗しました。
docker-composeの依存がある旨を記載するPRは出しておきますが、それとは別にpoetryやryeなどによるパッケージ管理を導入してもよいのではないかと感じました。

docker-coposeはPyPIで公開されているようですので、モダンなパッケージ管理ツールを用いれば依存関係の解決はより簡単になると思います。

とはいえ自分が勝手にすすめていいことにも思えないので現在requirements.txtで依存解決をされている理由などがありましたら情報いただけると幸いです。

Docker Imageのビルドコマンドについて

こちらのDockerfileを以下のコマンドでビルドしようとしたところエラーになりました。
なにか抜けている手順があるのでしょうか?

docker build -t kachaka-api -f Dockerfile.ros2 . --build-arg BASE_ARCH=x86_64
Step 34/87 : RUN mv /host/mimic-cross-target /mimic-cross
 ---> Running in b69b2342aca2
Removing intermediate container b69b2342aca2
 ---> c9107739ee0e
Step 35/87 : RUN /mimic-cross/setup.sh
 ---> Running in f9309177ad93
ln: failed to create symbolic link '/usr/lib/x86_64-linux-gnu': File exists

通知用テスト

通知bot動作確認用にissueを作ります。無視してください。

ROS 2ブリッジ使用時の車速仕様

https://kachaka.zendesk.com/hc/ja/articles/8764251540367-カチャカの最高速度が知りたい

「動く速さ」の設定値に従って移動速度は変化します。

とあります。ROS 2ブリッジ使用時にcmd_velで走行させる場合、アプリ側の「動く速さ」の設定値は作用するのでしょうか?また、cmd_velでこの設定値を超えた速度指示を出してしまった場合の振る舞いについて教えて頂きたいです(上限値でクリップされる?無効な速度指示として無視される?)

カチャカ内蔵の自己位置推定機能の位置ズレ修正

現在、カチャカ内蔵の自己位置推定機能を使っていますが、カチャカの2D LiDARが前方しか見ていないためか、RViz2で見ていると自己位置推定結果がズレていることがよく見受けられます。以下の点について教えてください。

/map -> /odomのTFフレームがない

既知のバグです。カチャカソフトウェア自体を修正する必要があり、次回以降のカチャカソフトウェアのアップデートで対応予定です。

充電機付近へMoveToPoseCommandを実行した場合に、RUNNING状態のままとなる

カチャカのgRPC APIを使用し、MoveToPoseCommandで移動先を充電器から近い位置(充電器前方 100mmあたり)を指定して実行すると、GetCommandStateの結果COMMAND_STATE_RUNNINGのままとなります。(カチャカのスマホアプリで見ても実行中のまま)

kachaka-api/python/demos/plot_map_robot_lidar.ipynbのクリックした位置にカチャカを移動させるデモを使用して、充電器付近をクリックしても同様の現象が確認できました。

こちらでの再現性は数回試して、毎回発生しているようでした。

ご確認いただけますと幸いです。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.