1 of 37

2025年1月 整理

2 of 37

やること

ゴール:

(実装方法は変えずに)一つのプログラムで、normal_kxr, kashiwagi, kuromitsu, denden, miyamichi?が動くようにする

  1. それぞれが現状のレポジトリでちゃんと動くかどうかを確認する
    1. ちゃんと動く = eye_statusが送れて所望の感情表現ができる
      • normal_kxr
      • kashiwagi
      • kuromitsu
      • denden
      • miyamichi => 返信なし
      • spot => commit を戻すがm5stamps3に未対応のエラー。在庫がなくc3での動作確認不可
  2. 関数をそのまま羅列して追加して一つのレポジトリで動くことを確認する
    • 編集の方向性
      1. normal_kxr, kashiwagi, kuromitsu, dendenのみをとりあえず対応させることを考える
      2. normal_kxrが最新のはずなので、そこからkashiwagi, kuromitsu, dendenを生やす
      3. 今の状態のeye classをNormalKxrEye, KashiwagiEye, …みたいに増やしたが、それだとspriteが足りなくなる。方針として、①コンパイル時の引数で-Dでkashiwagiやnormal_kxrを与えて、initをするものを分ける②spriteの初期化のクラス(EyeManager)を作り、感情表現系(EmotionManager)は分ける という2つが考えられるが、多分次におこなう3を踏まえると、クラスを分けるのが良い気がするので②で頑張ってみる
      4. ②で頑張ったが、今の実装は画像をEyeManager(spriteの初期化クラス)で行うものになっているため、そこで目のpathを指定しなくてはいけない。=> pathの指定をEmotionManagerのほうで行なうべき?
  3. ボトムアップ的に並べられた関数を眺めて、統一できないかを考える
    • 方針例:eye classのなかに感情のものを入れるのではなく、eye classとemotion classがあり、emotionのなかで必要に応じてeye class内のまぶたの動きや視線の動き、画像の差し替え関数を呼ぶ
    • happyもblinkもsadもやっていることは同じなので、それを抽象化する

別のやること

  1. fill circleで書いているものは画像にしたほうが汎用性があるので、画像に置き換える。

3 of 37

やるべきこと

  • jsk_demos/jsk_2023_codesignのパッケージ化
    • kashiwagi_kuromitsuのpackage.xmlとCMakeLists.txtをコピーして確認する
  • 柏木さんとくろみつで引数を変えるだけで切り替えられるようにする
    • rosparamの設定
  • 柏木さんとくろみつで動作確認
    • rcb4以下のkxr_controller・jsk_demos以下のkashiwagi.launch(/kuromitsu.launch)を立ち上げる
      • 柏木さん動作確認 laptop, radxa
      • くろみつ動作確認 laptop, radxa
        • radxaでの動作確認は矢野倉先生にjedyシステムの導入をお願いする
  • eye moduleの新城さんのreviewを反映
  • 頬と目を含めた動作確認

4 of 37

整理するべきもの

永田さん卒論試問お疲れさまでした.

ちょうどいいタイミングなのでお願いしたいことがあって,例えば永田さんの作ったソフトウェアのリポジトリは,矢野倉先生のrcb4というドライバのリポジトリの上に作っていると思うのですが,永田さんの作った永田さんのデモ関連コードと,KXRドライバは分けてほしいです.

澤田さんと市倉さんも同様に,時間があるうちにくろみつとかしわぎさん固有のコードを分けていくフェーズかなと思います.

KXRは今みんなが基盤として使っているシステムだと思っていて,来年度新入生が入ったときに簡単に引き継げるようにしたいというのと,rosのビルドシステムのいい勉強の機会になると思います.

デモコードはjsk_demosにPRを出してください.なんのリポジトリが必要かはrosinstall(wstool向け), あるいはrepos(vcstool向け)を作る,どうビルドすればいいかは基本は catkin buildでbuildできるようにするが,特殊な工程が必要な場合はREADMEに書く,という風にするといいと思います.

目的

新入生が入った時に簡単に引き継げるようにしたい

目標状態

1つのcatkin_wsで、それぞれのロボット(プーさん、柏木さん、くろみつ)が動くようにする

  1. ドライバのレポジトリ
    1. プー、柏木、くろみつの共通部分を切り取る
  2. 固有のロボット.launch
    • 固有の設定は、launchファイル

