Open kochigami opened 12 months ago
NaoとPepperの体内のPCが同じだったら基本は問題ないと思うけど、それぞれで
uname -a lsb_release -a cat /proc/cpuinfo
みたいなのをそれぞれ試してみてください。
もしおなじだったら、NaoもPepperも同じcross で動くと良いので、、、 1)nao関連のパッケージ(meshes)などもコピーする 2)nao/pepper を自動で判別する方法を見つける /etc の下とかにJuliette みたいな文字列のあるファイルがないかな?あれば、start.sh や install.sh は切り替える 3)TARGET_ROBOT はビルド時に手動で指定するのが良い中(つまりできたUser はNao用・Pepper用になってしまう。あるいは2つのロボットに対応できるようにTARGET_ROBOTをリストを受け取るようにする)
ありがとうございます。
Pepper: NAOqi 2.5.11.13 NAO V6: NAOqi 2.8 で調べました。
uname -a lsb_release -a cat /proc/cpuinfo
そのまま貼ってよい情報なのか分からないため、一旦ファイルとして共有いたします。 https://docs.google.com/document/d/1rYese8Or2nFNKyvMKNXaQYr7Y7e0CoUi/edit?usp=sharing&ouid=102048303683139089959&rtpof=true&sd=true
結論としては、体内のPCが同じなのでNAO (V6) もjsk_naoqi_robot/cross 環境が使えそうです。 http://doc.aldebaran.com/2-8/family/nao_technical/motherboard_naov6.html http://doc.aldebaran.com/2-5/family/pepper_technical/motherboard_pep.html
1)nao関連のパッケージ(meshes)などもコピーする
こちら、承知いたしました。
2)nao/pepper を自動で判別する方法を見つける /etc の下とかにJuliette みたいな文字列のあるファイルがないかな?あれば、start.sh や install.sh は切り替える
探し方が悪いのかもしれないのですが、見つかりませんでした。 もう少し調べます。
1つ思いついたのは、
ロボットの体内で
qicli call ALSystem.systemVersion
すると、NAOqi OSのバージョンが取ってこれそうです。
http://doc.aldebaran.com/2-5/naoqi/core/alsystem-api.html#ALSystemProxy::systemVersion
NAO V4, V5のNAOqi OSバージョンを忘れてしまったのですが(多分 2.1 だったはずです・・・)、 NAO V6: 2.8 Pepper for Education: 2.5 のため、見分けられそうです。
一様hostnameで見分けられるのかな、とも思ったのですが、
nao [0] /etc $ cat hostname
nao
Pepper [0] /etc $ cat hostname
Pepper
以下のような「ロボットの名前を変える」メソッドがあり、これを実行すると、hostnameが変更されると思うので、駄目そうです。 http://doc.aldebaran.com/2-5/naoqi/core/alsystem-api.html#ALSystemProxy::setRobotName__ssCR
3)TARGET_ROBOT はビルド時に手動で指定するのが良い中(つまりできたUser はNao用・Pepper用になってしまう。あるいは2つのロボットに対応できるようにTARGET_ROBOTをリストを受け取るようにする)
2つのロボットに対応していた方がビルドし直しの手間が無くせるのかな、という気がします。 まずは、それができるか考えて、難しそうだったらNAO用、Pepper用をその都度つくるようにしようと思います。
9月中旬にNAOを使う用事があるため、それが一段落してから取り組もうと思います。
なるほど、体内のCPUがハードウェアとしては同じなんだけど、
Pepper: Linux Pepper 4.0.4-rt1-aldebaran-rt-00002-g2edd9f0 #1 SMP PREEMPT RT Mon Oct 30 18:18:58 Local time zone must be se i686 Intel(R) Atom(TM) CPU E3845 @ 1.91GHz GenuineIntel GNU/Linux Nao: Linux nao 4.4.86-rt99-aldebaran #1 SMP PREEMPT RT Fri Mar 9 17:19:39 CET 2018 x86_64 x86_64 x86_64 GNU/Linux
Pepper は i686 (32bit)で、Naoは x86_64 (64bit) になっているのが不思議。Pepperはi686 だからこそ、
ctc-linux64-atom-2.5.10.7/bin/i686-aldebaran-linux-gnu-gcc
を使ってクロスコンパイルしたので、そう考えると本当は
ctc-linux64-atom-2.8.4.2/bin/x86_64-aldebalan-linux-gnu-gcc
みたいな環境が必要、という理屈になります。
とはいえ、ふつうはx86_64の64bit CPUは32bitのコードは動かしてくれる(*)ので、まずは pepper/cross の環境でcross した環境を、Nao体内へコピーして動くか。Pythonのコードは動くと思うけど、Cのコードが動くか?例えば、なんかのライブラリがありませんとか、セグフォするとか、そういう事が無いか確認しましょう。
*: 以下のように自分のPCでも確認できます
$ sudo apt install gcc-7-i686-linux-gnu
$ i686-linux-gnu-gcc -o hello hello.c
$ ./hello
hello world
今後、jsk_naoqi_robot/cross を NAOでも使えるといいなと思い、 現状のプログラムでどこを直したら良さそうか書いてみたのですが、 コンパイルして実機にコピーし、試す前に気をつけたら良さそうなことがございましたらご教示ください。
直したら良さそうな部分:
ロボット体内で立ち上げるプログラム (jsk_nao_startup.launchに直す必要がある) https://github.com/jsk-ros-pkg/jsk_robot/blob/master/jsk_naoqi_robot/cross/startup_scripts/start.sh#L7
引数 TARGET_ROBOT の変更 https://github.com/jsk-ros-pkg/jsk_robot/blob/master/jsk_naoqi_robot/cross/build_user.sh#L10-L12
pepper_meshes をコピーしている部分(nao_meshes もコピーする必要がある) https://github.com/jsk-ros-pkg/jsk_robot/blob/master/jsk_naoqi_robot/cross/build_user.sh#L44-L53
app_manager で立ち上がるPepper用に作ったアプリの画像コピー(多分そのままで大丈夫) https://github.com/jsk-ros-pkg/jsk_robot/blob/master/jsk_naoqi_robot/cross/install.sh#L87
確認が必要な部分: