Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2024年度ゼミ #1402

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

2024年度ゼミ #1402

wants to merge 1 commit into from

Conversation

k-okada
Copy link
Member

@k-okada k-okada commented Oct 16, 2024

@k-okada
Copy link
Member Author

k-okada commented Oct 16, 2024

宿題

PR2ロボットの関節の参考 #1272 (comment)

@k-okada
Copy link
Member Author

k-okada commented Oct 16, 2024

>> roseus
$ (load "package://pr2eus/pr2.l")
$ (objects (list (pr2)))
$ (send *pr2* :larm :shoulder-p :joint-angle 10)

またはファイルに

(require "package://pr2eus/pr2.l")  ;; 一回ロードしてあれば次はロードしない
(if (not (boundp '*pr2*)) (setq *pr2* (pr2))) ;; *pr2* という変数を作ってあれば、次は(pr2)を呼ばない
(objects (list *pr2*))
(send *pr2* :larm :shoulder-p :joint-angle 10)
(send *irtviewer* :draw-objects)

として

>> roseus
$ (load "demo.l")

@Michi-Tsubaki
Copy link

Michi-Tsubaki commented Oct 22, 2024

[メモ]
UML このViewer↓だと,日本語表示できます.
https://www.plantuml.com/plantuml/uml

@@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 2.8.3)
project(jsk_2019_10_semi)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

jsk_2024_10_semi

@k-okada
Copy link
Member Author

k-okada commented Oct 23, 2024

10/23

@Michi-Tsubaki 椿 はんぺんを縫ってみた。お医者さんが手術を始めるPR2ポーズ、針を縫うUML。
@ishry 石川 くつしたまいれ
@ushidakyotaro 牛田 ハンガーにかかっている服をとってきてくれる。会うものを選んでくれる絵コンテ
@Rinno1478 末次 五目並べをして、悪態をついて、最後は喧嘩するロボットの絵コンテ

@ushidakyotaro
Copy link

ushidakyotaro commented Oct 23, 2024

source /opt/ros/noetic/setup.bash 
 rossetmaster pr1040
 rossetip
 rlwrap roseus

PR2のコード
https://github.com/ushidakyotaro/jsk_demos/tree/jsk_2024_10_semi/jsk_2024_10_semi

gitに追加する手順例)

git add demo.l demo1023.l 
git commit -m "add demo 1023"
git push ushidakyotaro jsk_2024_10_semi 

@mqcmd196
Copy link
Member

mermaidをREADME.mdに張り付けてみる

https://gist.github.com/mqcmd196/712ca3569c2ea46ae4ee3a206ab92fd7

@mqcmd196
Copy link
Member

sequenceDiagram
Alice->>John: Hello John, how are you?
loop HealthCheck
    John->>John: Fight against hypochondria
end
Note right of John: Rational thoughts!
John-->>Alice: Great!
John->>Bob: How about you?
Bob-->>John: Jolly good!
Loading

@Rinno1478
Copy link

@mqcmd196
Copy link
Member

mqcmd196 commented Oct 23, 2024

rostopic echo で表示される文字が,生のunicodeの場合に変換する方法

rostopic echo /speech_to_text | ascii2uni -a U -q

@mqcmd196
Copy link
Member

mqcmd196 commented Oct 28, 2024

水曜日のゼミの予習項目(家で事前にやりたい人向け.もちろん必須ではないです)になりますが,roseus (irteusgl)で逆運動学を解いてみる例です.

以下のコードを solve-ik.l などで保存して,roseus solve-ik.l とすると,対象物体の位置に対して,逆運動学を解いている様子がわかると思います.

#!/usr/bin/env roseus

;; PR2のモデルを読み込む
(require "package://pr2eus/pr2.l")
;; PR2のインスタンスを作成
(if (not (boundp '*pr2*)) (setq *pr2* (pr2)))

;; 1辺200mmの立方体を出現させる
(setq *cube* (make-cube 200 200 200)) ;; NOTE 実際はハンガーなど,デモに使用するモデルを作って出現させるとよいかもしれない
;; 立方体を(400, 0, 800)移動
(send *cube* :translate (float-vector 400 0 800)) ;; NOTE 画像認識結果から,ハンガーの位置を取得して移動するとよいかもしれない

;; 立方体の左側面に座標系を設定
(send *cube* :put :left-coords
      (make-cascoords
       :coords (send (send *cube* :copy-worldcoords) :translate (float-vector 0 100 0))
       :parent *cube*))

;; ビューワを表示
(objects (list *pr2* *cube*))

;; 左腕について,立方体の両側面に向かって逆運動学を解く
(send *pr2* :larm :inverse-kinematics
      (send (send *cube* :get :left-coords) :copy-worldcoords)
      :rotation-axis :z)

;; PR2の左腕で立方体を持ち上げて前に突き出す
;; PR2の左腕と立方体の左側を連結する.
(send *pr2* :larm :end-coords :assoc *cube*)
;; 立方体が現在の位置から相対で(100, 0, 200)に移動するように逆運動学を解く
(send *pr2*
      :inverse-kinematics (send (send (send *cube* :get :left-coords) :copy-worldcoords)
                                      :translate (float-vector 100.0 0.0 100.0))
      :move-target (send *cube* :get :left-coords)
      :link-list (send *pr2* :link-list (send (send *pr2* :larm :end-coords) :parent))
      :rotation-axis t
      :debug-view t)

;; NOTE ここで (send *ri* :angle-vector (send *pr2* :angle-vector) 2000) などを入れれば,手渡し動作が実行される

;; NOTE 両腕で持って渡すみたいな動作は,結構難しい? ref: https://github.com/euslisp/jskeus/issues/582
;; :assocは閉リンクを形成できないので,1つの箱に両腕を連結することはできない?

何が行われているかを詳しく知りたければ,一行一行インタプリタで実行してみてもいいかもしれません.

ちなみにインタプリタの起動の仕方は

  1. roseus ※履歴やカーソル移動が効かなくてしんどい
  2. emacsのshellを使う.(emacsを起動 -> M(Altキー)-x shell -> source ~/<ワークスペースのパス>/devel/setup.bash -> roseus)
  3. rlwrap roseus (履歴やカーソル移動が使えるようになる.rlwarp がないと言われたら sudo apt install rlwrap)

などがあります

@Michi-Tsubaki
Copy link

Michi-Tsubaki commented Oct 30, 2024

20241030

コード

動画

できたこと・やること

  • 針の受け渡しまで,2針目を今週中に書く
  • スポンジ・ラバー・こんにゃく(食べれない)

@mqcmd196
Copy link
Member

mqcmd196 commented Oct 30, 2024

@Michi-Tsubaki
素晴らしいので,PR作りました.See #1403 .今のブランチでそのままpushしてもらって大丈夫です

何個か質問入れてくれいてる?みたいなので,Code Reviewという形で答えていきたいと思います.

@mqcmd196
Copy link
Member

@Kanazawanaoaki ? @k-okada

別件でそろそろ行かないといけないので,@Michi-Tsubaki の質問(https://github.com/jsk-ros-pkg/jsk_demos/pull/1403/files#diff-c1567d64decb032da52de496256f4d60fad7960511b45804bd82f0d7de63a8b0) に答えていただけると助かります (今手元に環境がないので,自分のコメントが正しいか怪しいです...)

@mqcmd196
Copy link
Member

mqcmd196 commented Oct 30, 2024

あとFetch1075を使いたいときは

repositories:
  jsk-ros-pkg/jsk_robot:
    type: git
    url: [email protected]:jsk-ros-pkg/jsk_robot.git
    version: master
  moveit/moveit_msgs:
    type: git
    url: [email protected]:moveit/moveit_msgs.git
    version: f3e95603874670094fb8ca4225a6f4a0d56572c8
  ros/collada_urdf:
    type: git
    url: [email protected]:werner291/collada_urdf.git
    version: patch-1

<ワークスペース>/src/repos.yaml に置いて,

cd src
source ../devel/setup.bash
vcs import < repos.yaml
rosdep install -iry --from-paths .
cd ..
catkin build

してもらえれば,fetcheusで動きます

@sawada10
Copy link

sawada10 commented Oct 30, 2024

https://github.com/jsk-ros-pkg/jsk_robot/tree/master/jsk_fetch_robot#common

ここにeusで実機を動かすための基本的なコードが載っています

@k-okada
Copy link
Member Author

k-okada commented Oct 30, 2024

音声認識が動かないときの確認 rosnode info respeaker_node , rosnode info speech_to_text  を確認。
respeaker_node はrespawn が掛かっているので、デバイスのUSBケーブルの抜き差しもしてみる。speech_to_textが動かないときは、pr1040sで

 /home/applications/ros/noetic/devel/.private/respeaker_ros/share/respeaker_ros/venv/bin/python /home/applications/ros/noetic/src/jsk-ros-pkg/jsk_3rdparty/respeaker_ros/scripts/speech_to_text.py speech_to_text:=speech_to_text_google audio:=speech_audio sound_play:=robotsound_jp __name:=speech_to_text

を実行。10/30 18:06現在 leo からターミナルを立ち上げて実行中。

@Kanazawanaoaki
Copy link
Contributor

Kanazawanaoaki commented Nov 6, 2024

PR2の音量の変更方法 (pulseaudio)
PR2の体内にsshして

pactl set-sink-volume @DEFAULT_SINK@ 50%

で変更,

pactl list sinks | grep Volume

で確認できます.ゼミのときは80%くらいが良さそうです.
出力例

	Volume: front-left: 32768 /  50% / -18.06 dB,   front-right: 32768 /  50% / -18.06 dB
	Base Volume: 58409 /  89% / -3.00 dB

@Kanazawanaoaki
Copy link
Contributor

Kanazawanaoaki commented Nov 6, 2024

今leo-pr1040のtmux a -t 0で接続できるターミナルで走らせている物体検出モデルのDetic_rosのboxの出力結果のラベルを対応させるサンプルプログラムです.
https://gist.github.com/Kanazawanaoaki/b75892fc4167dc97ba290bfdc966fe3a#file-detic_box_and_label_sync_sample-py

(EuclideanClusteringのcluster_filterのrosparamを1にする必要あり c.f. https://github.com/HiroIshida/detic_ros/blob/4afc32aa2fab3ed19ec05c56ab778e07d591ac4e/launch/sample_detection.launch#L66

@Rinno1478
Copy link

@Michi-Tsubaki
Copy link

@mqcmd196
Copy link
Member

mqcmd196 commented Nov 6, 2024

ゼミ遅くまでお疲れさまでした.

今日皆さんに使ってもらった認識器のモデルはDeticです (https://github.com/facebookresearch/Detic )

ROSのtopicとして出しているコード https://github.com/HiroIshida/detic_ros です.処理が重いので,研究室のGPUマシンで動かしています.

@mqcmd196
Copy link
Member

mqcmd196 commented Nov 6, 2024

(自分用メモ https://github.com/HiroIshida/detic_ros/blob/master/node_script/wrapper.py#L139-L143 を直せばよさそう?)

@ishry
Copy link

ishry commented Nov 13, 2024

detecの認識結果を取得するコードです

;; (setq *tfl* (instance ros::transform-listener :init)))))                                                                                                                     
;;検知したboxとラベルを対応させるクラス                                                                                                                                         
(defclass box-label-synchronizer
  :super exact-time-message-filter)

(defmethod box-label-synchronizer
  (:callback (box-msg label-msg)
    (print (list box-msg label-msg))
    (print (send-all (list box-msg label-msg) :header :stamp))
    (box-cb box-msg label-msg)
    ))

  ;;サブスクライブ                                                                                                                                                              
  (setq box-sync (instance box-label-synchronizer :init
                           (list (list "/docker/detic_segmentor/output/boxes" jsk_recognition_msgs::BoundingBoxArray)
                                 (list "/docker/detic_segmentor/detected_classes" jsk_recognition_msgs::LabelArray))))


;;コールバック関数                                                                                                                                                              
;;/docker/detic_segmentor/detected_classesというトピックにidの対応あり                                                                                                          
(defun box-cb (box-msg label-msg)
  (ros::ros-info "received ~A boxes, ~A labels" (length (send box-msg :boxes)) (length (send label-msg :labels)))
  (dolist (msg-conbined (map cons #'(lambda (x y) (list  x y)) (send box-msg :boxes) (send label-msg :labels)))
    (let (box label)
      ;;(print (list msg-conbined))                                                                                                                                             
      (setq box (car msg-conbined) label (cadr msg-conbined))
      ;;(print (list box label))                                                                                                                                                
      (print (send label :name))
      (when (or (string= (send label :name) "ball") (string= (send label :name) "toy"));; 41 -> ball, 1110 ->toy                                                                
        (setq *target-coords* (send (ros::tf-pose->coords (send box :pose)) :copy-worldcoords))
        ;; (setq tfc (send *tfl* :lookup-transform "base_link" "head_mount_kinect_rgb_optical_frame" (ros::time 0)))                                                            
        ;; (print *target-coords*)                                                                                                                                              
        ;; (when *tfl*                                                                                                                                                          
        ;;  (setq *target-coords* (send tfc :transform  *target-coords*))                                                                                                       
        ;; )                                                                                                                                                                    
        ;; (print *target-coords*)                                                                                                                                              
        (setq *target-dimensions* (send box :dimensions))
        (format t "coords ~A, dimension ~A~%" (send *target-coords* :worldcoords) (* (send *target-dimensions* :x) (send *target-dimensions* :y) (send *target-dimensions* :z))\
)
        (when (and (< (elt (send *target-coords* :worldpos) 2) 400)
                   (> (elt (send *target-coords* :worldpos) 2) -400))
          (send *target-box* :move-to *target-coords* :world)
          (print "update target position")
          )))))


@Michi-Tsubaki
Copy link

@ishry https://item.rakuten.co.jp/high-broad/10000105/?iasid=07rpp_10095___en-m3fmdgnr-4k-71ea414b-a28b-4695-b3f1-f8d858eafb79 くっつくやつ。

@ishry
Copy link

ishry commented Nov 13, 2024

開発ブランチ

@ushidakyotaro
Copy link

11/13
https://github.com/ushidakyotaro/jsk_demos/tree/jsk_2024_10_semi/jsk_2024_10_semi

@mqcmd196
Copy link
Member

@ishry
せっかくなので,

のように Pull Requestを立ててみましょう.https://docs.github.com/ja/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork が参考になると思います.

@Rinno1478
Copy link

@Michi-Tsubaki https://github.com/Rinno1478/jsk_demos/tree/conversation/jsk_2024_10_semi/detect_circle
ここのlaunch/detect.launchでhough変換とかのノードを立ち上げています。

@Michi-Tsubaki
Copy link

Michi-Tsubaki commented Nov 27, 2024

@ishry @ushidakyotaro どっちか 00092の充電器を忘れてると思うので,預かってて,明日渡します.
↑石川に返しました.(Nov 28)

p.s. 今日の成果(code/動画)は引き続き #1403

@mqcmd196
Copy link
Member

mqcmd196 commented Dec 4, 2024

PR2のrespeakerが見えなくなったとき,たまにspeech_to_textまで落ちてしまって,speakerをつなぎなおしても音声認識ができなくなる問題については

で対応しました.

@ishry
Copy link

ishry commented Dec 4, 2024

・成功動画を #1406 にアップしました。
・検出ラベルを追加しやすいようにコールバック関数等を改善したコードをプッシュしました。

@Rinno1478
Copy link

@k-okada すみません、発熱のため本日のゼミを欠席させていただきます。

@k-okada
Copy link
Member Author

k-okada commented Dec 11, 2024

@Rinno1478 はい、無理せずによく休んでください。

@ushidakyotaro
Copy link

服を取ってくるロボット
最新のコード
https://github.com/ushidakyotaro/jsk_demos/blob/jsk_2024_10_semi/jsk_2024_10_semi/clothes-box-ik.l
服の掴む精度や、ヒトに渡す部分を来週実装する予定です。

@mqcmd196
Copy link
Member

服の掴む精度や、ヒトに渡す部分を来週実装する予定です。

いい感じです.個人的には

ヒトに渡す部分

を作ってみるのがいいと思います.精度はやり始めるときりがなくなってしまうし,人に親切な服の渡し方というのは面白いテーマなので

@mqcmd196
Copy link
Member

@Rinno1478 体調は大丈夫そうかな?時間のある時でいいのでこれまでのコードのPRをDraftで投げてみてください!

@Rinno1478
Copy link

@mqcmd196
#1407
PRです。このような感じで大丈夫でしょうか?

@mqcmd196
Copy link
Member

mqcmd196 commented Dec 16, 2024 via email

@Michi-Tsubaki
Copy link

発表スライド:
https://docs.google.com/presentation/d/1k3P7t8WFiFfWd8XWg11Lx1IaNS1ZWhML7oywBxo_yrY/edit#slide=id.g31a215b887e_0_12

システム構成図:
03240281_Michi-Tsubaki_pr2_surgery (1)

まんだらバージョン:
03240281_Michi-Tsubaki_pr2_surgery

@Michi-Tsubaki
Copy link

岡田先生 @k-okada
昨日から風邪を引いていて,咳と39度ほどの熱が治らないので本日のゼミを欠席させていただきます.
椿

P.S.
発表自体は2号館と8号館をzoomかmeetつなぐと思うので,体調が許せば,自宅から発表に参加させていただきたいです.

@k-okada
Copy link
Member Author

k-okada commented Dec 24, 2024

@Michi-Tsubaki はい、無理せずよく休んでください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants