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

2021年度ゼミ #1347

Open
k-okada opened this issue Oct 27, 2021 · 58 comments
Open

2021年度ゼミ #1347

k-okada opened this issue Oct 27, 2021 · 58 comments

Comments

@k-okada
Copy link
Member

k-okada commented Oct 27, 2021

@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
Copy link
Member Author

k-okada commented Oct 27, 2021

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
Copy link

@k-okada
Copy link
Member Author

k-okada commented Oct 27, 2021

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

@ayfujii
Copy link

ayfujii commented Oct 30, 2021

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

@kochigami
Copy link
Contributor

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

@Takuma-Hiraoka
Copy link

Takuma-Hiraoka commented Nov 1, 2021

@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
Copy link

ssk-yoshimura commented Nov 1, 2021

@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
Copy link

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
Copy link

shmpwk commented Nov 6, 2021

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

; disable background movement
send *ri* :set-background-movement-enabled nil

@ssk-yoshimura
Copy link

ssk-yoshimura commented Nov 6, 2021

@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
Copy link

shmpwk commented Nov 6, 2021

@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 <YOUR_WORKSPACE>/src
git clone -b kochigami-develop git@github.com:kochigami/naoqi_bridge.git
cd <YOUR_WORKSPACE>
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
Copy link
Contributor

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

もし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
Copy link

@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
Copy link
Member Author

k-okada commented Nov 7, 2021

@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
Copy link

@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
Copy link

Takuma-Hiraoka commented Nov 10, 2021

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

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

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

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

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

@k-okada
Copy link
Member Author

k-okada commented Nov 10, 2021

@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
Copy link
Member

tkmtnt7000 commented Nov 10, 2021

@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
Copy link
Member

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

以下のプルリクエストにある:body-inverse-kinematicsを使ってみてください。
sktometometo/jsk_robot#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
Copy link
Member

@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
Copy link

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

@k-okada
Copy link
Member Author

k-okada commented Nov 11, 2021

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

@708yamaguchi
Copy link
Member

708yamaguchi commented Nov 11, 2021

@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
Copy link
Member

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

@708yamaguchi
Copy link
Member

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
Copy link
Member

あと,

(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))

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

参考:
jsk-ros-pkg/jsk_robot#1376 (comment)

@k-okada
Copy link
Member Author

k-okada commented Nov 11, 2021 via email

@mqcmd196
Copy link
Member

mqcmd196 commented Nov 15, 2021

で,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)))
になるのかな?

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

@mqcmd196
Copy link
Member

上のブランチで#1347 (comment) の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)) 
)

を実行した動画です.

IMG_5850.MOV

@Naoki-Hiraoka
Copy link

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に与えることで同じことができるが、現状定義されていない)

@s-yuzaki
Copy link

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
Copy link
Member

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

@mqcmd196
Copy link
Member

@s-yuzaki sktometometo/jsk_robot#87 で直ると思います

@ssk-yoshimura
Copy link

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

@Takuma-Hiraoka
Copy link

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

@k-okada
Copy link
Member Author

k-okada commented Nov 18, 2021

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

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

@k-okada
Copy link
Member Author

k-okada commented Nov 24, 2021

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

@YUKINA-3252 k-okada#96 で spotkinova関連のコードが消えているんだけど,k-okada#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
Copy link
Member

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

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

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

押されているRunStop 押されていないRunStop
pressed released

@tkmtnt7000
Copy link
Member

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

@tkmtnt7000
Copy link
Member

tkmtnt7000 commented Dec 1, 2021

↑続きです

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

  • 使い方
    それぞれのファイルをjsk_spotkinova_startup/launch/以下に置いた上で
roslaunch jsk_spotkinova_startup rosbag_record.launch rosbag:=<your intended file path>
roslaunch jsk_spotkinova_startup rosbag_play.launch rosbag:=<rosbag file path> # ファイルパスは絶対パスで通したほうが良さそうです

sktometometo/jsk_robot#102
に更新していきます

@tkmtnt7000
Copy link
Member

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

@tkmtnt7000
Copy link
Member

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

@s-yuzaki
Copy link

s-yuzaki commented Dec 8, 2021

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

@708yamaguchi
Copy link
Member

さっき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
Copy link

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

@ssk-yoshimura
Copy link

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

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

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

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

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

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

よろしくお願いします。

@k-okada
Copy link
Member Author

k-okada commented Mar 1, 2022

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

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

@haraduka
Copy link

haraduka commented Mar 1, 2022

腱駆動の方でしたら, 既存のFPGA02Dで筋モジュールを作って動かしてみる, 新しいFPGA03Dで筋モジュールを作ってみる(こちらは現在永松システムへの移行考え中なので, 一緒に探り探りやる形になると思います), 浦田系のモータドライバがのった1軸試験機で遊んでみる, B4の鈴木とRAMIEL一緒に動かしてみる, 等があります.
ただ, 自分は3/7, 3/8, 3/11が一日中会議でいなく, 鈴木くんも3/8にワクチンなので, ちょっとそこら辺の日程が微妙です. 個人個人で来るぶんには, 鈴木くん(みな連絡先は知ってるかな)や河原塚(twitterでもメールでも)に連絡してくれれば, 明日でも明々後日でも73B1に来てくれたらなんか一緒に作ったり動かしたりすることはできます(回路とかロボットを動かすとかは全員でやるのも微妙なので, 特に集まる必要もなさそうな気はします)

