jsk-ros-pkg / jsk_demos

JSK demo programs
https://github.com/jsk-ros-pkg/jsk_demos
25 stars 89 forks source link

add jsk_2022_10_semi #1375

Open k-okada opened 2 years ago

k-okada commented 2 years ago

@ayumuiwa @shryt @Kodai-Yamada @20niship

ゴールを考える 必要な機能をリストアップする.

案:

初期化

mkdir -p semi_ws/src
cd semi_ws/src/
git clone https://github.com/jsk-ros-pkg/jsk_demos
git clone https://github.com/jsk-ros-pkg/jsk_robot
cd jsk_demos/
git checkout jsk_2022_10_semi
cd ~/semi_ws/
source /opt/ros/melodic/setup.bash
sudo apt update
rosdep install --from-path src --ignore-src -y -r
catkin b jsk_2022_10_semi

setup.bashをsourceする

source ~/semi_ws/devel/setup.bash

最新のファイルに更新する.

cd ~/semi_ws/src/jsk_demos
git pull origin jsk_2022_10_semi

Emacs でよく使うキーバインド


M-x shell ;; shell を立ち上げる
  M-p ;; ひとつ前のコマンドを表示
  M-n ;; ひとつ後のコマンドを表示
C-x o ;; ウインドウを切り替える
C-x f  ;; ファイルをロードする
C-x s ;; ファイルをセーブする.
k-okada commented 2 years ago

カメラの方のテストなどを色々した後に改めて同じコードを動かしたところ、spotの胴体がアームが動く途中に下がるようになってしまい、アームの先端位置もその分ずれるようになってしまいました。以下が、IKを解いて求めた姿勢をspotに送るときに実行したコードです。

https://github.com/jsk-ros-pkg/jsk_robot/pull/1701/commits/37b49001e12752cdb8384c7dc54d5aebd6857700https://github.com/k-okada/spot_ros-arm/commit/2c6445b9c690a4135986e8057306bc82cb37d8a2 で対応しました.

Kodai-Yamada commented 2 years ago

お借りしたdynamixel、ケーブル、バッテリーとリールの写真になります。 AE2EE1D0-CE81-4772-B5A4-77F893CB6ED9 91BC8DDF-FDFF-4DE1-95A2-474F6EE68812 3964E0D9-EA60-4C7B-B183-1F2AF95C4493 5C6C1041-81B4-4A27-BA2C-47DA815B5C0A CF893FA6-DC76-442E-81C7-B6A32D40AE9F DBEE3BB8-EE51-49C3-A52C-2EFED3B8D435

AyumuIwa commented 2 years ago

@AyumuIwa Panorama画像がcompressed圧縮形式で出ていないという話だったので,圧縮形式で出るようにしました. jsk-ros-pkg/jsk_recognition#2745

@knorth55 先生 ありがとうございます。試してみます。

Spotユーザは次回,外実験をしようと思います. @AyumuIwa @Kodai-Yamada 室内で傘と竿は意外と危ないということがわかったので,認識,リール抜きの動作の確認は次回外でやってみましょう.で,そのときの動画を撮ってこのIssueに貼って先輩たちをオッと言わせてみましょう(?) @AyumuIwa パノラマでCompressedImageを出すPRを@knorth55 先生が作ってくださいました.今日も話したけど今ある人認識は,人全てに対してBoundingBoxを出してしまうので,自分しかいない環境か,自分が最も近くにいて,それ以外の人は十分離れた距離にいる仮定をおいて動作コードを書いていくといいと思います.BoundingBoxをeusの中でsubscribeすることになるんだけど,難しかったら次回か来てくれたときに一緒にやってみましょう

@mqcmd196 ありがとうございます。 自分一人しかいないという仮定で一回取り組んでみます。次回のゼミまでに出来るところまでやって、わからなかった部分を明確にしておきます。

softyanija commented 1 year ago

@shryt https://github.com/softyanija/jsk_demos/blob/third_eye_pc/assemble_table_pr2/script/socket_line.py

http://wiki.ros.org/message_filters#Time_Synchronizer message_filters を使って複数のtopicを同期的にsubscribeしている。 引数は順に同期を取りたいtopic、キューのサイズ、許容する遅延。 publishするために自分でインスタンスを作る時はheaderを忘れないように注意。subscribeするどちらかのtopicから取ってこればいいかな

MiyabiTane commented 1 year ago

@AyumuIwa @Kodai-Yamada @mqcmd196 今日の動画です(誰でも見れる設定にしてしまったのですが、大丈夫でしたか...??メールアドレス教えて頂ければ制限つけます)▽ https://drive.google.com/drive/folders/19REXEtoGi4Es8z1BsIXkNYE24Ov4g1ld?usp=sharing (JSK内部の方はこちらにもアップロードしておきました)

ぷちコメント ・釣竿を振りかぶった後に手を閉じる動きを入れた方が良さそう ・傘が落ちやすいので、余力があれば傘側に取り付けられるような簡単なアタッチメントを作ると良いかも(滑り止めをつけるとかでも良いかもしれません)

実験ご一緒できて楽しかったです、ありがとうございました!

MiyabiTane commented 1 year ago

@shryt

Coral TPU 学習用データの作り方

  1. labelmeで画像をラベル付け▷.jpg, .jsonがセットで生成される
  2. 上記で生成したファイルをdata_annotated_trainフォルダとdata_annotated_testフォルダにわける(jpgとjsonはセットにすること、train6: test4くらいの割合が目安)
  3. labels.txtの1行目、2行目に以下を加える
    __ignore__
    _background_
  4. labelme2voc.pyをダウンロードして以下のようなフォルダ構成にする
    ball_dataset
    |-- labels.txt
    |-- labelme2voc.py
    |-- data_annotated_train
    |   |-- hoge.jpg
    |   |-- hoge.json
    |   |-- hogehoge.jpg
    |   |-- hogehoge.json
    |   `-- ... 
    `--  data_annotated_test
    |   |-- fuga.jpg
    |   |-- fuga.json
    |   |-- fugafuga.jpg
    |   |-- fugafuga.json
    |   `-- ... 
  5. train, testそれぞれに対して以下を実行
    $ python3 ./labelme2voc.py data_annotated_train data_train --labels labels.txt
    $ python3 ./labelme2voc.py data_annotated_test data_test --labels labels.txt
  6. 以下のようなフォルダが生成されればOK
    ball_dataset
    |-- data_train
    |   |-- JPEGImages
    |   |-- SegmentationClass
    |   |-- SegmentationClassPNG
    |   |-- SegmentationClassVisualization
    |   |-- SegmentationObject
    |   |-- SegmentationObjectPNG
    |   |-- SegmentationObjectVisualization
    |   `-- class_names.txt
    `-- data_test
    |-- JPEGImages
    |-- SegmentationClass
    |-- SegmentationClassPNG
    |-- SegmentationClassVisualization
    |-- SegmentationObject
    |-- SegmentationObjectPNG
    |-- SegmentationObjectVisualization
    `-- class_names.txt
shryt commented 1 year ago

@MiyabiTane https://drive.google.com/drive/folders/1JjWq1FIQZz-oZt7ihGctsMYuDa3GCquZ?usp=sharing

ここでお願いします。

MiyabiTane commented 1 year ago

@shryt 学習させてみました。遠くでなければそこそこ識別できてそうですが、white_balllined_ballが似ているので誤認識が多い印象でした Screenshot from 2022-11-30 21-11-32 Screenshot from 2022-11-30 21-11-12

参考までに学習の手順

git clone https://github.com/jsk-ros-pkg/coral_usb_ros.git
cd coral_usb_ros/training/labelme_voc
bash ./run.sh ball_dataset --num_training_steps 800 --checkpoint_num 800
MiyabiTane commented 1 year ago

@shryt ★使い方★ ※ CoralTPUの環境構築が済んでいると聞いているのでその前提で書きます

  1. 学習済みモデル▷semi_2022.tflite launchファイル▷semi_2022.launch ラベルファイル▷semi_labels.txt をダウンロードします

  2. semi_2022.tflite, semi_labels.txtcoral_ws/src/coral_usb_ros/models下に、semi_2022.launchcoral_ws/src/coral_usb_ros/launch下に置きます

  3. 実行 カメラの立ち上げ(以下はPCカメラの場合)

    $ roslaunch roseus_tutorials usb-camera.launch

    coral_usbの立ち上げ

    $ source ~/coral_ws/devel/setup.bash
    $ roslaunch coral_usb semi_2022.launch INPUT_IMAGE:=/image_raw  ## spotのカメラを使う場合は違うトピック名かもしれません
  4. 結果の表示

    $ rosrun image_view image_view image:=/edgetpu_object_detector/output/image
  5. もし認識されなかったら以下のコマンドでGUIを立ち上げてscore_threshをさげてみてください

    $ rosrun rqt_reconfigure rqt_reconfigure

    Screenshot from 2022-11-30 21-48-44

