jsk-ros-pkg / jsk_demos

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

2021年度ゼミ #1347

Open k-okada opened 3 years ago

k-okada commented 3 years ago

@s-yuzaki @YUKINA-3252 @Takuma-Hiraoka @ssk-yoshimura

https://github.com/k-okada/jsk_demos/tree/jsk_2021_10_semi/jsk_2021_10_semi

k-okada commented 3 years ago

semi.rosinstall ファイルが更新されたときの対処方法


k-okada@p51s:~/semi_ws/src$ wstool remove naoqi_driver
/usr/lib/python2.7/dist-packages/wstool/config_yaml.py:74: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
  yamldata = yaml.load(stream)
Overwriting /home/k-okada/semi_ws/src/.rosinstall
Removed entries ['naoqi_driver']
k-okada@p51s:~/semi_ws/src$ wstool merge https://raw.githubusercontent.com/k-okada/jsk_demos/jsk_2021_10_semi/jsk_2021_10_semi/semi.rosinstall
/usr/lib/python2.7/dist-packages/wstool/config_yaml.py:74: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
  yamldata = yaml.load(stream)
     Performing actions: 

     Add new elements:
  naoqi_driver

Config changed, maybe you need run wstool update to update SCM entries.
Overwriting /home/k-okada/semi_ws/src/.rosinstall

update complete.
k-okada@p51s:~/semi_ws/src$ wstool update
/usr/lib/python2.7/dist-packages/wstool/config_yaml.py:74: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
  yamldata = yaml.load(stream)
Prepare updating https://github.com/kochigami/naoqi_driver (version kochigami-develop) to /home/k-okada/semi_ws/src/naoqi_driver
Url https://github.com/k-okada/naoqi_driver does not match https://github.com/kochigami/naoqi_driver requested.
  (d)elete and replace, (a)bort, (b)ackup and replace, (s)kip: d

``
YUKINA-3252 commented 3 years ago

関節の名前の情報 https://github.com/jsk-ros-pkg/jsk_robot/tree/master/jsk_naoqi_robot/peppereus#joints-of-pepper

k-okada commented 3 years ago

@ayfujii @kochigami 今年のゼミ生がNaoを使いたいと言っているんだけど,どの機体つかったらいいかな.

ayfujii commented 3 years ago

73A4の私の席の上にいる赤いNao2体は使っていただいて大丈夫です

kochigami commented 3 years ago

ご返信が遅れてしまい申し訳ございません。 研究室のNAOのことは詳しくなくなってしまったのですが、 自宅にLapisを連れて帰っており、研究室に持って行きます。 いつまでに戻せばよろしいでしょうか。ご迷惑をお掛けし申し訳ございません。

Takuma-Hiraoka commented 3 years ago

@kochigami さん @ayfujii さん。ありがとうございます。 @Takuma-Hiraoka が poco を、@ssk-yoshimuraがpecoをかりました。

Nao環境の設定方法

pynaoqi-python2.7-2.5.5.5-linux64をダウンロードして

mkdir pynaoqi
unzip pynaoqi-python2.7-2.5.5.5-linux64.zip
mv pynaoqi-python2.7-2.5.5.5-linux64 pynaoqi
sudo apt install python-gobject-2

bashrc に以下を追加

# Please use Python NAOqi SDK version >= 2.5.5 (https://github.com/jsk-ros-pkg/jsk_robot/issues/1099)                                                                                                       
export PYTHONPATH=$HOME/pynaoqi/pynaoqi-python2.7-2.5.5.5-linux64/lib/python2.7/site-packages:$PYTHONPATH
export NAO_IP=133.11.216.130 #naoを起動後ボタンを押してnaoが喋るIPアドレス

ノードの立ち上げ

rossetip
roslaunch jsk_nao_startup.launch network_interface:=(ifconfigで出てくる値)

別のターミナルで