@kindsenior
Copy link
Member

kindsenior commented Mar 1, 2022

自分の3/8辺りも今週金曜も今のところ予定はないので
方針確認についても,浦田系またはFPGA03(02?)D互換のSU05系のドライバを作るというのも可能です
浦田系の一軸試験機使う以外だと,回路使ってる感はないですが普通にJAXON2,3を使ってみるみたいなのも可能です

@makabe0510
Copy link

KXRであれば、何かしら組み立て済みの実機の制御基板にファームウェアを書き込んで、eusから動かすのは比較的シンプルにできると思います
将来的に小さいスケールで多自由度なものを新規で作りたい場合、一つの選択肢だと思います

自分も今の所、今週金曜日も3/8あたりも空いています

@ssk-yoshimura
Copy link

ありがとうございます。
ゼミ生に聞いてみたのですが、4人が揃う日がなかなか無さそうなので、早めにゼミ生全員とオンラインで方針確認してから各自行動するのがいいかと思いました。
ゼミ生4人は3日(木)の午後、7日(月)の午前は(オンラインで)空いているようですがその日程でも可能でしょうか。

@k-okada
Copy link
Member Author

k-okada commented Mar 2, 2022

まずは3日の15時に設定してみました.コチラ側の準備不足だったら7日にもう一回やってみましょう.
各自のGoogleカレンダーに招待していると思うので,確認してください.

@k-okada
Copy link
Member Author

k-okada commented Mar 3, 2022

全員:モータドライバの配線,
@Takuma-Hiraoka Jaxon1の換装作業
@YUKINA-3252 組み込みプログラムから制御→部屋のロボット化が考えてみる
@ssk-yoshimura 自主プロの足を作る.四足にして,人より早く走るようにする.
@s-yuzaki JSKドライバと勇崎ドライバを対決させる.部屋のロボット化.

9日の13時:2号館73B1集合
河原塚(73B1):9午後 : @ssk-yoshimura @s-yuzaki
小島(330):9午後  : @Takuma-Hiraoka @YUKINA-3252

@k-okada
Copy link
Member Author

k-okada commented Mar 23, 2022

@YUKINA-3252 @Kanazawanaoaki
先程の例ですが,https://gist.github.com/k-okada/8a19f3ad507633f64d88852570042ad3 に作れました.
すべてのファイルをダウンロードして

make
./main

とすると,無事にコンパイルされて実行出来るとおもいます.ここで,
func.cppfunc関数の引数を変更し,たとえばint func(int a) みたいにして,

make

とすると,以下のようにlibfunc.so だけが更新され,また,その中での定義名が_Z4funciとなっていることが確認できます.
この時,mainを実行すると,もともとの_Z4funcv 関数が見つからない,というエラーになります.

gcc -shared -o libfunc.so func.cpp
nm libfunc.so
0000000000201020 B __bss_start
0000000000201020 b completed.7698
                 w __cxa_finalize
00000000000004a0 t deregister_tm_clones
0000000000000530 t __do_global_dtors_aux
0000000000200e88 t __do_global_dtors_aux_fini_array_entry
0000000000201018 d __dso_handle
0000000000200e90 d _DYNAMIC
0000000000201020 D _edata
0000000000201028 B _end
0000000000000588 T _fini
0000000000000570 t frame_dummy
0000000000200e80 t __frame_dummy_init_array_entry
0000000000000630 r __FRAME_END__
0000000000201000 d _GLOBAL_OFFSET_TABLE_
                 w __gmon_start__
0000000000000594 r __GNU_EH_FRAME_HDR
0000000000000468 T _init
                 w _ITM_deregisterTMCloneTable
                 w _ITM_registerTMCloneTable
00000000000004e0 t register_tm_clones
0000000000201020 d __TMC_END__
000000000000057a T _Z4funci
k-okada@p51s:/tmp/fuga$ ./main 
./main: symbol lookup error: ./main: undefined symbol: _Z4funcv

@YUKINA-3252
Copy link

YUKINA-3252 commented Mar 25, 2022

岡田先生、ありがとうございます。
先生の教えてくださったことなどから考えるに、色々なサイトを参考にしたりしてrealsenseとROSをつなげるプログラムをgit cloneしているうちにバージョンが異なるものや色々不都合が起こったのかもしれません。
現時点では先生がデバッグしてくださり問題なくrealsenseからtopicを送れているようなので色々試してみます。
また、c++の関数名についてなどももう一度ソフト第二の資料を読み直してみます。

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

No branches or pull requests