参考

  • https://github.com/jsk-enshu/robot-programming/blob/master/.rosinstall.noetic

やること

  1. まずioryのrcb4の最新masterで柏木くろみつが動くかを確認する
  2. JSK demosに pacakge.xml cmake_list.txt, rosinstall の入ったディレクトリを作ってPRを出す
    1. rosinstall <= 一番重要 なんのディレクトリのなんのバージョンがあれば、柏木くろみつをうごかせるのかを明らかにする
      1. urdfをzooからclone + rcb4がioryのmaster

5 of 37

eye-display やることの整理

https://github.com/sktometometo/eye-display/pull/27

  • 画像ファイルパスの管理方法改善
  • set_picture_position()の使用状況を確認
  • sprite_eye.clear()の扱い
  • set_gaze_direction()の設計改善
  • EmotionManagerのset_emotion()を整理
  • EmotionManagerのimage_path_mapを整理
  • EmotionManagerをemotion_manager.hppに分割

※一個ずつ、やる => commit を繰り返す。上から一つずつみる。

6 of 37

環境構築(KXRの体内)

  1. rosserial通信のための環境構築

$ sudo apt install ros-$ROS_DISTRO-rosserial

$ sudo apt install ros-$ROS_DISTRO-rosserial-arduino

$ cd ~

$ mkdir -p toshima_ws/src

$ cd ~/toshima_ws/src

$ git clone git@github.com:sawada10/rosserial.git

$ cd ~/toshima_ws

$ catkin build

—----------------------------------------------------------------

  • rcb4eusの環境構築

$ cd ~

$ git clone git@gitlab.jsk.imi.i.u-tokyo.ac.jp:rcb4eus/rcb4eus.git

—----------------------------------------------------------------

  • 目のモジュールに関するPythonファイルをダウンロード(随時更新中)

$ cd ~/toshima_ws/src

$ git clone git@github.com:sawada10/eye_fsr_files.git

$ cd ~/toshima_ws

$ catkin build

—-----------------------------------------------------------

4.com-initが止まらないようにするために

sudo systemctl disable rcb4roscontroller.service

sudo systemctl stop rcb4roscontroller.service

—------------------------------------------------------------------

cd /rcb4eus/

git pull origin master

make

7 of 37

emotion

iris

pupil

reflex

upperlid

0

normal

kashiwagi_iris.jpg

kashiwagi_pupil.png

sprite_pupil.fillCircle(58, 58, 30, TFT_BLACK);

kashiwagi_reflex.png

sprite_reflex.fillCircle(40, 40, 6, TFT_LIGHTGRAY);

kashiwagi_upperlid.jpg

1

blink

kashiwagi_iris.jpg

kashiwagi_pupil.png

sprite_pupil.fillCircle(58, 58, 30, TFT_BLACK);

kashiwagi_reflex.png

sprite_reflex.fillCircle(40, 40, 6, TFT_LIGHTGRAY);

kashiwagi_upperlid.jpg

2

surprised

kashiwagi_iris_surprised.jpg

(iris_surprised_right.jpg)

kashiwagi_pupil_surprised.png

sprite_pupil.fillCircle(image_height / 2, image_width / 2, 30, TFT_BLACK);

kashiwagi_reflex_surprised.png

sprite_pupil.fillCircle(image_height / 2, image_width / 2, 30, TFT_BLACK);

kashiwagi_upperlid.jpg

3

sleepy

kashiwagi_iris.jpg

kashiwagi_pupil.png

sprite_pupil.fillCircle(58, 58, 30, TFT_BLACK);

kashiwagi_reflex.png

sprite_reflex.fillCircle(40, 40, 6, TFT_LIGHTGRAY);

kashiwagi_upperlid.jpg

4

angry

kashiwagi_iris.jpg

kashiwagi_pupil.png

sprite_pupil.fillCircle(58, 58, 30, TFT_BLACK);

kashiwagi_reflex.png

sprite_reflex.fillCircle(40, 40, 6, TFT_LIGHTGRAY);

kashiwagi_upperlid_ldown.png

(upperlid_leftside_down.png)

5

sad

kashiwagi_iris.jpg

kashiwagi_pupil.png

sprite_pupil.fillCircle(58, 58, 30, TFT_BLACK);

kashiwagi_reflex.png

sprite_reflex.fillCircle(40, 40, 6, TFT_LIGHTGRAY);

kashiwagi_upperlid_rdown.png

(upperlid_rightside_down.png)

6

happy

white.jpg

white.jpg

kashiwagi_happy.jpg

(upperlid_happy_right.jpg)

white.jpg

7

troubled

white.jpg

white.jpg

kashiwagi_troubled.jpg

white.jpg

8

very_happy

white.jpg

white.jpg

kashiwagi_very_happy.jpg

(kashiwagi_delighted.jpg)

white.jpg

9

expecting

kashiwagi_iris.jpg

white.jpg

kashiwagi_reflex_expecting.png

sprite_reflex.fillCircle(image_height / 2, 45, 23, TFT_LIGHTGRAY)

sprite_reflex.fillCircle(image_height / 2, 100, 15, TFT_LIGHTGRAY);

kashiwagi_upperlid.jpg

8 of 37

emotion

iris

pupil

reflex

upperlid

0

normal

kashiwagi_iris.jpg

kashiwagi_pupil.png

sprite_pupil.fillCircle(58, 58, 30, TFT_BLACK);

kashiwagi_reflex.png

sprite_reflex.fillCircle(40, 40, 6, TFT_LIGHTGRAY);

kashiwagi_upperlid.jpg

1

blink

kashiwagi_iris.jpg

kashiwagi_pupil.png

sprite_pupil.fillCircle(58, 58, 30, TFT_BLACK);

kashiwagi_reflex.png

sprite_reflex.fillCircle(40, 40, 6, TFT_LIGHTGRAY);

kashiwagi_upperlid.jpg

2

surprised

kashiwagi_iris_surprised.jpg

(iris_surprised_right.jpg)

kashiwagi_pupil_surprised.png

sprite_pupil.fillCircle(image_height / 2, image_width / 2, 30, TFT_BLACK);

kashiwagi_reflex_surprised.png

sprite_pupil.fillCircle(image_height / 2, image_width / 2, 30, TFT_BLACK);

kashiwagi_upperlid.jpg

3

sleepy

kashiwagi_iris.jpg

kashiwagi_pupil.png

sprite_pupil.fillCircle(58, 58, 30, TFT_BLACK);

kashiwagi_reflex.png

sprite_reflex.fillCircle(40, 40, 6, TFT_LIGHTGRAY);

kashiwagi_upperlid.jpg

4

angry

kashiwagi_iris.jpg

kashiwagi_pupil.png

sprite_pupil.fillCircle(58, 58, 30, TFT_BLACK);

kashiwagi_reflex.png

sprite_reflex.fillCircle(40, 40, 6, TFT_LIGHTGRAY);

kashiwagi_upperlid_ldown.png

(upperlid_leftside_down.png)

5

sad

kashiwagi_iris.jpg

kashiwagi_pupil.png

sprite_pupil.fillCircle(58, 58, 30, TFT_BLACK);

kashiwagi_reflex.png

sprite_reflex.fillCircle(40, 40, 6, TFT_LIGHTGRAY);

kashiwagi_upperlid_rdown.png

(upperlid_rightside_down.png)

6

happy

white.jpg

white.jpg

kashiwagi_happy.jpg

(upperlid_happy_right.jpg)

white.jpg

7

troubled

white.jpg

white.jpg

kashiwagi_troubled.jpg

white.jpg

8

very_happy

white.jpg

white.jpg

kashiwagi_very_happy.jpg

(kashiwagi_delighted.jpg)

white.jpg

9

expecting

kashiwagi_iris.jpg

white.jpg

kashiwagi_reflex_expecting.png

sprite_reflex.fillCircle(image_height / 2, 45, 23, TFT_LIGHTGRAY)

sprite_reflex.fillCircle(image_height / 2, 100, 15, TFT_LIGHTGRAY);

kashiwagi_upperlid.jpg

9 of 37

emotion

iris

pupil

reflex

upperlid

0

normal

white.jpg

denden_pupil.png

sprite_pupil.fillCircle(image_width / 2, image_height / 2, 30, TFT_BLACK);

white.jpg

normal_kxr_upperlid.jpg

1

blink

white.jpg

denden_pupil.png

white.jpg

normal_kxr_upperlid.jpg

2

surprised

white.jpg

denden_pupil_surprised.png

sprite_pupil.fillCircle(image_height / 2, image_width / 2, 15, TFT_BLACK);

denden_reflex_surprised.png

sprite_reflex.fillCircle(image_height / 2 +5, image_width / 2, 7, TFT_LIGHTGRAY);