roscd naoeus 
roseus
(load "nao-interface.l")
(nao-init)
(send *nao* :reset-pose)
(send *ri* :servo-on)
(send *ri* :angle-vector (send *nao* :angle-vector)

特有のメソッドは https://github.com/jsk-ros-pkg/jsk_robot/tree/master/jsk_naoqi_robot/naoqieus

ssk-yoshimura commented 3 years ago

@mqcmd196 さんありがとうございました。

$ roslaunch jsk_nao_startup jsk_nao_startup.launch network_interface:=(ifconfigで出てくるやつ)

を行ったとき、 GUIが立ち上がるまで5分以上かかる時は、 dockerのinterfaceを消すとよいらしい

sudo ifconfig docker0 down

でも、dockerがなくても立ち上がらない時もあったので、関係ないかもしれない 数秒で立ち上がらないときは基本的にはそのまま立ち上がらない Ctrl+Cで一度止めてから再びやると大抵うまくいく

naoに喋らせる方法など

$ (send *ri* :set-master-volume 100)      
$ (send *ri* :speak "hello obinata")  
$ (send *ri* :stop-grasp) 
$ (send *ri* :start-grasp) 
$ (send *ri* :go-pos 0.05 0 0) 
$ (send *ri* :servo-off)

ほか、サンプルプログラムがroscd naoeusとした先のsampleディレクトリにある

ブラウザでnaoのipアドレスを打ち込み、設定などできる

.bashrcを書き換えたときは $ bash その後$ ping $NAO_IPで接続の確認ができる

ssk-yoshimura commented 3 years ago

Naoについて質問があります。 両足を地面につけて、右腕を前に出すようなポーズをfullbody-inverse-kinematicsで作りました。 実機でそのポーズにしようとしましたが、足が勝手に動いて、姿勢が不安定になります。

(load "package://naoeus/nao.l") 
(setq *nao* (NaoH25V50))
(objects (list *nao*)) 
(send *nao* :reset-pose)

;; fullbody-ikで姿勢を決める
(setq rleg-coords (send *nao* :rleg :end-coords :copy-worldcoords))
(setq lleg-coords (send *nao* :lleg :end-coords :copy-worldcoords))
(setq dest-full (make-coords :pos (float-vector 150 -40 100)))
(send *nao* :fullbody-inverse-kinematics
      (list rleg-coords
        lleg-coords
        dest-full)
      :move-target
      (list (send *nao* :rleg :end-coords)
        (send *nao* :lleg :end-coords)
        (send *nao* :rarm :end-coords))
      :link-list
      (list (send *nao* :link-list (send *nao* :rleg :end-coords :parent))
        (send *nao* :link-list (send *nao* :lleg :end-coords :parent))
        (send *nao* :link-list (send *nao* :rarm :end-coords :parent)))
      :translation-axis (list t t t)
      :rotation-axis (list t t nil)
      :target-centroid-pos (midpoint 0.5
                     (send *nao* :rleg :end-coords :worldpos)
                     (send *nao* :lleg :end-coords :worldpos))
      :cog-translation-axis :z
      :thre (list 30 30 30)
      :centroid-thre 5
      )

;; 実機に姿勢を送る
(send *ri* :servo-on)
(send *ri* :angle-vector (send *nao* :angle-vector))
(send *ri* :wait-interpolation)

;; 実機の角度を取得、表示する
(send *ri* :state)
(send *nao* :angle-vector (send *ri* :potentio-vector))

Screenshot from 2021-11-06 22-04-08

Screenshot from 2021-11-06 22-03-21

画像は順に、(send *ri* :angle-vector (send *nao* :angle-vector))で実機に送った関節角度のポーズと、 その後(send *ri* :potentio-vector)で実機から得た実際の関節角度によるポーズです。 実機では、右足が勝手に後ろに出ます。 左腕で同じことをすると、左足が後ろにでるので、姿勢を安定させようとするような処理がされているのかもしれないと思いました。 勝手に足などを動かさず、指定した関節角度の通りに動かすことはできますか?

shmpwk commented 3 years ago

@ssk-yoshimura
自分はnaoを使ったことがなく自信がないですが, naoのドキュメントに書いてある:set-background-movement-enabledを設定するとどうでしょう.

; disable background movement
send *ri* :set-background-movement-enabled nil
ssk-yoshimura commented 3 years ago

@shmpwk roseusで設定してみましたが、次のようになり、応答が返ってきません。

irteusgl$ (send *ri* :set-background-movement-enabled nil)                                       
  [ INFO] [1636206502.967988886]: waitForService: Service [/background_movement/set_enabled] has not been advertised, waiting... 

:get-background-movement-enabledしてみましたが同様でした。

irteusgl$ (send *ri* :get-background-movement-enabled)                                           
  [ INFO] [1636206727.960870712]: waitForService: Service [/background_movement/is_enabled] has not been advertised, waiting... 
shmpwk commented 3 years ago

@ssk-yoshimura

waitForService: Service [/background_movement/set_enabled] has not been advertised, waiting...

と言っているので,serviceが来るのを待っているようです. メソッドのdocLocationnaoqi_apps/launch/background_movement.launchにヒントがありそうで,これは naoqi_bridgeのnaoqi_appsパッケージの [kochigami-develop]ブランチ,ここにlaunchファイルがあります. このlaunchを立ち上げるために,次を実行します.

cd /src git clone -b kochigami-develop git@github.com:kochigami/naoqi_bridge.git cd rosdep update rosdep install --from-paths src --ignore-src -y -r catkin build (↑これらは岡田先生のsemi.rosinstallで自動的に実行されていたので不要でした.)

source <YOUR_WORKSPACE>/devel/setup.bash
roslaunch naoqi_apps background_movement.launch nao_ip:=<YOUR_NAO_IP> nao_port:=<YOUR_NAO_PORT>

最後のlaunchで自分のnao ipはわかると思うのですが,portで何を設定するのか,パッと探した感じよくわかりませんでした.(なしでもいけるんでしょうか,もう少し探してみます.)

kochigami commented 3 years ago

横から失礼します。 予想なので間違っているかもしれないのですが・・・

もしNAOの電源を入れてそのまま使われているようでしたら、 AutonomousLifeという、NAOを生き物のように動かす仕組みがオンのままなのかなと思いました。 jsk_nao_startup.launchを実行した後、 rosservice call /nao_robot/pose/life/get_stateでenabledかdisabledになっているか確認出来て、 rosservice call /nao_robot/pose/life/disableでオフにできると思います。

get-background-movementについては、AutonomousLifeの機能を一部だけ切り取ったものになっています。 (なので、AutonomousLifeを落としさえすれば、disabledにしなくて大丈夫です。) これ自体は、shmpwkさんがおっしゃるようにnaoqi_apps/launch/background_movement.launchを実行するとサービスを呼べるようになります。

portについては、私は今まで何か設定したことはなく、それで困ったことはないので、デフォルトのままで大丈夫ではないかなと思います。

色々書きましたが参考にならなかったらすみません。

ssk-yoshimura commented 3 years ago

@shmpwk @kochigami naoqi_dashboardでDisable Lifeに設定しているので、AutonomousLifeはオフになっています。 naoqi_apps/launch/background_movement.launchを実行してみました。 Naoqiのバージョンが古いようで、うまくいきません。

$ roslaunch naoqi_apps background_movement.launch nao_ip:=$NAO_IP
... logging to /home/mech-user/.ros/log/129133bc-3f67-11ec-ab69-20791860f1a8/roslaunch-ki00134-1400.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://ki00134:39171/

SUMMARY
========

PARAMETERS
 * /rosdistro: melodic
 * /rosversion: 1.14.11

NODES
  /
    naoqi_background_movement (naoqi_apps/naoqi_background_movement.py)

ROS_MASTER_URI=http://localhost:11311

process[naoqi_background_movement-1]: started with pid [1424]
[ERROR] [1636247434.111368]: Naoqi version of your robot is 2.1.4.13, which doesn't have a proxy to ALBackgroundMovement.
[naoqi_background_movement-1] process has died [pid 1424, exit code 1, cmd /home/mech-user/semi_ws/src/naoqi_bridge/naoqi_apps/nodes/naoqi_background_movement.py --pip=192.168.1.11 --pport=9559 __name:=naoqi_background_movement __log:=/home/mech-user/.ros/log/129133bc-3f67-11ec-ab69-20791860f1a8/naoqi_background_movement-1.log].
log file: /home/mech-user/.ros/log/129133bc-3f67-11ec-ab69-20791860f1a8/naoqi_background_movement-1*.log
[naoqi_background_movement-1] restarting process
k-okada commented 3 years ago

@ssk-yoshimura

(send *nao* :angle-vector (send *ri* :potentio-vector))

したあとの,足の関節をそれぞれの角度を知りたいです

ロボットに送る前は

8.irteusgl$ (send *nao* :legs :crotch-p :joint-angle)
(-33.811 -9.13465)
9.irteusgl$ (send *nao* :legs :crotch-y :joint-angle)
(9.94046 -12.8398)
10.irteusgl$ (send *nao* :legs :crotch-r :joint-angle)
(7.97013 6.378)
11.irteusgl$ (send *nao* :legs :knee-p :joint-angle)
(27.1275 19.1195)
12.irteusgl$ (send *nao* :legs :ankle-p :joint-angle)
(-5.62529 -6.10682)
13.irteusgl$ (send *nao* :legs :ankle-r :joint-angle)
(-3.4198 -2.95268)

となっていますが, http://doc.aldebaran.com/2-1/family/robots/joints_robot.html#pelvis-joints に書いてあるように,:crotch-y は同じ角度(対象?)にならないといけなくて,それで想定通りの姿勢になっていないように思います.

ssk-yoshimura commented 3 years ago

@k-okada ロボットに送った後の角度は下のようになっていて、:crotch-yだけ違っているので、これが原因のようです。電源offの状態で足を手動で動かしてみたら、たしかに対称に動きました。

23.irteusgl$ (send *nao* :lleg :crotch-y :joint-angle)                                            
9.75839                                                                                           
24.irteusgl$ (send *nao* :legs :crotch-p :joint-angle)                                            
(-33.748 -8.79157)                                                                                
25.irteusgl$ (send *nao* :legs :crotch-y :joint-angle)                                            
(9.75839 9.75839)                                                                                 
26.irteusgl$ (send *nao* :legs :crotch-r :joint-angle)                                            
(8.08845 6.15482)                                                                                 
27.irteusgl$ (send *nao* :legs :knee-p :joint-angle)                                              
(27.244 19.1628)                                                                                  
28.irteusgl$ (send *nao* :legs :ankle-p :joint-angle)                                             
(-5.45169 -6.32579)                                                                               
29.irteusgl$ (send *nao* :legs :ankle-r :joint-angle)                                             
(-3.24959 -2.81013)

:crotch-yの対称の条件をどう計算に使うかは考え中ですが、ひとまず解決しました。色々勉強になりました。 岡田先生、@shmpwkさん、@kochigamiさんありがとうございました。

Takuma-Hiraoka commented 3 years ago

@Takuma-Hiraoka 等身大ヒューマノイド使いたい HRP2

@s-yuzaki 撫でたい マップをもたせて移動させたい

@YUKINA-3252 ・特にこれといった特殊なやりたいことはないが、何らかの認識などができればいいと思っています(動かすだけではなくて)

@ssk-yoshimura 認識(カメラ)、人とものを受け渡ししたいです

学生「レポート提出お願い」 ロボットA: 言葉認識、ロボットBに指令:吉村 pr2 ロボットB: レポート用紙持ってくる:平岡 hrp2 ロボットC: レポート用紙に書く:岩田 fetch ロボットD: レポートを所定の場所に出す:勇崎 spot

k-okada commented 3 years ago

@s-yuzaki @ssk-yoshimura @YUKINA-3252 @Takuma-Hiraoka

1) spot のモデルの作り方がhttps://github.com/k-okada/jsk_demos/tree/jsk_2021_10_semi/jsk_2021_10_semi にあります.https://github.com/k-okada/jsk_demos/pull/93/files の差分をみて環境を更新すると使えるようになるとおもいます. これで,姿勢を作って,用意ができたら研究室にきて @sktometometo にロボットを起ち上げてもらえば,好きな姿勢に替えられるとおもいます.

