Open k-okada opened 4 years ago
coralにでていたPRはをマージしました. なのでcoral本家のREADMEの通りにインストールすれば,Melodicなら動くはずです. https://github.com/knorth55/coral_usb_ros
明日こられるかたは73B2という部屋にきたら,リビングのような部屋と大きなテレビがあるので,そこを使って作業してもらって結構です. 部屋には @knorth55 @708yamaguchi @sktometometo (@pazeshun) あたりがいるはずなので,困ったらきいてください. とりあえず realsenseと coralをセットアップして使えればOKという理解であっていますか?
realsenseとcoralのデバイスをいただいていないのが僕なのでその二つをセットアップして使えればOKだと思います
@tkmtnt7000 了解しました。何時頃研究室にこられますか?目安でいいので教えてくれるとありがたいです。
@knorth555 演習終了後なので17時ごろになるかと思われます。
@tkmtnt7000 了解しました.
@k-okada 今日は @tkmtnt7000 くんが研究室にきてくれたので,Coral TPU USBとrealsense D435iを貸し出しました. また水曜日にやっていたゼミのとおりにCoral TPUをRealsenseの画像から動かしてみて,動くことを確認しました. さらに研究室をみてまわったあとにYouBionicのハンドを持って帰って組み上げてもらうようにしました.
YouBionicハンド製作の進捗です。多分第2関節の一部です。 M3x5,M3x10,M3x15,M3x20のネジが必要な部分があり、持って帰ったセットの中にM3のネジがなかったので進められるのはここまででした。
◉ Kei Okada
2020年10月16日(金) 22:17 Naoto Tsukamoto notifications@github.com:
[image: IMG_0416] https://user-images.githubusercontent.com/67531577/96261862-efd73b00-0ffb-11eb-88e0-d77e45a41b0d.JPG
YouBionicハンド製作の進捗です。 M3x5,M3x10,M3x15,M3x20のネジが必要な部分があり、持って帰ったセットの中にM3のネジがなかったので進められるのはここまででした。
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/jsk-ros-pkg/jsk_demos/issues/1309#issuecomment-710039021, or unsubscribe https://github.com/notifications/unsubscribe-auth/AADYNXFIVUF2GUHPBDNBYDDSLBBV5ANCNFSM4SQFLPTA .
@k-okada ありがとうございます。
わすれていました. ネジとレンチを自宅に送りました.月曜日の午前中に届きます.ロボットシステム中かも... -- ◉ Kei Okada 2020年10月16日(金) 22:17 Naoto Tsukamoto notifications@github.com:
@k-okada 午前中にネジとレンチ届きました。少しずつ製作していきます。
10/21
@yuli-disney 入館,警備, エンターティメント,カードを選ぶ,会計でコートをとってくる,ホテル部屋案内 @softyanija 棚の物を探してくれる #1311 @tenrobo18 除菌,机を拭く,ドアを開ける. ロボテック @tkmtnt7000 配達 #1312 @ketaro-m ドアにビニール袋を書ける
音声認識を利用して操縦せよ.音声認識には,ひらがな認識の”julius”を使うと良い(https://github.com/jsk-ros-pkg/jsk 3rdparty/tree/master/julius ros).
$ roslaunch julius_ros julius.launch julius_output:=screen julius_args:="-debug"
(※起動できない場合,sudo apt install ros-melodic-julius-ros)デフォルトでは「かけ」「きつね」「わかめ」「かまたま」の語彙が登録されているが,以下のように任意の語彙を追加できる.
$ rosservice call /speech_recognition "vocabulary: words: [’ みぎ’,’ ひだり’,’ まえ’,’ うしろ’,’ だんす’]"
/speech to text の出力結果はひらがなを utf-8 形式で表示しているので注意すること.
$ rostopic echo /speech_to_text
transcript: [!!python/str "\u3072\u3060\u308A", !!python/str "\u307E\u3048"]
confidence: [1.0, 0.0]
Pythonやroseusでプログラムを書けば正しく表示できる
@708yamaguchi
Fetchで(send *ri* :state :worldcoords)
できないのはこれだとおもいます。
https://github.com/jsk-ros-pkg/jsk_robot/pull/1167
@tkmtnt7000 @k-okada
fetcheus関連ですが,今後のゼミにおいて以下が問題になる可能性があります. マージしていただけると助かります.
:go-pose-unsafe
がおかしい:move-to
が微修正で余計なことをするまたpr2eus
についての最終リリース(0.3.14
)が2019/02/11に行われたあとに,160コミットほどあるので,ソースで入れていないと何かしら問題が起きそうな気がします.
https://github.com/jsk-ros-pkg/jsk_pr2eus/compare/0.3.14...master
皆さん,途中で抜けてすいません&手伝ってくれた人ありがとう. マージしました.次回ロボットを動かすまでに,
$cd semi_ws/src/jsk_robot
$git pull origin master
しておきましょう.
マージありがとうございます.
Fetchのユーザ側PCはjsk_robot
とjsk_pr2eus
をソースで入れれば問題ないと思います.
ロボットハンドの進捗です。あとはarduinoを中に入れて蓋をすれば完成です。 arduino周りがよくわからないので次回持っていきます。
https://github.com/jsk-ros-pkg/jsk_demos/blob/jsk_2020_10_semi/jsk_2020_10_semi/euslisp/sample.l を追加してみました. uml を追加した人は,このサンプルをみて,イメージアニメーションを作る事がd家いるはずです.
アームを動かすのは実機とほぼ同じ動きになります. 移動については,建物をすり抜けたりしますが,実機だとちゃんと障害物を避けてくれます.
*ri*
で使えるメンバ関数は https://euslisp-docs.readthedocs.io/en/latest/pr2eus/robot-interface/ にあります.動いている途中でキャンセルにするには
(send *ri* :go-pos-no-wait ...)
...
(send *ri* :go-stop)
みたいにします.
spotのeusモデルは https://gist.github.com/k-okada/5bcaecf7b41c534048ac4f82afdf7a81 にあります.(c.f. https://github.com/jsk-ros-pkg/jsk_robot/pull/1263 )
皆さんの作っていくれたumlをマージして https://github.com/jsk-ros-pkg/jsk_demos/pull/1311 に入れました.
また,少しだけコメントをしました. https://github.com/jsk-ros-pkg/jsk_demos/pull/1311/files#r514116563 音声認識との連携について https://github.com/jsk-ros-pkg/jsk_demos/pull/1312/files#r514121372 移動コマンドについて https://github.com/jsk-ros-pkg/jsk_demos/pull/1314/files#r514120599 腕の動かし方について https://github.com/jsk-ros-pkg/jsk_demos/pull/1316/files#r514125184 顔認識について
また,座標系を動かしながら確認するプログラムを作ってみました. sample.l をロードした後にこれを実行してみてください. EmacsのM-x shell 上だとjklm で座標が動きます.ただ毎回リターンキーを押す必要があります. 直接ターミナルから動かすとリターン無しで動いてくれるハズです. https://gist.github.com/k-okada/78fec94346db94bc08cbbd185d6c20da
= 以下はなにかおかしくなった人向け
もともと僕が作っていたjsk_2020_10_semi
ブランチがおかしかったのもあって少し強制的に直しました.github上のorign/jsk_2020_10_semi と合わせたかったら以下のようにしてください.特に問題が出ていない人は何もしなくて良いです.
git fetch --all
git checkout jsk_2020_10_semi
git branch # jsk_2020_10_semiにいることを確認
git reset --hard origin/jsk_2020_10_semi
73B2近くの座標と関節名リスト と相対座標での逆運動学 https://gist.github.com/tkmtnt7000/4b816296d9e77e3b2a51730507d76f19
今日学んだことリスト ・git add <追加したいもの> ・git commit -m "コメント" ・git push リモートブランチ名 ブランチ
・rpy(0 0 pi/2)みたいにロールピッチヨーが表せる ・つかむ動作はwait-interpolationでは待てない(unix:sleep 1)を使う
今日の学んだことのメモ
(send *fetch* :rarm :inverse-kinematics (send (send *fetch* :copy-worldcoords) :transform (make-coords :pos #f(600 250 680) **:rpy (float-vector 0 0 pi/2)**)) **:rotation-axis t** :debug-view t)
:rpyで向きを指定し:rotation-axis tでそれを反映させる
(send *fetch* :rarm :wrist-r :joint-angle -90)
手先を指定の角度まで回転させる
(send *ri* :wait-interpolation)
前の動作が終わるまで次の動作を待つ。graspには効かないので注意
(send *ri* :start-grasp :effort 60)
(unix:sleep 1)
(send *ri* :stop-grasp :effort 60) # 60 は変更しないこと.
graspに同じようなことをする手段
(send *ri* :angle-vector (send *fetch* :angle-vector) 4000 :use-torso nil)
:use-torso nil
で腰の上下無しで,アームを動かす
git push しようとしたら以下のようなエラーが出たのですがどうすればよいでしょうか
mech-user@ki00102:~/semi_ws/src/jsk_demos/jsk_2020_10_semi$ git add -A
mech-user@ki00102:~/semi_ws/src/jsk_demos/jsk_2020_10_semi$ git commit -m "ドア ノブをつかもうとする" [jsk_2020_10_semi 2c0ddb64] ドアノブをつかもうとする 3 files changed, 215 insertions(+) create mode 100644 jsk_2020_10_semi/euslisp/.sample.l.swp create mode 100644 jsk_2020_10_semi/euslisp/temma.l create mode 100644 jsk_2020_10_semi/uml/temmasuzuki.uml
mech-user@ki00102:~/semi_ws/src/jsk_demos/jsk_2020_10_semi$ git branch
mech-user@ki00102:~/semi_ws/src/jsk_demos/jsk_2020_10_semi$ git push origin jsk_2020_10_semi Username for 'https://github.com': tenrobo18 Password for 'https://tenrobo18@github.com': remote: Permission to jsk-ros-pkg/jsk_demos.git denied to tenrobo18. fatal: unable to access 'https://github.com/jsk-ros-pkg/jsk_demos/': The requested URL returned error: 403
上に同じくです。
git push origin jsk_2020_10_semi
じゃなくて,git push (フォーク先のリモート名) jsk_2020_10_semi
にしないといけないと思う.
多分,git push tenrobo18 jsk_2020_10_semi
とかgit push yuli-disney jsk_2020_10_semi
とかだと思うけど,git remote
で確認してorigin
じゃない方を書けば良かったはず
mech-user@ki00102:~/semi_ws/src/jsk_demos/jsk_2020_10_semi$ git remote origin
リモート名がなかったですね この場合どうすればいいんでしたっけ
多分フォークしてなさそう
じゃあフォークした後に,git remote add (好きな名前) git@github.com:tenrobo18/jsk_demos.git
とかかな
それでgit push (その名前) jsk_2020_10_semi
ってすればいけるはず
できました! ありがとうございます
今日学んだことリスト
・(send *fetch* :torso :waist-z :joint-angle 100.0)
: fetchの腰を100上げる(reset-poseできないときなどに有効)
・(send *ri* :start-grasp :effort 60)
: riの爪を開け閉め(開けるときは:stop-grasp
)するときのトルクをこの:effort 60
で指定する.60にするとちゃんと最後まで開け閉めする
・(send *fetch* :head :look-at (座標))
: fetchが特定の座標を向くようになる
今日学んだこと ハンドの手先位置を調整
(setq *difpos* (list 0 0 0))
(defun move-hand (x y z)
;; (let (x)
(send *fetch* :start-grasp)
(send *ri* :start-grasp)
;; (setq x -100)
(unix:sleep 1)
;; (send *fetch* :rarm :end-coords :parent)
(send *fetch* :rarm :move-end-pos (float-vector x y z) :local :debug-view t)
(send *ri* :angle-vector (send *fetch* :angle-vector))
(send *ri* :wait-interpolation)
;;(print (send (send *fetch* :copy-worldcoords) :transform (send *fetch* :rarm-end-coords) ))
(setf (elt *difpos* 0) (+ (elt *difpos* 0) x))
(setf (elt *difpos* 1) (+ (elt *difpos* 1) y))
(setf (elt *difpos* 2) (+ (elt *difpos* 2) z))
;; ()
;; )
)
rvizを立ち上げる方法
rossetmaster fetch15
rossetip
roslaunch jsk_fetch_startup rviz.launch
edgetpuで顔認識したトピックをサブスクライブする例(顔の位置によってturtlebotの向きを変える)
#!/usr/bin/env roseus
(ros::roseus-add-msgs "jsk_recognition_msgs")
(ros::roseus-add-msgs "geometry_msgs")
(defclass track-box-to-cmd-vel
:slots (track cmd_vel))
(defmethod track-box-to-cmd-vel
(:init ()
;; ros::init
(ros::roseus "face_recognizedColord_client")
(ros::subscribe "/edgetpu_face_detector/output/rects" jsk_recognition_msgs::RectArray #'send self :cb)
(ros::advertise "/cmd_vel" geometry_msgs::Twist 5)
(setq cmd_vel (instance geometry_msgs::Twist :init))
(setq track nil)
(ros::ros-info "init")
self)
(:cb (msg)
(setq track (send msg :rects))
)
(:loop ()
(ros::rate 10)
(setq alpha 0.001)
(ros::rate 10)
(while (ros::ok)
; (ros::ros-info "hello")
(setq alpha 0.001)
(if track
(progn
(if (= (send (car track) :x) 0)
(send cmd_vel :angular :z 0.3)
(send cmd_vel :angular :z (* (- alpha) (- (send (car track) :x) 220)))
)
(ros::ros-info "x [~A]" (send (car track) :x))
(ros::publish "/cmd_vel" cmd_vel)))
; (ros::ros-info "hello2")
(ros::spin-once)
(ros::sleep)
)
(exit)
)
)
(setq *ri* (instance track-box-to-cmd-vel :init))
(send *ri* :loop)
PCからundockする方法
1.irteusgl$ load "~/semi_ws/src/jsk_robot/jsk_fetch_robot/jsk_fetch_startup/euslisp/navigation-utils.l"
9.irteusgl$ undock
$ roseus sample.l
で
[ INFO] [1603884575.353959970]: waitForService: Service [/apply_planning_scene] has not been advertised, waiting...
のエラーが出る人は https://github.com/jsk-ros-pkg/jsk_robot/pull/1265 をみて
$ git remote add k-okada http://github.com/k-okada/jsk_robot
$ git pull k-okada 1174
$ git checkout 1174
してください。
棚を障害物として設定
(defun add-shelf-collision-object ()
(let ((shelf (make-cube 10 1000 1100)))
(send shelf :translate #f(795 0 550))
(send *co* :add-object shelf :frame-id "base_link" :object-id "shelf")))
(defun delete-shelf-collision-object ()
(send *co* :delete-object-by-id "shelf"))
fetch kinematics simulator 上ではfetch自身の体も含めて障害物が定義されていないので,地面をえぐるように腕を動かしてしまうことがある.これは,実機ではfetch-init
をする際に,
(setq *co* (instance collision-object-publisher :init))
というオブジェクトが作られてそれを避けるように経路を生成するからであるが,ローカルではこれが定義されていないからである.
理由は,[/apply_planning_scene] というサービスがないと*co*
が作られない仕様になっているからであり,実機だとこのサービスが既に存在しているが,ローカルでは存在しないからである.
ローカル上でも自分で*co*
を利用して障害物を作りたい場合は,事前に別のターミナルで
$ roslaunch fetch_moveit_config demo.launch
としておくと上述のサービスが存在するようになるので,その状態でfetch-init
するとちゃんと*co*
が定義され,その中の:add-keepout-collisioin-object
や:delete-keepout-collision-object
などを使って障害物を生成・削除してシミュレータ上で試すことができる.(fetch-interface.lを参照)
(12/23追記) updateしたdemo.launchでは /joint_state_publisher のGUIが自動で立ち上がり,それがroseusで立ち上げるfetchのそれと干渉するので,roseusでfetch-init する前に,そのGUIウィンドウを消去し,さらに
$ rosnode kill /joint_state_publisher
としておく必要がある.
screen point (https://jsk-docs.readthedocs.io/projects/jsk_recognition/en/latest/jsk_pcl_ros/nodes/pointcloud_screenpoint.html ) の使い方.
https://gist.github.com/k-okada/0ec60202cfdff466aa6b0452a90850c1 からファイルをダウンロード,/home/mech-user/
においてあることを想定している.
ぜひ,これにedgeTPUの画像処理結果で得られた二次元の座標を3次元情報に変換してみてください.
Tips: edgeTPUは別のワークスペースになるので,launchファイルは別のものが必要になります.
edgetpuで認識した顔の情報をサブスクライブする例を defclassやdefmethodを使わないパターンで書いてみました. シンプルにx,y,width,heightを表示します.
プログラム
#!/usr/bin/env roseus
(ros::roseus-add-msgs "jsk_recognition_msgs")
(setq *rect* nil)
(defun cb (msg)
(if msg
(setq *rect* (send msg :rects))
)
)
;;main
(ros::roseus "face_rect_client")
(ros::subscribe "/edgetpu_face_detector/output/rects" jsk_recognition_msgs::RectArray #'cb)
(ros::rate 10)
(while (ros::ok)
(if *rect*
(progn
;;(ros::ros-info "hello")
(ros::ros-info "x: ~A" (send (car *rect*) :x))
(ros::ros-info "y: ~A" (send (car *rect*) :y))
(ros::ros-info "width: ~A" (send (car *rect*) :width))
(ros::ros-info "height: ~A" (send (car *rect*) :height))
(setq w (send (car *rect*) :width))
(setq h (send (car *rect*) :height))
(ros::ros-info "area : ~A" (* w h))
)
)
(ros::spin-once)
(ros::sleep)
)
(send (car *rect*) :width)
のようにcarでメソッドにアクセスできるようになる理由は以下の出力を見ると理解できたかも?
42の出力は中身が1つのリスト
42.E1-irteusgl$ *rect*
(#<jsk_recognition_msgs::rect #X55c628ec7028>)
43.E1-irteusgl$ (car *rect*)
#<jsk_recognition_msgs::rect #X55c628ec7028>
動いているのでこだわらなくても良いですが...
(setq *difpos* #f(0 0 0))
としておくと,
(setq *difpos* (v+ *difpos* (float-vector x y z)))
とかけます.
$ (load "~/semi_ws/src/jsk_robot/jsk_fetch_robot/jsk_fetch_startup/euslisp/navigation-utils.l")
$ (load "package://jsk_fetch_startup/euslisp/navigation-utils..l")
~/semi_ws/
の人でも~/catkin_ws
の人でもsource <それぞれのワークスペース>/devel/setup.bash
してあればその環境に合わせてファイルをロードしてくれます
roseus '(progn (load "package://jsk_fetch_startup/euslisp/navigation-utils..l")(undock))"
とすると,shellからoneliner でundock できます.
(setq w (send (elt *rect* 0) :width))
と書くほうが,なんとなく安心かな.あまり理由は何けど,car があるとcdrも欲しくて,再帰で計算するかんじ
(if (> (length *rect*) 0)
(setw w (send (elt *rect* 0) :width)))
みたいな感じが見慣れている.ただ,例えばrectのサイズの一番大きいものを知りたい,という場合は
(ros::roseus-add-msgs "jsk_recognition_msgs")
(setq a (list (instance jsk_recognition_msgs::Rect :init :width 100 :height 100) (instance jsk_recognition_msgs::Rect :init :width 100 :height 200) (instance jsk_recognition_msgs::Rect :init :width 100 :height 50))) ;; ダミーのデータを作る
(setq b (car (sort a #'(lambda (x y) (< (* (send x :width) (send x :height)) (* (send y :width) (send y :height)))))))
;; これが理解できると,だいぶマスターにしてきている.
みたいな感じでしょうか.
uberバッグが届きました
ありがとうございます
On Tue, Nov 24, 2020 at 3:48 PM Yoshiki Obinata notifications@github.com wrote:
uberバッグが届きました[image: image] https://user-images.githubusercontent.com/27789460/100046700-13d83880-2e54-11eb-9df5-9de3af7ee16c.jpeg
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/jsk-ros-pkg/jsk_demos/issues/1309#issuecomment-732637187, or unsubscribe https://github.com/notifications/unsubscribe-auth/AMQSKZBFRWRSYPTSVZ7TJ43SRNJFDANCNFSM4SQFLPTA .
メモ ・rossetipとrossetmasterした後rqtを立ち上げ、pluginからimage viewを選択、その後覗きたいノードを選択するとfetch視点の映像を見ることができる ・引き出しの高さは480,670,860の3種類を想定、引き出しを引く関数を作りそこに開ける引き出しを指定する引数を渡す
今更ですが相対座標の取得とそこに手を持っていく動きを関数にしました。
;; 相対座標の取得
(defun make-relative-coord (x y z roll pitch yaw)
(setq decalt (float-vector x y z))
(setq euler (float-vector roll pitch yaw))
(setq relative-coord (send (send *fetch* :copy-worldcoords) :transform
(make-coords :pos decalt :rpy euler))
)
)
;; 相対位置に動かしたいとき
(defun relative-move-hand (x y z roll pitch yaw)
(let coords
(setq coords (make-relative-coord x y z roll pitch yaw))
(send *fetch* :rarm :inverse-kinematics coords :debug-view t)
(send *ri* :angle-vector (send *fetch* :angle-vector)))
)
(send *fetch* :rarm :move-end-pos #f(0 0 10))
(send *fetch* :rarm :move-end-rot #f(0 0 0.1))
でも動くかと思います.
本日の進捗 ・引き出しまで手を伸ばし、取っ手を掴んで引き、戻して、取っ手から手を話して初期状態に戻る一連の動作に成功 ・ただしこのままでは肘が邪魔で引き出しの中身を見ることができない。手の位置を下げてその分torsoを上げると良さそう
今日やったこと
今日やったこと ・ものを受け取る動作と受け渡す動作の確認 ・音声認識の確認(ウーバーイーツ) 今後やること ・人が見えたら受け渡すようにする ・言葉をきっかけに動作させてみる ・ウーバーイーツとのつなげ方
今日(12/2)やったこと ・keepoutがバグを引き起こすのでしばらく無しでやらなくちゃならない、辛い ・故にtorso上げてからinverse-kinematicsを打つと良い ・(send ri :add-ground-collision-object)などで調整
@softyanija
・keepoutがバグを引き起こすのでしばらく無しでやらなくちゃならない、辛い
https://github.com/jsk-ros-pkg/jsk_robot/pull/1268 と https://github.com/jsk-ros-pkg/jsk_robot/pull/1269 で治るかもしれません。 試してみます。
@yuli-disney @softyanija @tenrobo18 @tkmtnt7000 @ketaro-m
感染症対策は「ゼミ生入退室報告」というメールスレッドに 内容「〇〇です. 日時 2020/10/14 15:00-19:00 場所 73B2 用事 ゼミ. 喋った人:岡田」 と返信する.
シナリオを決める
使うロボットを決める
必要な機能を考える & 勉強する
emacs -nw
を立ち上げてM-x shell
でshell
を実行source /opt/ros/melodic/setup.bash
したあとroseus
でインタプリタを実行(send *robot* :angle-vector #f(-3.0 45.0 0.0 -110.0 0.0 0.0 0.0 0.0 -3.0 45.0 0.0 -110.0 0.0 0.0 0.0 0.0 0.0 0.0 -17.54 42.976 -25.435 0.0 0.0 0.0 0.0 0.0 -17.54 42.976 -25.435 0.0 0.0 0.0 0.0 -2.0 0.0 -2.0))
(send *robot* :larm :angle-vector)
(send *robot* :larm :angle-vector #f(-3.0 45.0 0.0 -110.0 0.0 0.0 0.0 0.0 0.0 -2.0))
(send *robot* :larm :shoulder-p :joint-angle -30)
CORAL https://github.com/k-okada/coral_usb_ros/blob/patch-2/README.md
Run image_view
はrqt_image_view
を使うと良いsetup D435i
roslaunch realsense2_camera demo_pointcloud.launch
UML シナリオの記述