normal_kxr_upperlid.jpg

3

sleepy (tired)

white.jpg

denden_pupil.png

white.jpg

normal_kxr_upperlid.jpg

4

angry

white.jpg

denden_pupil.png

white.jpg

normal_kxr_upperlid_ldown

5

sad / troubled

denden_tear.jpeg

denden_pupil.png

denden_reflex_sad.png

sprite_reflex.fillCircle(50, 50, 6, TFT_LIGHTGRAY);

normal_kxr_upperlid_rdown

6

happy (star)

white.jpg

white.jpg

white.jpg

denden_upperlid_star.jpeg

7

heart

white.jpg

white.jpg

white.jpg

denden_upperlid_heart.jpeg

8

9

image_width = 139

10 of 37

やったこと

  • 新城さんのmasterをfetchした
  • denden.yamlを追加
  • 書き込み(2種類の方法(pio run …. & rosrun eye_display build.py ./denden.yaml –env stamps3 –port /dev/ttyACM0))を実行
  • roslaunch eye_display demo.launch port:=/dev/ttyACM0 debug:=true eye_asset_file:=$(rospack find eye_display)/launch/denden.yaml
    • 実行したもののyamlの文法のエラー(e.g., upperlid_position:[130, 0]的なもののコロン以下のスペース抜け)があり修正
    • => しかし、実行できるけど、normal_kxrの目が出る+以下のエラー
      • [ERROR] [1744019674.221447]: Unable to sync with device; possible link problem or link software version mismatch such as hydro rosserial_python with groovy Arduino
    • 柏木さんでは動くのではと思い、以下を実行
      • roslaunch eye_display demo.launch port:=/dev/ttyACM0 debug:=true eye_asset_file:=$(rospack find eye_display)/launch/kashiwagi.yaml
      • 同様の結果になる
      • kashiwagi.launchもだめだった
    • ケーブル不調を疑い、純正のUSBケーブルに変更も変わらず
  • 結局、前回の柏木さんのyamlテスト時と今の新城さんの最新masterに差分がある
    • 前回のテスト時の状態に戻ろうとする
    • しかし、gitリテラシー不足かもしれないが、git checkoutしたタイミングで、D file_name.pngみたいな感じで、画像データが削除されてしまう。しかし、remoteでみると、そのcommit時には確かに画像データが存在するはずである。
  • shinjo/masterをもってきてrosserial_versionのとおりにやった(以下の通り)けど,rostopic listで/eye_statusが出ていなかった
    • roscd eye_display/sample_project
    • rosrun eye_display build.py ./sample.yaml --env stampc3 --port <port to device>
    • roslaunch eye_display demo.launch port:=<port to device> mode_right:=<true or false>

11 of 37

4/6 debug

  • READMEの�git clone https://github.com/sktometometo/eye_display.git だとダメ(eye_displayは古くて,eye-displayが新しい),�git clone git@github.com:sktometometo/eye-display.git した
  • roscd eye_display/sample_project
  • rosrun eye_display build.py ./sample.yaml --env stampc3 --port <port to device>
  • roslaunch eye_display demo.launch port:=<port to device> mode_right:=<true or false>
  • すると,
    • [ERROR] [1744019674.221447]: Unable to sync with device; possible link problem or link software version mismatch such as hydro rosserial_python with groovy Arduino
    • rostopic listで/eye_statusが出ていない

12 of 37

11/19 豊島岡イベント

関係者向け資料

13 of 37

emotion

test結果

修正後

0

normal

reflexなし => 画像ファイルのミス。白い画像だったため、透過処理走った。

main.cppを見て、実際に使っていたreflex.pngと置換した

たぶん◎

1

blink

たぶん◎

たぶん◎

3

sleepy

reflex, irisなし => 0と同様のミス & path_irisにreflexのパスがあったので、空気読んでkrmt_iris_normal.pngに書き換え

たぶん◎(reflexが見えないと思ったけど、upperlidにかくれてるだけだった)

5

sad

怒っていそうな目 => 空気を読んで左右反転

たぶん◎

7

troubled

ずっと下がったまぶた => upperlid_positionを修正

たぶん◎

8

delightedd

ずっと下がったまぶた => data/krmt_reflex_delighed.pngにタイポがあったので修正

たぶん◎

10

heart

ずっと下がったまぶた => 7と同様のミス