2)rostopic に出ているUnicodeを読む方法ですが以下でした

k-okada@p51s:~$ rostopic echo /text
data: !!python/str "\u3053\u3093\u306B\u3061\u306F 1636542913.42"
---
data: !!python/str "\u3053\u3093\u306B\u3061\u306F 1636542913.52"
^Ck-okada@p51s:~$ rostopic echo /text | ascii2uni -a U -q
data: !!python/str "こんにちは 1636542916.02"
---
data: !!python/str "こんにちは 1636542916.12"
tkmtnt7000 commented 3 years ago

@708yamaguchiさんから教えて頂いたのですが rostopic に出ているUnicodeを読む方法として

rostopic echo --filter "print('transcript: [%s]\n---'%(', '.join(map(lambda x: '\'%s\''%(x.decode('utf-8')), m.transcript))))" /speech_to_text
transcript: [' こんにちは 。', ' こんにちは あ 。', ' 今日 わ 。', ' こんにちは は 。', ' 今日 は 。']

もあるそうです

参考 http://wiki.ros.org/rostopic#line-54

708yamaguchi commented 3 years ago

Euslispの中でspotの姿勢を変える方法について。

以下のプルリクエストにある:body-inverse-kinematicsを使ってみてください。 https://github.com/sktometometo/jsk_robot/pull/81

サンプルビデオ https://user-images.githubusercontent.com/19769486/141134905-9945f8e5-5d96-4e19-9d25-b4f5e96d9592.mp4

サンプルコード

(load "package://spoteus/spot-utils.l")

(spot)
(objects (list *spot*))

(dotimes (i 100)
  (send *spot* :body-inverse-kinematics
        (make-coords :pos (float-vector 0 (* 100 (cos (* pi i 0.02))) (* 100 (sin (* pi i 0.02))))))
  (unix:usleep 20000)
  (send *irtviewer* :redraw))

(dotimes (i 100)
  (send *spot* :body-inverse-kinematics
        (make-coords :pos (float-vector 0 0 (* 20 (sin (* pi i 0.02))))
                     :rpy (float-vector (* 0.2 (sin (* pi i 0.02))) (* 0.2 (sin (* pi i 0.02))) (* 0.2 (sin (* pi i 0.02))))))
  (unix:usleep 20000)
  (send *irtviewer* :redraw))
708yamaguchi commented 3 years ago

@mqcmd196

以下のようにしてspotのbody姿勢のrpy情報を取れると思うので、これを元にして(send *ri* :body-pose r p y)に引数として与えられるようにしましょう。

11.irteusgl$ (send *spot* :body-inverse-kinematics
        (make-coords :pos (float-vector 0 0 10)
                     :rpy (float-vector 0.1 0.1 0.1)))