MiyabiTane commented 1 year ago

お借りしたボールは袋にいれて81C1(今日使っていた部屋)の机に置いておきます 申し訳ないのですが、来週以降私は来れないので、わからないことがあれば北川さんや大日方くんに聞いてみて下さい すぐの対応でなくてよければGitでメンションしてもらえれば対応します

pazeshun commented 1 year ago

@Kodai-Yamada 昨日動かなかったモバイルバッテリーを2個充電して、ゼミの机の上に置いておきました。使い方は同梱の説明書を読んでみてください。使ってみて、バッテリーの減りが異常に速いなどの問題があれば教えてください。

shryt commented 1 year ago

@MiyabiTane ありがとうございます。今度行ったときに試してみます。

knorth55 commented 1 year ago

ボール認識のDeepLearning結果のGoogle Driveリンク(全て)

https://drive.google.com/drive/folders/124gJjXWXRjsrkRHEZ1NJOeIK3wD7re6j

Kodai-Yamada commented 1 year ago

@pazeshun 用意していただきありがとうございます。どちらのモバイルバッテリーでも問題なく動きました。

Kanazawanaoaki commented 1 year ago

@shryt @softyanija @tkmtnt7000

カメラの方のテストなどを色々した後に改めて同じコードを動かしたところ、spotの胴体がアームが動く途中に下がるようになってしまい、アームの先端位置もその分ずれるようになってしまいました。以下が、IKを解いて求めた姿勢をspotに送るときに実行したコードです。

jsk-ros-pkg/jsk_robot@37b4900k-okada/spot_ros-arm@2c6445b で対応しました.

spotでものをつかむのに関連する情報

https://github.com/jsk-ros-pkg/jsk_robot/pull/1701/files/43d80b979172e90ba394e69b954973620900342b..d805954cd6bea9e238cc5eabe2c1e12e0799ccd4

tkmtnt7000 commented 1 year ago

動くかどうか全く確認していない&テキトーに書いたコードですが:pick-object-in-imageの使い方はこんな感じになると思います. @shryt

#!/usr/bin/env roseus

(load "package://spoteus/spot-interface.l")
(ros::roseus-add-msgs "jsk_recognition_msgs")

(spot-init nil)
(setq *image-source* "hand_color")

