Pepperアプリ2.5.5系開発時の「ちょっと困った」対応方法＋基礎知識まとめ

自分用忘備録です。
よく使うことのコピペ用・ど忘れした時用・最初から知ってたら便利だったなと思ったこと等。
Pepper開発で初めてMacを触った人向けのドがつくほどの初歩も普通に掲載しています。
開発前に知っておけば苦労しなかったのに！！！！！と思うことが本当に多かったからです……。
なので公式のDocumentに書かれていたりすることや初歩や初歩のことでも、出典を探す手間を省くために記述していますがお気になさらずどうぞ。

# 基礎
## ターミナルからPepperに接続（Mac）
　(1) ターミナルを起動する
　(2) コマンド実行 `ssh nao@pepper.local`
 ※pepper.localはIPアドレスに対応

## Pythonボックスの言語
Python2.7を使ってるみたいなので、Python3系を書くともれなく困惑します。
（どうでもいいことですがPython初心者の頃の私は空白/タブの階層が大事だと知らずに死にました）

# Choregraphe関連
## Choregrapheの最大化ができなくなった時の回復方法(Mac)
参照:[【Pepper】Choregrapheで終了・最大化・最小化ボタンが表示されない問題の解決法](https://qiita.com/tetsufe/items/fd6ee5eb575a630f351d)
Choregrapheを終了後ターミナルを起動し、以下のコマンドを実行する。

`rm ~/Library/Preferences/com.aldebaran-robotics.www.Choregraphe.plist
`

（この不具合は最大化で使っていると起きているようなので、いっそ最大化しないで使うのが吉かもしれないです。体感で恐縮ですが、開発時は最大化で作業していても、最大化を解除した後でウィンドウを閉じるようにしたことで、当現象との遭遇率は減った気がしています。）


## Choregrapheになかなか接続したいPepperが出てこなくなったとき(Win)
WindowsでChoregrapheを開いたり閉じたりすると、「PC名.local」っぽい接続先が量産されてしまい、接続したいPepperの名前が一覧に表示されなくなるようです。
以下、「Choregraphe2.5.5のプロセスが溜まって困った時の処理(Win)」の参照記事に則り対応すると解決するはずです。
（難しいことよくわかんないよってなったらPCを再起動しちゃえば解決します。強引ではありますが。）

## Choregraphe2.5.5のプロセスが溜まって困った時の処理(Win)
参照:[Choregraphe 2.5.5 (win) のプロセス終了スクリプト(vbs)](https://qiita.com/HiroyukiYasui/items/94fd05458e56ab90dd76)
参照記事に則り対応。

## Choregraphe経由でのファイルの送受信
・Pepper本体に接続後、上部メニュー→［接続］→[アドバンスト]→[ファイルの転送]を選択
・パスワードの要求をされたらPepperのパスワードを入力する
・ファイルはまとめて転送できないのでひとつひとつ送る必要がある
・フォルダの作成、ファイルの削除は右クリックメニューから行える
・フォルダの作成が行えるのは一番上の階層のみの様子
(→Pepperとのファイルの送受信はCyberduckを使うと簡単)

## デバッグ時のインストールとディスプレイからのアクセスとか
※pepper.localはIPアドレスに対応（前提）
■F5ボタンの「アップロードして再生」（上部メニューの緑の三角ボタン）に対応するのが
`http://pepper.local/apps/.lastUploadedChoregrapheBehavior/`
■「ロボアプリ一覧」パネルの「現在のプロジェクトをロボットにインストール」に対応するのが
`http://pepper.local/apps/hogehoge/`（hogehoge:アプリID）
（アプリIDは「プロジェクトファイル」パネル内→「プロパティ」ボタン→アプリケーションIDの項目を参照）
・インストールを行う際、同名のアプリが存在している場合は選択して同パネル内ゴミ箱アイコンをクリックし削除、または該当のアプリの右クリックメニューから削除をしておくこと。
・アプリの再生は「ロボアプリ一覧」パネルにインストールされたアプリ名をクリックし表示される、「behavior_1/behavior.xar」の横の再生ボタン（緑色の三角をしたボタン）をクリックで再生できる。
・インストールしたアプリのアプリIDがlastUploaded〜かhogehogeか等わからなくて困った時は、「ロボアプリ一覧」パネルで該当のアプリ名を選択した状態で「インスペクタ」パネルの「Uid」を見るか、「ロボアプリ一覧」パネルで該当のアプリを右クリックでメニューを表示し、「アプリケーションIDをコピー」を選択してどこかに貼り付けてみればわかる。

## アプリが再生できない・停止できないで困ったとき
「ロボアプリ一覧」パネルで再生していたアプリを選択し、ゴミ箱アイコンをクリックして該当のアプリを削除すると停止できたりする、かもしれない。（症状に寄るので必ずしもではない。）
※上部メニューの再生ボタンマークからアプリを再生した場合は、「.lastUploadedChoregrapheBehavior」という名称になる。「ロボアプリ一覧パネル」より「現在のプロジェクトをロボットにインストール」でインストールした際は、プロジェクトのアプリ名が該当のアプリとなる。
アプリ起動がどうしても駄目ならいっそPepperを再起動する。

## behaviorが反応してくれない/ボックスを編集したはずなのに保存されない
Choregrapheを一度閉じて開き直すと解決する。（他に方法があるのなら知りたい。）

## プロジェクトファイルを開く時の話
Choregraphe起動→ファイルを開く、の手順を遵守すること。
フォルダまたはFinderから直接該当のプロジェクトファイルを開くと、更新・追記したファイルをうまく読み取ってくれないことがある。

## Choregrapheが起動しているのに窓が行方不明のとき（Mac）
Choregrapheを最小化して行方不明にしてしまったとき（起動しているけど窓が見つからなくなってしまったとき）は、MacのDock（画面下のアイコンが並んでいるところ）を右クリック→すべてのウィンドウを表示、を選択すると見つかる。

## Choregrapheの別Projectからのボックス移植について（Mac）
①移植先のプロジェクトと、移植元のプロジェクトを、Finderで開く。
②移植元のプロジェクトから、コピーしたいボックスの存在する「behavior.xar」を含んでいる「behavior_1」フォルダ（リネーム後は該当名に沿う）をコピーする。
③移植先のプロジェクトに対し「behavior_1」をコピーする。その際、既に同名のフォルダが存在していたら、フォルダ名は変更しておく。
④Choregrapheで開いて編集する。
WindowsだとChoregrapheを複数窓で開けば解決するのに……と思いつつボックスライブラリを利用したりしつつ大分面倒な思いを強いられたので早めに知りたかったです。私情です。


# Pepper関連
## Pepperとのファイルの送受信について
参照:[【初心者向け】Cyberduck（サイバーダック）の使い方](https://techacademy.jp/magazine/1668)
・Cyberduck（ほかFTPソフト）を利用してやり取りすると楽
・新規接続での設定は以下
![サイバーダック02.png](https://qiita-image-store.s3.amazonaws.com/0/174363/efb34b3a-ff77-2787-6e40-92ed680b9769.png)
・接続後、アクションアイコンのメニューから新規ブックマーク登録をしないと毎度新規接続から接続情報を入力する必要が出て大変

## Pepperのログを取得したい
`/var/log/naoqi/servicemanager/system.Naoqi.log`
・ssh接続で取るかCyberduckで取るかする
・時間の解読が大変なので参照:[Unixtime相互変換ツール](http://tool.konisimple.net/date/unixtime)

## Pepperのログを書きたい
→ログビューアに表示させるログなら
`self.logger.info("ここにログ")`
みたいに書く。

## Pepperが日本語を喋らなくなった
・長押し起動（電源を切った状態で胸部ボタンを5秒長押しし、LED（肩）が青く点灯したら胸ボタンから指を離す）してみる
・設定画面を開いてみて、言語設定を確認する
・設定画面を開いてみて、アップデートが届いていないかを確認する


## Pepperが発話してくれない
参照:[Pepperが突然しゃべらなくなった時の原因メモ](https://qiita.com/tickat/items/e12e4068ad1aa9ee9add)
参照先のどれかに引っかかっている可能性が高いと思う。
2.5.5以降で台詞を変更したはずなのに元の台詞でお話してしまうのはtranslationsフォルダ内の翻訳ファイルが更新されていなかったからだったような気がするものの、対応方法は忘れたので原因に遭遇したら追記します……。


## 発話調整に関して
参照:[【速報】Pepperの発声APIが追加されたらしい【Say】](http://www.baku-dreameater.net/archives/7871)
まだ続報待ちなのかなと思うのですが覚書として。

## グローバル変数みたいなものがほしいとき
「ALMemory」を使う。
Choregrapheの「Memory」フォルダに標準で用意されているボックスを使う。
もしくは、pythonボックスの「def onLoad(self):」あたりに「self.memory = ALProxy("ALMemory")」を記述して以下。
■読むだけ
hogehote = self.memory.getData("hogehoge/hensu1")
■書くだけ
self.memory.insertData("hogehoge/hensu1", "書きたいこと")
■イベント発行
self.memory.raiseEvent("hogehoge/hensu1", "書きたいこと")

イベント発行とはなんぞや？発行したあとどうすりゃいいんだ？というかた向け知識は以下
参照:[Pepper / Subscribe to EventとRaise Eventについて](https://qiita.com/G-angle/items/12ac9e3dc3f17a9a79d5)

##アプリ内でPepperのIPアドレスを取得したいとき
参照:[PepperのローカルIPアドレスの取得方法](https://community.ald.softbankrobotics.com/en/node/5220)

```
import socket
ipaddr = [(s.connect(('8.8.8.8', 80)), s.getsockname()[0], s.close()) for s in [socket.socket(socket.AF_INET, socket.SOCK_DGRAM)]][0][1]
```
上記コードで取得できる。
ネットワークが繋がっていない状態で上記コードを呼ぶとエラー落ちするので注意。

##Try-Catchの書き方
```
 try:
　　ここに処理
 except Exception as e:
　　ここにエラー処理
```
何かこんな感じの……。「Python　例外処理」でいっぱい引っかかるはず。


##QRコードを作成してディスプレイに表示したいとき
参照:[QRコードのディスプレイ表示](https://qiita.com/Atelier-Akihabara/items/ea61372443ac969fa9d4)
参照記事に則り作成する。

# タブレット関連
## PepperのディスプレイをPC側から表示する
ブラウザを開き以下のアドレスにアクセスする。
`http://pepper.local/apps/.lastUploadedChoregrapheBehavior/`
※pepper.localはIPアドレスに対応
※.lastUploadedChoregrapheBehaviorはアプリケーションIDに対応。「
`http://pepper.local/apps/hogehoge/`」とか。
おまけ:ウェブブラウザ起動中、MacならCommand+Option+I、WinならF12でコンソール画面が開ける
更におまけ:Pepperのタブレットのデザインに使うHTMLを組む時に使うエディタは、Adobe Systems製のフリーのエディタ、「Brackets」がおすすめ。

## Pepperのディスプレイのスクリーンショットを撮る
参照:[Pepperディスプレイのスクリーンショットを取得](https://qiita.com/black_pepper/items/732b61088dc2a74ff6cd)
SSHクライアントからPepperにログインし、以下のコマンドを実行する。
`/opt/aldebaran/var/www/apps/j-tablet-browser/adb shell screencap -p | sed 's/\r$//' > ~/display.png`

## タブレットのネットワークが想定と違っているとき
あるいはタブレットのネットワークが正常につながっているか確認したいとき
　1.　「ネットワーク診断」アプリを開く
　2.　「Pepper」もしくは「ディスプレイ」という表記の横に「未接続」という文言が表示されているか確認する
　3.　表示されていたら、「ネットワーク修正」という表記があるので、Wifiの再設定を行う
おまけ：他の方法で試されていた方のリンクは以下
[キノコ困った Pepperのタブレットが期待のWiFiに接続されていない](https://qiita.com/h2m_kinoko/items/2aedac1046653eb76f07)