#f(-9.19325 40.4579 -96.1943 -9.26349 44.0091 -96.0219 -2.76627 31.1499 -78.2145 -2.79712 37.7178 -84.0848)
12.irteusgl$ (send *spot* :coords)
#<coordinates #X5634d0508cd8  0.198 -0.185 9.446 / 0.1 0.1 0.1>
s-yuzaki commented 3 years ago

@k-okada @708yamaguchi spotの情報ありがとうございます。シミュレータで遊んでみます。

k-okada commented 3 years ago

@708yamaguchi kinovaspot のアームをつかってIKを解く方法も教えてください. https://github.com/k-okada/jsk_demos/blob/jsk_2021_10_semi/jsk_2021_10_semi/euslisp/demo.l で,みんなイロイロな姿勢をつくっているので,そこに追加できればとおもっています

708yamaguchi commented 3 years ago

@k-okada

このブランチを使ってください https://github.com/sktometometo/jsk_robot/tree/develop/spot 上述した、*spot*の胴体のみを動かす:body-inverse-kinematicsも、*spotkinova*から動かせるようにしました。

サンプルビデオ https://user-images.githubusercontent.com/19769486/141257523-93414599-ad8e-420f-b2e7-1c657aab8756.mp4

サンプルコード

(load "package://spotkinovaeus/spotkinova.l")

(spotkinova :type :gen3_lite_gen3_lite_2f)
(objects (list *spotkinova*))

(dotimes (i 100)
  (send *spotkinova* :move-to (make-coords) :world)
  (send *spotkinova* :reset-pose)
  (let ((arm-pose (send *spotkinova* :head :end-coords :copy-worldcoords)))
    (send *spotkinova* :fullbody-inverse-kinematics
          (send arm-pose :translate
                (float-vector (* 300 (cos (* pi i 0.02))) 0 (* 300 (sin (* pi i 0.02))))
                :world)))
  (unix:usleep 20000)
  (send *irtviewer* :redraw))
mqcmd196 commented 3 years ago

@708yamaguchi send *ri* :body-pose (send *spot* :coords) で送れるようにするという認識であっていますか?

708yamaguchi commented 3 years ago

send ri :body-pose (send spot :coords) で送れるようにするという認識であっていますか?

はい,僕はそれが理想かなと考えています.

ただ,すでに:body-poseを使っているコードがあるのなら,そこも一緒に変更する必要があります. 僕がさっと検索したところ,以下のコードくらいかな,と思います. https://github.com/sktometometo/jsk_robot/blob/b2d177352f796bf97369f8bb03481f8664ce89cc/jsk_spot_robot/spoteus/demo/sample_basics.l#L56-L71

708yamaguchi commented 3 years ago

あと,

(send *spot* :coords)

を直接触ると副作用がありそうなので,

(defclass spot-robot
  (:body-pose ()
    (send *spot* :coords :copy-woldcoords))

みたいに現在のspotのcoordsを返す関数を定義して,

(send *spot* :body-inverse-kinematics coords) ;; returns angle-vector
(send *ri* :body-pose (send *spot* :body-pose))

と呼べるようにするのが見た目的にも綺麗なのでしょうか.

参考: https://github.com/jsk-ros-pkg/jsk_robot/pull/1376#discussion_r747142790

k-okada commented 3 years ago

https://github.com/tongtybj/jsk_demos/blob/10b4243d32adf1bad7abf4d2f4d13736b39f86c2/jsk_spot_watch_dog/scripts/watch-dog.l#L175 で使っていない? で,coordsでも良いんだけど,初心者向け/とりあえずちょっと動かす向けに,オリジナルの (send ri :body-pose 0 0.2 0) の直感性はそれで残したほうが良いと思っているんだけどこれは, (send ri :body-pose (make-cascoords :pos #f(0 0 0) :rpy (float-vector 0 0.2 0))) になるのかな?

-- ◉ Kei Okada

-- ◉ Kei Okada

2021年11月11日(木) 19:36 Naoya Yamaguchi @.***>:

send ri :body-pose (send spot :coords) で送れるようにするという認識であっていますか?

はい,僕はそれが理想かなと考えています.

ただ,すでに:body-poseを使っているコードがあるのなら,そこも一緒に変更する必要があります. 僕がさっと検索したところ,以下のコードくらいかな,と思います. https://github.com/sktometometo/jsk_robot/blob/b2d177352f796bf97369f8bb03481f8664ce89cc/jsk_spot_robot/spoteus/demo/sample_basics.l#L56-L71

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or unsubscribe.

mqcmd196 commented 2 years ago

で,coordsでも良いんだけど,初心者向け/とりあえずちょっと動かす向けに,オリジナルの (send ri :body-pose 0 0.2 0) の直感性はそれで残したほうが良いと思っているんだけどこれは, (send ri :body-pose (make-cascoords :pos #f(0 0 0) :rpy (float-vector 0 0.2 0))) になるのかな?

https://github.com/sktometometo/jsk_robot/pull/84 ではその予定ですが,rpyも送れるようにしておこうと思います.ただSpot本体にx,yの姿勢司令を送ることはできないので,x,yの姿勢を動かさない制約を設けて逆運動学を解く必要があります.

mqcmd196 commented 2 years ago

上のブランチでhttps://github.com/jsk-ros-pkg/jsk_demos/issues/1347#issuecomment-965323166 の2つ目の例にならって

(dotimes (i 100)
  (send *spot* :body-inverse-kinematics
        (make-coords :pos (float-vector 0 0 (* 20 (sin (* pi i 0.02))))
                     :rpy (float-vector (* 0.2 (sin (* pi i 0.02))) (* 0.2 (sin (* pi i 0.02))) (* 0.2 (sin (* pi i 0.02))))
  (send *ri* :body-pose (send *spot* :copy-worldcoords)) 
)

を実行した動画です.

https://user-images.githubusercontent.com/27789460/141716643-c9268627-5fb2-4e09-a599-4aa770c9509a.MOV

Naoki-Hiraoka commented 2 years ago

x,yの姿勢を動かさない制約を設けて逆運動学を解く方法

(load "package://spotkinovaeus/spotkinova.l")

(spotkinova :type :gen3_lite_gen3_lite_2f)
(objects (list *spotkinova*))

(dotimes (i 100)
  (send *spotkinova* :move-to (make-coords) :world)
  (send *spotkinova* :reset-pose)
  (let ((arm-pose (send *spotkinova* :head :end-coords :copy-worldcoords)))
    (send *spotkinova* :fullbody-inverse-kinematics
          (send arm-pose :translate
                (float-vector (* 200 (cos (* pi i 0.02))) 0 (* 300 (sin (* pi i 0.02))))
                :world)
        :root-link-virtual-joint-weight #f(0.0 0.0 0.1 0.1 0.5 0.5)
            ))
  (unix:usleep 20000)
  (send *irtviewer* :redraw))

(備考 Z, roll, pitch, yawにだけ動く関節のクラスがhttps://github.com/euslisp/jskeus/blob/master/irteus/irtmodel.l などに定義されていれば、そのクラス名をhttps://github.com/euslisp/jskeus/blob/89932980fe64eb0c0db6dbe6b79b61e2d3d17169/irteus/test/test-irt-motion.l#L222 の引数wheel-classに与えることで同じことができるが、現状定義されていない)

708yamaguchi commented 2 years ago

平岡くん、すごく助かります。 virtual jointについて、勉強しておきます。

mqcmd196 commented 2 years ago

@Naoki-Hiraoka さんありがとうございます.eusで作った姿勢を実機へ送る方法です.https://github.com/sktometometo/jsk_robot/pull/85 が必要です.

(send *spotkinova* :move-to (make-coords) :world)
(send *spotkinova* :reset-pose)
(let ((arm-pose (send *spotkinova* :head :end-coords :copy-worldcoords)))
  (send *spotkinova* :fullbody-inverse-kinematics
        (send arm-pose :translate
              (float-vector 0 0 300)
              :world)
      :root-link-virtual-joint-weight #f(0.0 0.0 0.1 0.1 0.5 0.5)))

;;実機への指令
(send *ri* :angle-vector (send *spotkinova* :angle-vector) 8000) ;;アームのみが動く
(send *ri* :body-pose (send *spotkinova* :copy-worldcoords)) ;;spotのみが動く

kinova-armの関節角とspotの姿勢は別々に送る必要があります.
ここからは余談ですが,ロボット実機の関節角度は

(send *ri* :state :potentio-vector :wait-until-update t)

で一般に取得できますが,Spotに関してはそれをsend *spotkinova* :angle-vector (send *ri* :state :potentio-vector :wait-until-update t) としてeusモデルに適用してしまうと,eusモデルのspotの原点の姿勢を維持しながら足を動かすことになり,片足が浮いてしまうような姿勢になります.一度やってみると面白いです

708yamaguchi commented 2 years ago

https://github.com/sktometometo/jsk_robot/pull/86 を使えば、:root-link-virtual-joint-weight #f(0.0 0.0 0.1 0.1 0.5 0.5)をデフォルトで呼んでくれるようになります。(生成される動作などに変わりはありません)

s-yuzaki commented 2 years ago

spotがeuslispで動きました。ありがとうございます。 初歩的な質問なのですが、掴ませる動作をさせようと思いspotkinova.lにstart-graspやstop-graspという関数があったので

(load "package://spotkinovaeus/spotkinova.l")
(spotkinova :type :gen3_lite_gen3_lite_2f)
(objects (list *spotkinova*))
(send *spotkinova* :start-grasp)

などと実行したのですが cannot find method :right_finger_bottom_joint in (send self :right_finger_bottom_joint :joint-angle (rad2deg pos)) と表示されました。掴ませる動作をするにはどのようにすればいいでしょうか?

mqcmd196 commented 2 years ago

@s-yuzaki 自分でも同じエラーが出ることを確認しました.報告ありがとうございます.直しておきます. ちなみに,実機には send *ri* :start-grasp で正しく送れます

mqcmd196 commented 2 years ago

@s-yuzaki https://github.com/sktometometo/jsk_robot/pull/87 で直ると思います

ssk-yoshimura commented 2 years ago

Coral TPUの環境構築 https://github.com/knorth55/coral_usb_ros ↑melodicの部分をやること。

Takuma-Hiraoka commented 2 years ago

@kochigami さん @ayfujii さん。 73A4の@ayfujii さんの机の上にpocoを返却しました。ありがとうございました。

k-okada commented 2 years ago

@ssk-yoshimura @YUKINA-3252 @s-yuzaki @Takuma-Hiraoka 昨日はお疲れ様でした. 昨日作ったプログラムをcommitしてpushしてPull Request (PR) 作ってくれると嬉しいです.

@Takuma-Hiraoka の分は https://github.com/k-okada/jsk_demos/pull/97 かな.こういう感じでお願いします. ビデオや写真も差し支えない範囲で,PRのコメント(ブラウザでPR作るときに書き込む文章)に入れてくれると何やっているかわかりやすいです.

k-okada commented 2 years ago

@ssk-yoshimura @YUKINA-3252 @s-yuzaki @Takuma-Hiraoka 今日も途中で抜けてしまったけど,そのあと順調に進んだかな. コードを追加した人はPRを作ってみてくれると嬉しいです. 25日26日は午後の演習が休講だと思うけど,つまり僕も暇なので,今日できなかった質問とか相談がある人は対応できるので,居室にくるなり,TV会議するなりできるので連絡ください.

@YUKINA-3252 https://github.com/k-okada/jsk_demos/pull/96 で spotkinova関連のコードが消えているんだけど,https://github.com/k-okada/jsk_demos/pull/101 で戻しました.

多分,spotkinovaveus というパッケージがなくて,コメントアウトしたんだと思うんだけど,

https://github.com/k-okada/jsk_demos/tree/jsk_2021_10_semi/jsk_2021_10_semi の変更部分に対応してみるとよいとおもいます.具体的にはwstool updateしてから https://github.com/k-okada/jsk_demos/pull/93/files#diff-d8bec2a7e222faaf1baa32d95fea137c193ff587fc06bf39436048dc058b3eaeR24-R36 の追加部分をすれば良いんだけど,多分これだけだと難しいからどこか(最悪来週月曜日の演習)でサポートできると思います.

708yamaguchi commented 2 years ago

もしかしたらゼミとは関係ないかもしれませんが、fetch15のRunStopボタンが押されたままになっていました。

この状態だとfetchを動かせないので、次に使う人のためにも使い終わったら元に戻しましょう。

逆に、fetchが動かなかったときはRunStopボタンが押されたままになっていないかを確認してみましょう。

押されているRunStop 押されていないRunStop
pressed released
tkmtnt7000 commented 2 years ago

を使うとspotとkinova両方のrosbagを取ることができます rosbag_play側のlaunchファイルはまだ作成できていないので完成次第共有します

tkmtnt7000 commented 2 years ago

↑続きです

kinovaの腕についているrealsense画像のdecompressがうまくいっていませんがとりあえず必要最低限のものは再生できるかと思います

https://github.com/sktometometo/jsk_robot/pull/102 に更新していきます

tkmtnt7000 commented 2 years ago

sktometometo/jsk_robot#102 のrosbag_play.launchを更新しました。 kinovaの手首についているカメラ画像も問題なく再生できると思います。

tkmtnt7000 commented 2 years ago

@s-yuzaki kinova_wrist_cameraが出している点群のrviz上での向きについてhttps://github.com/sktometometo/jsk_robot/pull/104 で直しました。 新たにrosbagファイルを取り直してもらうと正しい向きでrviz上に表示されると思います。

s-yuzaki commented 2 years ago

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

708yamaguchi commented 2 years ago

さっきhuman_pose_estimatorの画像が見えなくてデバッグしていたところ、以下のように/edgetpu_human_pose_estimator/model_fileのrosparamが書き換わっているのを発見しました。

ロボットをマスターにしてrosparam setをするとその結果がロボットのroscoreに残り続けてしまうので、慎重に行いましょう。

$ rosparam get /edgetpu_human_pose_estimator/model_file
/home/mech-user/coral_ws/src/coral_usb_ros/python/coral_usb/posenet/models/mobilenet/posenet_mobilenet_v1_075_481_641_quant_decoder_edgetpu.tflite

若林くん、塚本くん、デバッグのお手伝いありがとうございました。

ssk-yoshimura commented 2 years ago

すみません、今後気をつけます。

ssk-yoshimura commented 2 years ago

@k-okada @Takuma-Hiraoka @YUKINA-3252 @s-yuzaki

3月になり、ゼミの4人でゼミを再開しようという話になりました。

現状の日程としては、個人は行きたい日に行くとして、 少なくとも3/9(水)は4人で集まるということで考えています。

4人で話し合ったのですが、主なやりたいこととしては、

・研究室で作っている回路、モーターの仕組みを勉強して、自分で動かしてみたい(例えば、腱駆動の部屋やJAXONの部屋、ドローンの部屋で使っている回路などに触れてみたい) ・できれば、それを使ってなにか作る。

という話になっています。 上のような回路やモーターで、私たちゼミ生が使用できるようなものはありますか?

よろしくお願いします。

k-okada commented 2 years ago

はい.了解です.僕は9日は一日外出なので,一回方針確認で8日とかどうかな. カレンダーに予定をいれたので都合が悪ければ,他の日に移動させてみてください.その週は午前中だったら水曜日以外あいています.今週の金曜日の16時以降とかでも良いです

@kindsenior @haraduka @makabe0510 @tongtybj ということなので,なにか良いドライバ基盤+コントローラあれば推薦してください. ー 基盤は練習も兼ねてケーブルぐらい配線するとよいかも ー 回路,モータの仕組みはほぼブラックボックスかと思うけど,コントローラ側がそこそこ見通せると良いと思うけど ー 2軸ぐらいで簡単に作ってもらって,上手く行けばロボットに組み込めると良いです