フォーラムへの返信

10件の投稿を表示中 - 1 - 10件目 (全10件中)
  • 投稿者
    投稿
  • #3497
    まつやま
    参加者

    takahashi様

    こんばんは。ご丁寧なご返信ありがとうございます。

    そうですね、NECプラットフォームズさまに、今度聞いてみようと思います。

    ちなみに、弊社のパペロで試したところでは、約1万字のテキスト(「我が輩は猫である」の一部)を40分くらいかけて喋ることができました。
    古い表現が多い文章ですが、まあまあ良い具合に、読みこなしておりました。

    ピッチ50くらいの低い声は、ご高齢者に需要があるのですが、声を低くすると可愛さも失われてしまうので、なかなか悩ましいところではあります。

    ご回答ありがとうございました。
    またよろしくお願いいたします。

    #2497
    まつやま
    参加者

    こんにちは。
    さっそくご返信ありがとうございます。

    なるほど・・・たぶんセンサー自体(もしくはPaPeRo内のドライバ)も
    そのように数値変化を見て判定しているのだと思いますが、
    そこで独自のロジックを作るというのは面白そうですね。

    機械学習はちょっと私にはまだ敷居が高そうですので、
    まずは人力学習で、たくさんデータを取って何か法則性があるのか見てみたいと思います。

    ご助言ありがとうございました!

    #1882
    まつやま
    参加者

    さっそくお返事ありがとうございます。
    ファームウェアのバージョンと、sysmgrのタイムスタンプは同一でした。

    お送りいただいたテストプログラムを試したところ、正常にDETECT,LOSTが検出されました。
    その後、こちらで作ったプログラムを再度試したところ、やはり正常にDETECT,LOSTが複数回検出されました。
    お騒がせして、大変申し訳ございません。

    私のテストの仕方がまずかったようで、PaPeRo i本体を強めにゆさぶると検出されました。
    頑丈なOAデスクに乗せていたせいか、机を叩くぐらいではうまく振動が起こせなかったようです。
    人間の転倒を検知するセンサーに使いたいと考えていたのですが、設置場所の材質にも左右されるので、パラメータの調整がなかなか難しそうですね。

    PaPeRo i本体の/var/log/robotlog/messagesに同一エラーがえんえんと記録されるのが気になるところですが、/varはtmpfsを
    使っているので、NANDフラッシュメモリの寿命は気にしなくても大丈夫でしょうか?

    #1669
    まつやま
    参加者

    ご対応、誠にありがとうございました。

    最新版のアドオンシナリオ(v0.0.4)と、最新のpypapero.py(Ver.1.01)を試しておりますが、問題無く稼働しております。

    また何かありましたら、よろしくお願いいたします。

    #1489
    まつやま
    参加者

    こんにちは。

    続報…というほどではないですが、WebSocketの切断が確実に完了するように、というおまじないとして
    pypapero.pyの108行目
    papero.ws.close()
    の下に
    time.sleep(3)
    を入れてみたところ、今のところ調子よく切断→再接続できるようになっております。

    RaspberryPi側から切断のリクエストを出したあと、PaPeRo i側から切断の返事を受け取るようになったため?かどうか分かりませんが、とりあえずご報告でした。

    #1488
    まつやま
    参加者

    こんにちは。まつやまと申します。

    PaPeRo iはコマンドを非同期で実行しますので、それが便利なときもあれば、思わぬ副作用をもたらすこともありますよね。
    私もときどきそれを忘れて、不可解なバグに悩まされることがあります。

    PaPeRo iがしゃべり終わってから次の動作を実行させるには、以前このフォーラムに掲載された

    PaPeRoにおける終話検知について


    というトピックが参考になるかと思います。

    関数内でローカルなイベントループを作り、send_get_speech_status()を送って結果がgetSpeechStatusRes.Return == 0になるまで繰り返すという方法なら、文章の長さにかかわらず、音声合成が終わるまで待つことができます(少しタイムラグが発生しますが)。

    かなり端折った書き方ですが、

    def wait_until_end_of_speech():
    send_get_speech_status()
    while True
    msg = papero_robot_message_recv(0.5)
    if msg[‘Name’] == ‘getSpeechStatusRes’:
    if msg[‘Return’] == 0:
    # 発話終了
    break
    else:
    # 発話継続中…再チェック
    sleep(0.5)
    send_get_speech_status()
    else:
    # getSpeechStatusRes以外のメッセージは破棄(要検討)

    speech()
    wait_until_end_of_speech()
    record()

    みたいなイメージです。
    実際には、適度にsleepを入れたり、一定時間経過したら強制的にループを抜けるようにした方がよいと思います。
    こういうやり方がベストかどうかは、分かりませんが…(^_^;)

    なにか参考になりましたら幸いです。

    #1480
    まつやま
    参加者

    takahashi様

    さっそくお返事ありがとうございます。

    WebSocket接続に失敗するときは、PaPeRo i本体も調子が悪いようで、しばらく放っておくとPaPeRo iのロボットサービス(?)が再起動します。(首が上下に動いて定位置に戻り、起動音が鳴ります)
    そうすると、再びWebSocket接続もできるようになります。

    デバッグ用の情報につきましては、環境を作ってご提供できればと思いますが、とりいそぎ、接続失敗時のPythonのコンソール出力を以下に添付いたします。

    Error in connect_paperoi():<class ‘ConnectionRefusedError’>[Errno 111] Connection refused(111, ‘Connection refused’)Traceback (most recent call last):
    File “/home/pi/ancloud/r9paperoi.py”, line 33, in connect_paperoi
    papero = pypapero.Papero(r9glob.simulator_id, r9glob.robot_name, r9glob.ws_server_addr)
    File “/home/pi/ancloud/pypapero.py”, line 198, in __init__
    self.ws.connect()
    File “/usr/local/lib/python3.4/dist-packages/ws4py/client/__init__.py”, line 215, in connect
    self.sock.connect(self.bind_addr)
    ConnectionRefusedError: [Errno 111] Connection refused
    (「r9paperoi.py」「connect_paperoi」はこちらで自作したものです。)

    このとき、PaPeRo i本体側でnetstat -anしてみると、ポート8088でLISTENしているソケットが無くなっているようでした。
    エラー時刻周辺の/var/log/robotlog/messagesは以下の通りです。
    Sep 14 00:05:30 aterm user.notice robot: speech.cpp[1050]startSpeech:[IN ]
    Sep 14 00:05:30 aterm user.notice robot: speech.cpp[1257]startSpeech:[OUT] 0
    Sep 14 00:05:35 aterm user.err robot: sce_websocket.cpp[702]scenarioSendCommandEx:[ERR] Fail To Send Command Message
    Sep 14 00:05:35 aterm user.err kernel: [ 1952.116686] i2c-mcp2221 3-1.2.1:1.2: mcp2221(ll): wait interrupted
    Sep 14 00:05:35 aterm user.err kernel: [ 1952.123031] i2c-mcp2221 3-1.2.1:1.2: mcp2221(ll): wait interrupted
    Sep 13 15:05:35 aterm user.err kernel: [ 1952.129464] i2c-mcp2221 3-1.2.1:1.2: mcp2221(ll): wait interrupted
    Sep 14 00:05:35 aterm user.err kernel: [ 1952.135830] i2c-mcp2221 3-1.2.1:1.2: mcp2221 wait_event_interruptible ERROR
    Sep 14 00:10:01 aterm user.notice root: systemmanager not exist
    Sep 14 00:10:01 aterm user.err root: systemmanager not exist
    Sep 14 00:10:04 aterm user.notice root: S98-sound-ctrl stop
    Sep 14 00:10:04 aterm user.notice root: firmware_reset

    現象の再現方法としては、たとえばsend_start_speech()で発話している最中に、PythonスクリプトをCtrl+Cで強制的に止めると、だいたい再現します(RaspberryPi上で実行しているとき)。

    とはいえ、開発時にちょっと困ることがあるくらいで、リリース版ではスクリプトをCtrl+Cで止めるといったこともありませんので、急ぎ解決しなければならない問題でもございません。

    お手すきのときにでも、ちらっとご確認いただけますと幸いです。
    よろしくお願いいたします。

    #1473
    まつやま
    参加者

    貴重な情報ありがとうございます。

    なるほど…Webの管理画面で設定した内容は、そうやって保存されているのですね。

    実際には、ビジネスパートナーさんにPaPeRo iのセットアップを行っていただく際にここまでお願いするのは大変かもしれませんが、デモ等で自社で使うときには、設定変更の方法が分かっているとなにかと便利かもしれません。

    ともあれ、なんとかRaspberryPi + モバイルルータという組合せで運用できそうな見通しができました。

    ちなみに余談ですが、エレコムの700-BTL017BKというDC出力付きのモバイルバッテリーでPaPeRo iに給電できたので、電源の取れない場所でデモをするときなどに便利です。

    どうもありがとうございました。
    引き続き、どうぞよろしくお願いいたします。

    #1469
    まつやま
    参加者

    自己レスです。
    ネットでLinuxのIP MASQUERADEの設定を調べ、以下のスクリプトを実行したところ、無線子機モードでLAN<=>WAN間が繋がるようになりました。(何かセキュリティ上の不備があるかも分かりませんが…)
    ————————–
    # LAN側を192.168.2.0から192.168.123.0に変更
    ifconfig br0 192.168.123.1 netmask 255.255.255.0 broadcast 192.168.123.255

    # IP MASQUERADE設定
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -F
    iptables -A FORWARD -i br0 -o ath0 -s ‘192.168.123.0/24’ -j ACCEPT
    iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
    iptables -t nat -A POSTROUTING -o ath0 -s ‘192.168.123.0/24’ -j MASQUERADE
    iptables -A OUTPUT -o ath0 -d 10.0.0.0/8 -j DROP
    iptables -A OUTPUT -o ath0 -d 176.16.0.0/12 -j DROP
    iptables -A OUTPUT -o ath0 -d 127.0.0.0/8 -j DROP
    ————————–
    上記スクリプトを
    /Extention/script/S98-enable-lan
    という名前で作成し、実行権を付けて、今のところうまく動いております。

    ただ、PaPeRo i上のLAN向けDHCPサーバ(dnsmasq)は未だに192.168.2.0の範囲で割当てを行っているようで、LANポートに繋がるPCは手動で192.168.123.100などのIPアドレスを設定しています。

    (余談)
    PaPeRo iの/etc配下にある設定ファイルは、書き換えても再起動すると元に戻ってしまうようですが、どこか別の場所にオリジナルのファイルがあるのでしょうか?

    #1468
    まつやま
    参加者

    松山です。
    さっそく、ご丁寧なご返信ありがとうございます。

    すみません、再度試して確認したところ、起きている現象は
    「LANポートに繋いだPC(やRaspberryPi)と、PaPeRo i間の通信ができない」
    ではなく、
    「LANポートに繋いだPC(やRaspberryPi)が、インターネットに出られない」
    というものでした。

    PaPeRo iを無線子機モードにしてスマフォのテザリングに接続したあと、PaPeRo iのLANポートに繋いだノートPCから試したところ、DNSによる名前解決まではできるものの、インターネット上のホームページ(www.yahoo.co.jpなど)にアクセスできませんでした。(応答がありません、というエラー)

    「無線子機」モードの場合は、ゲートウェイとしてLAN<=>WAN間を繋ぐ機能が働かなくなっているのでしょうか?

    重ねての質問で恐縮ですが、もしご存じでしたらご教示いただけると幸いです。
    よろしくお願いいたします。

10件の投稿を表示中 - 1 - 10件目 (全10件中)