(ros::subscribe "/edgetpu_object_detector/output/rects" jsk_recognition_msgs::RectArray #'cb)

(defun pick-object-in-image (image-source center-x center-y)
  (send *ri* :pick-object-in-image image-source center-x center-y))

(defun cb (msg)
  (let ((x (send (elt (send msg :rects) 0) :x))
        (y (send (elt (send msg :rects) 0) :y))
        (width (send (elt (send msg :rects) 0) :width))
        (height (send (elt (send msg :rects) 0) :height))
        (center-x (+ x (/ width 2)))
        (center-y (+ y (/ height 2))))
    (pick-object-in-image *image-source* center-x center-y)
    (unix::sleep 5)
    (send *ri* :stow-arm)
    ;;(send *ri* :wait-interpolation)                                                                
    ))
shryt commented 1 year ago

12/07の進捗です。 ・学習したボールをモデルするモデルの確認 ・:pick-object-in-imageを使ってボールを拾うモーションの作成 (その動画です。)

knorth55 commented 1 year ago

ゼミの動画用のGoogleDriveです JSKのSharedDrive/Movies/Semi/2022に動画をおいてもらえると,あとで確認もしやすいのでありがたいです. よろしくお願いします.

@mqcmd196 @MiyabiTane @Kanazawanaoaki @k-okada @tkmtnt7000 @softyanija

https://drive.google.com/drive/folders/129ShuBhvtMYB1On9JFPjCcAdLxXTUawb

AyumuIwa commented 1 year ago

12/07の進捗です。 以下のドライブにデモ動画を追加しました。 https://drive.google.com/drive/folders/129ShuBhvtMYB1On9JFPjCcAdLxXTUawb

今回実現した流れは、 1 spotに初期姿勢を取らせる 2 全方位カメラで人を探す 3 spotの近くに人がいたら、傘をセットしやすいようにアームを上げる 4 傘をセットできるようにspotの手を開閉する

shryt commented 1 year ago

12/14の進捗です。

動画ドライブに追加しておきました。

AyumuIwa commented 1 year ago

12/14の進捗です。 以下のドライブにデモ動画を追加しました。 https://drive.google.com/drive/folders/129ShuBhvtMYB1On9JFPjCcAdLxXTUawb

今回実現した流れは、 1 spotに初期姿勢を取らせる 2 全方位カメラで人を探す 3 近くに人が来たら、その位置に合わせてspotが移動する 4 人のいる方向に向けてアームを伸ばす 4 傘をセットできるようにspotの手を開閉する

Kodai-Yamada commented 1 year ago

12/14の進捗

3dプリンターでのサポーターの造形 竿を降る動作の調整 dynamixelの制御プログラムの作成

knorth55 commented 1 year ago

Spot体内で動かしていたlaunchをメモしておきます. obinataユーザで以下を起動していました.

@AyumuIwa のデモのために,https://github.com/jsk-ros-pkg/jsk_recognition/pull/2754 で追加したlaunchを起動してました.

source ~/ros/spot_ws/devel/setup.bash
roslaunch jsk_perception panorama_human_3d_detection.launch gui:=false

@shryt のデモのために,coralの認識launchを起動していました. モデルとラベルは https://github.com/jsk-ros-pkg/jsk_demos/pull/1375#issuecomment-1332100428 で学習したものを, ~/ros/spot_ws/src/coral_usb_ros/modelsにダウンロードしてあります.

source ~/ros/spot_ws/devel/setup.bash
roslaunch coral_usb edgetpu_object_detector.launch label_file:=$(rospack find coral_usb)/models/semi_labels.txt model_file:=$(rospack find coral_usb)/models/semi_2022.tflite device_id:=1 INPUT_IMAGE:=/spot/camera/hand_color/image
AyumuIwa commented 1 year ago

Spot体内で動かしていたlaunchをメモしておきます. obinataユーザで以下を起動していました.

@AyumuIwa のデモのために,jsk-ros-pkg/jsk_recognition#2754 で追加したlaunchを起動してました.

source ~/ros/spot_ws/devel/setup.bash
roslaunch jsk_perception panorama_human_3d_detection.launch gui:=false

@knorth55 ありがとうございます。

knorth55 commented 1 year ago

作業したければいつでも来てください 8階の部屋は開いてない時もありますが言ってくれれば開けます Spotも使えるようになってます

knorth55 commented 1 year ago

Strelka (Spot)ですが,ネットワークは改善してみました. 次回はもう少し早く通信できるはずです. https://github.com/jsk-ros-pkg/jsk_robot/issues/1765#issuecomment-1352627572

https://user-images.githubusercontent.com/9300063/207811145-ef38484c-f000-4ccc-bcb1-29f71f3b810e.mp4

AyumuIwa commented 1 year ago

@knorth55 ありがとうございます。もしかしたら来週の月曜日の午後にspotの利用をお願いするかもしれません。 予定が決まり次第また連絡させていただきます。

knorth55 commented 1 year ago

@AyumuIwa 了解です,また月曜日にでもここで連絡してください.

AyumuIwa commented 1 year ago

@knorth55 体調を崩してしまったので、今日の午後行きたかったのですがやめさせていただきます。 申し訳ございません。

knorth55 commented 1 year ago

@AyumuIwa 了解です、体調気をつけて!ゆっくりやすんでください

AyumuIwa commented 1 year ago

@knorth55 今日この後16時半からspotを利用してもよろしいでしょうか。

pazeshun commented 1 year ago

@AyumuIwa 多分大丈夫だと思います。 16時まで僕が部屋で会議してるので、早めに来るのは難しいかもしれません。

AyumuIwa commented 1 year ago

@AyumuIwa 多分大丈夫だと思います。 16時まで僕が部屋で会議してるので、早めに来るのは難しいかもしれません。

ありがとうございます。

knorth55 commented 1 year ago

@AyumuIwa 大丈夫です!

AyumuIwa commented 1 year ago

@AyumuIwa 大丈夫です!

ありがとうございます。

knorth55 commented 1 year ago

@AyumuIwa 今日の実験の動画です! https://drive.google.com/drive/folders/12KWUk5vaFMPC_XRBswiYbClD8yGwylNX?usp=share_link

tkmtnt7000 commented 1 year ago

@Kodai-Yamada 部屋の中で撮った実験動画を置いておきます https://drive.google.com/drive/folders/1061nl8v_lixIPG0wsqRhpZ-6gdEwhr-K?usp=share_link