たぶん◎

11

shine1

たぶん◎

12

shine2

たぶん◎

14

boring

たぶん◎

たぶん◎

16

regret1

空気を読んで目のぎゅっとしてるのを左右反転

たぶん◎

17

regret2

空気を読んで目のぎゅっとしてるのを左右反転

たぶん◎

15

serious

空気を読んでupperlidの左右反転

reflexなしは0と同様のミス

たぶん◎

14 of 37

やること:FSRにタッチしたら目の表情を変え、KXRが動く

/serial_node3

/power

/power_to_touch

/touched_status

/touch_to_eye

/eye_status

/serial_node1

/serial_node2

/touch_to_action

/action

/action_sub

FSR

eye_module

KXRへ

動作指令

ROSの構成

15 of 37

やること:FSRにタッチしたら目の表情を変え、KXRが動く

/serial_node3

/power

/power_to_touch

/touched_status

/touch_to_eye

/eye_status

/serial_node1

/serial_node2

/touch_to_action

/action

/action_sub

FSR

eye_module

KXRへ

動作指令

ROSの構成(活動の中で生徒が編集する部分

/

/speech

/speech

/touch_to_eye

/power_to_touch

16 of 37

構成(cf. 稲葉先生資料) 青塗りの箇所が今回の活動とよく関連する部分

D405 & ECHO ヘッドの場合

関節制御ボードkondoh7

STM32H7

400MHz

UART

I2C

ICS port x 6

M5StickV/M5UnitV

カメラ

M5StickV/M5UnitV

カメラ

pisugar 2 / 3

バッテリ制御ボード

3.7V, 1200mAh

M5ステレオヘッドの場合

Intel RealSense D405

rgb 距離画像

848x480

M5ATOM ECHO

マイク,スピーカ

BT, WiFi

M5ATOM ECHO

マイク,スピーカ

BT, WiFi

5V, GND 40pin経由

UART, 1Mbps

I2C

M5ATOM S3

液晶モニタ,ボタン

BT, WiFi

USB3

I2C

I2C-1

400Kbps

I2C-3

1Mbps

KRS 3301,3302,3304

サーボ x 20

3線

ICS

半二重UART

1.25Mbps

KXR用

バッテリ

7.4V, 800mAh

安定化

電源装置

7.4V

5V USB

HDMIモニタ

USBハブ

BT

I2C

5V

(I2Cコネクタから)

M5Stamp / M5StampS3

ラウンド液晶モジュール

M5Stamp / M5StampS3

ラウンド液晶モジュール

Arduino Nano Every

FSR X 406 / 402

USBキーボード

視聴覚処理計算機radxa zero

64bit ARM Cortex-A53 quad core

4GB RAM

128GB eMMC

WiFi, BT

UART,I2C,SPI

debian 10 buster

ROS noetic

eye module

rosserial

rosserial

rosserial

17 of 37

環境構築(laptop)

  1. Ubuntu 20.04 をインストール
  2. wifi 設定

https://drive.google.com/file/d/1nkLUltQaopz5w9qNqL2yyOEosttcO-_0/view?usp=sharing

  • 日本語入力をインストール ->
  • emacs をインストール
  • ROS Noeticをインストール

http://wiki.ros.org/ja/noetic/Installation/Ubuntu

★ jsk-commonもインストールしないと、rossetmaster, rossetip等が使えない!

 sudo apt-get install ros-noetic-jsk-common

★ 内蔵カメラが見えない時は

 sudo apt-get install libwebcam0

  reboot

sshできるように Extenssion から Remote SSH (+ Remote Explorer ) を入れる

  • realsense viewerをインストール

https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md

realsense-viewer

  • catkin toolsをインストール

sudo apt install python3-osrf-pycommon python3-catkin-tools

sudo apt install build-essential

  • toshima_wsを作る

1, 3を参照

  • rcb4eusの環境構築

2. を参照

18 of 37

環境構築(KXRの体内)

  • rosserial通信のための環境構築

$ sudo apt install ros-$ROS_DISTRO-rosserial

$ sudo apt install ros-$ROS_DISTRO-rosserial-arduino

$ cd ~

$ mkdir -p toshima_ws/src

$ cd ~/toshima_ws/src

$ git clone git@github.com:sawada10/rosserial.git

$ cd ~/toshima_ws

$ catkin build

—----------------------------------------------------------------

  • rcb4eusの環境構築

$ cd ~

$ git clone git@gitlab.jsk.imi.i.u-tokyo.ac.jp:rcb4eus/rcb4eus.git

—----------------------------------------------------------------

  • 目のモジュールに関するPythonファイルをダウンロード(随時更新中)

$ cd ~/toshima_ws/src

$ git clone git@github.com:sawada10/eye_fsr_files.git

$ cd ~/toshima_ws

$ catkin build

—-----------------------------------------------------------

4.com-initが止まらないようにするために

sudo systemctl disable rcb4roscontroller.service

sudo systemctl stop rcb4roscontroller.service

—------------------------------------------------------------------

cd /rcb4eus/

git pull origin master

make

19 of 37

環境構築(KXRの体内のwifiをUTokyoにする方法)

参考

  1. sahinrio ファイルがあるときは、sanshiroの設定ファイルをコピーする ← sanshiroファイルがなければ設定ファイルをつくる

cd /etc/NetworkManager/system-connections

sudo cp sanshiro.nmconnection 0000UTokyo.nmconnection

  • 0000UTokyoの設定ファイルを編集する

sudo emacs -nw 0000UTokyo.nmconnection

<編集内容>

20 of 37

環境構築 (wifiのsanshiroファイルの作り方)

←自分のpcのMacアドレスにする

←ここも変更する

21 of 37

環境構築(新しいwifi設定ファイルの作り方)

sudo su

# nmcli r wifi on

# nmcli dev wifi で見えるnetworkを確認.

# nmcli dev wifi connect “JSK300M” password “89sk389sk3”などとして接続.

sudo rebootして、新しいwifiにつながることを確認

/etc/NetworkManager/system-connections以下に新しいwifiの設定ファイルが作成されるのでそれをコピーして

0000UTokyoの設定ファイルを作成する。

22 of 37

環境構築(gitについて)

豊島岡用 git account (github,gitlab共通)

メールアドレス demo-toshimagaoka@jsk.imi.i.u-tokyo.ac.jp user: jsktsm pass: はくしゅかっさい

もし、他のアカウントがすでに登録されていたら…

git config --global --unset user.name

git config --global --unset user.email

してから

git config --global user.name “jsktsm”

git config --global user.email demo-toshimagaoka@jsk.imi.i.u-tokyo.ac.jp

ssh keyを登録する

・新しい鍵を作る

cd ~/.ssh

ssh-keygen -f id_tsm_rsa

※ssh keyの名前

pc : id_rsa

kxr(radxa): id_tsm_rsa

・github側に登録する

※ssh keyの名前

pc : toshimagaoka_$num

kxr(radxa) : toshimagaoka_kxr_$num

23 of 37

M5Stamp(液晶モジュール)の配線と書き込み

・使用する液晶モジュール(液晶と基板一体型)

https://www.switch-science.com/products/8098 またはhttps://www.switch-science.com/products/8851

・M5Stampに書き込むソースコード(随時更新中)

https://github.com/sawada10/eye-display

・書き込み手順

ソースコードのgithubリンクのreadmeを参照

・配線

USB C – USB A のケーブルでradxaにつながるUSBハブとM5Stamp / M5 Stamp S3をつなげる

24 of 37

Arduino Nano Every, FSRの配線と書き込み

・使用するArduinoおよびFSR

Arduino Nano Every, FSR X 406 / 402

・Arduino Nano Everyに書き込むソースコード(随時更新中)

https://github.com/sawada10/fsr_rosserial

・Arduino Nano EveryとFSRの配線

以下のサイトを参照

https://iinpht.jeez.jp/sensor/arduino%E3%81%A7%E5%9C%A7%E5%8A%9B%E3%82%BB%E3%83%B3%E3%82%B5%E3%83%BC%EF%BC%88fsr406%EF%BC%89%E3%82%92%E4%BD%BF%E3%81%86

・Arduino Nano Every と radxaの配線

USB A – USB micro のケーブルでradxaにつながるUSBハブとArduino Nano Everyをつなげる

25 of 37

USBデバイスを接続したときのデバイスファイル名を固定する(KXR体内)

通常、eye module, FSRについて、デバイスファイル名(e.g., /dev/ttyACM*)はデバイスを指した順になってしまう

➡ デバイス名を固定する(右目のモジュールは /dev/ttyACM-righteyeなどにする)

方法(cf. https://smdn.jp/electronics/udev_create_persistent_usb_device_symlink/)

  1. deviceのシリアルIDなどを確認する

$ dmesg

[1398698.113964] usb 1-6: new full-speed USB device number 6 using xhci_hcd

[1398698.267466] usb 1-6: New USB device found, idVendor=0403, idProduct=6001

[1398698.267469] usb 1-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3

[1398698.267471] usb 1-6: Product: FT232R USB UART

[1398698.267472] usb 1-6: Manufacturer: FTDI

[1398698.267473] usb 1-6: SerialNumber: XXXXXXXX

[1398698.270667] usb 1-6: Detected FT232RL

[1398698.271080] usb 1-6: FTDI USB Serial Device converter now attached to ttyUSB0

  • /etc/udev/rules.d/ 以下に、各デバイスのデバイスファイル名のルールを追加する

$ cd /etc/udev/rules.d

$ sudo emacs -nw 99-usb-xxxxxx.rules

# right eye

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="XXXXXXXX", SYMLINK+="ttyACM-righteye", GROUP="dialout"

  • デバイスファイル名のルールを反映させる

$ ls

したのちにUSBの抜き差しをする

同じもの

26 of 37

設定ファイルの置き場所

設定ファイルは ドライブに管理している

※岡田先生、稲葉先生、市倉、澤田、デモ豊島岡のみ閲覧可能

config

中に入っているもの

・radxaの0000UTokyo wifi設定ファイル(澤田のuser,pass入力済)

・eye modulesの左右デバイスusb認識固定化設定ファイル

・nano everyのusb認識固定化ファイル

27 of 37

実行手順(KXR体内で実行)

$ source ~/toshima_ws/devel/setup.bash

# 複数デバイスとrosserial通信を始めるためのlaunch

$ roslaunch rosserial_python multiple_serial_node.launch

—----------------------------------------------------------------------------------------------------------------------

$ roslaunch eye_fsr_files eye_fsr.launch

# 以下はeye_fsr.launchの中身

# subしたfsrの値(/power)に応じて/touch_statusにメッセージをpubする

$ rosrun eye_fsr_files power_sub_touch_status_pub.py

# subした/touch_statusに応じて、KXRの目の状態を/eye_statusにpubする

$ rosrun eye_fsr_files touched_status_sub_eye_status_pub.py

# subした/touch_statusに応じて、KXRの行う行動を/actionにpubする

$ rosrun eye_fsr_files touched_status_sub_action_pub.py

# subした/actionに応じてKXRに動作指令を送る

—----------------------------------------------------------------------------------------------------------------------

$ cd ~/rcb4eus

$ roseus action_sub_movement_pub.l

28 of 37

11/8 テスト用セットアップ

電源はお腹側に給電(usb micro)

USB hubは背中側上から2番目に給電(usb C)

29 of 37

11/8 ゼミは次のスライドから

30 of 37

11/8 テスト用セットアップ

必ず同じ番号のセットを使う

31 of 37

USB hubに eye-modulex2 + arduinoを繋ぐ

eye module ( USB C - A )

arduino nano every ( USB micro - A )

FSRを伸びているジャンプワイヤーのメスに繋ぐ

ブレッドボードは30番(後ろ)が

USBに繋がるように挿す

32 of 37

11/8 テスト用実行手順 (全てradxaの中で行う)

  1. wifiの設定を ist-hsr-5gにする

$ sudo su

# nmcli r wifi on

# nmcli dev wifi

# nmcli dev wifi connect “ist-hsr-5g” password “89sk389sk3”

# exit

$ sudo reboot

  • toshima_wsをupdate

$cd ~/toshima_ws/src/eye_fsr_files

$ git fetch -a

$ git reset --hard origin/master ⬅︎ 強制的にmaster をupdate してください

$ cd ~/toshima_ws

$ catkin build

  • action_sub_movement_pub.l をrcb4eusにコピーする

$ cd ~/rcb4eus

$ cp ~/toshima_ws/src/eye_fsr_files/scripts/toshima_files/euslisp/action_sub_movement_pub.l .

33 of 37

11/8 テスト用実行手順

4. rosserial通信を開始する

$ source ~/toshima_ws/devel/setup.bash

$ roslaunch rosserial_python multiple_serial_node.launch

5. 目のモニターに画像を表示してみる

   (別のターミナルで)

$ rostopic list

$ rostopic pub -1 /eye_status std_msgs/UInt16 “data: 0”

                       ↑ ( 0 - 6 )で指定する

★数字によって目のアニメーションが変化するはず

6. FSRのセンサの値をみる

  (別のターミナルで)

$ rostopic echo /power

  

   ★センサを押していないと 0.0 センサを押していると > 50 の値が表示されるはず

7. 首を動かしてみる

  (別のターミナルで)

$ cd ~/rcb4eus

$ roseus action_sub_movement_pub.l

(別のターミナルで)

$ rostopic pub -1 /action std_msgs/String “data: ‘nod’”

     ↑ nod, shakeのいずれかで指定する

   ★ topic をpubすると首や体が動くはず

34 of 37

11/8 テスト用実行手順

8. FSR → 目の表示変化 → 首の動き を試してみる

★ 一度全てのターミナルを Ctrl + C する

★ 以下のA. B. C. を全て別のターミナルで実行する

  1. rosserial 通信を開始する

$ source ~/toshima_ws/devel/setup.bash

$ roslaunch rosserial_python multiple_serial_node.launch

  • FSRをタッチしたら目が笑うようにする

$ source ~/toshima_ws/devel/setup.bash

$ roslaunch eye_fsr_files eye_fsr.launch

  • FSRをタッチしたら目が笑い、首が動くようにする

$ source ~/toshima_ws/devel/setup.bash

$ cd ~/rcb4eus

$ roseus action_sub_movement_pub.l

35 of 37

11/8 テスト用実行手順

9.1 python コードから 目のモニターを変化させる

★ 一度全てのターミナルを Ctrl + C する

★ 以下のA. B. を全て別のターミナルで実行する

  1. rosserial通信を開始する

$ source ~/toshima_ws/devel/setup.bash

$ roslaunch rosserial_python multiple_serial_node.launch

  • pythonコードを実行する

$ rosrun eye_fsr_files eye_status_pub.py # 前にchmod 755 *が必要?(実行権限を与える)

input で 嬉しい と打ち込むと 目のモニターが変化する(笑う)はず

9.2 pythonのコードの中身を編集してみる

$ source ~/toshima_ws/devel/setup.bash

   $ cd toshima_ws/src/eye_fsr_files/scripts/toshima_files/python/

$ emacs -nw eye_status_pub.py

   ⬆︎このファイルの中の original_fuc の中身を編集してみる

  ★ 実行するときは、9.1と同じ手順を踏む

36 of 37

11/8 テスト用実行手順

10.1 python コードから FSRの値を見る

★ 一度全てのターミナルを Ctrl + C する

★ 以下のA. B. を全て別のターミナルで実行する

  • rosserial通信を開始する

$ source ~/toshima_ws/devel/setup.bash

$ roslaunch rosserial_python multiple_serial_node.launch

  • pythonコードを実行する

$ rosrun eye_fsr_files power_sub_message_pub.py

★ FSRにかかる力を出力し続けるはず

10.2 pythonのコードの中身を編集してみる

$ source ~/toshima_ws/devel/setup.bash

   $ cd toshima_ws/src/eye_fsr_files/scripts/toshima_files/python/

$ emacs -nw power_sub_message_pub.py

★このファイルの中の L12 をコメントアウトして、 L14 をコメントイン

original_callbackの中身を編集する

★実行するときは、10.1と同じ手順を踏む

37 of 37

11/8 テスト用実行手順

11.1 python コードから ロボットの動き を変化させる

★ 一度全てのターミナルを Ctrl + C する

★ 以下のA. B. C. を全て別のターミナルで実行する

  • rosserial通信を開始する

$ source ~/toshima_ws/devel/setup.bash

$ roslaunch rosserial_python multiple_serial_node.launch

  • robotとの通信を開始する

$ cd ~/rcb4eus

$ roseus action_sub_movement_pub.l

  • pythonコードを実行する

$ rosrun eye_fsr_files action_pub.py # chmod 755

input で 元気だね と打ち込むと首が頷くはず

終わるときは 終わり と打ち込む

11.2 pythonのコードの中身を編集してみる

$ source ~/toshima_ws/devel/setup.bash

   $ cd toshima_ws/src/eye_fsr_files/scripts/toshima_files/python/

$ emacs -nw action_pub.py

   ⬆︎このファイルの中の original_fuc の中身を編集してみる

★ 実行するときは、11.1と同じ手順を踏む