加速度センサーについて

アプリ開発に関する質問 加速度センサーについて

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

    いつも大変お世話になっております。

    PaPeRo iの加速度センサーを「WebSocket通信アドオンシナリオ+制御用Pythonライブラリ」の組合せで利用したいと思ったのですが、現在以下のような状況でエラーが起きております。

    ◆プログラムコード(抜粋)
    send_set_acc_sensor(“3000”, “0”, “2”)
    send_set_acc_sensor_threshold(“1200”, “1100”, “2”, “3”)
    send_start_acc_sensor()

    ◆現象
    “DETECT”,”LOST”イベントがそれぞれ1回発生するが、それ以降イベントが発生しない。

    ◆補足1
    PaPeRo i本体の
    /var/log/robotlog/messages
    を確認したところ、以下のようなログが1秒おきくらいに記録されていました。
    Dec 10 18:55:55 aterm user.err robot: accSensor_Init.c[808]accSensor_Task:[ERR] Accelerometer: shared memory push(32) failed (result= 0).
    Dec 10 18:55:56 aterm user.err robot: accSensor_Init.c[808]accSensor_Task:[ERR] Accelerometer: shared memory push(32) failed (result= 0).
    Dec 10 18:55:57 aterm user.err robot: accSensor_Init.c[808]accSensor_Task:[ERR] Accelerometer: shared memory push(32) failed (result= 0).

    ◆補足2
    バッファ容量の問題かと思い、send_set_acc_sensor()のメモリサイズを変更したところ、減らしても増やしても以下のようなエラーが/var/log/robotlog/messagesに記録されました。
    Dec 10 19:14:54 aterm user.err robot: accSensor_QueueIf.c[1219]accSensor_Queue_Open:[ERR] Accelerometer Queue-memory open: illegal size (8000).
    Dec 10 19:14:54 aterm user.err robot: acc_sensor.c[663]cmpCommand_startAccSensor:[ERR] Attach Queue-memory err (8000).
    ※バッファサイズ1000,2000,4000,12000でも同様でした。

    ◆環境
    アドオンシナリオは「v0_0_4a」を、PaPeRo i本体のファームウェアは「std_1_0_18.rom」「rg-dk20x_2_1_37-09.bin」を使用しております。

    お忙しいところ恐れ入りますが、もし何か情報等ございましたら、お教えいただけますと幸いです。
    よろしくお願いいたします。

    #1861
    takahashi@spi
    参加者

    こんにちは、いつも大変お世話になっております。

    試してみたのですが、今のところ現象を再現させられないでおります。
    こちらでは似たエラーは出ますがイベントは複数回発生します(30回以上確認)。

    使用しているパペロは「新型」ということでお借りしているもので、
    Webの管理画面のメンテナス-現在のファームウェアバージョンが
    2.1.37 _ papero – 09
    と表示され、sys_mgrのタイムスタンプが
    -rwxr-xr-x 1 root root 445669 Mar 16 2017 /Extension/robot_platform/bin/sys_mgr
    となっています。違いはありますでしょうか?

    エラーメッセージは少し違いがあり、
    Dec 12 11:38:23 aterm user.err robot: accSensor_Init.c[808]accSensor_Task:[ERR] Accelerometer: shared memory push(3) failed (result= 0).
    Dec 12 11:38:23 aterm user.err robot: accSensor_Init.c[808]accSensor_Task:[ERR] Accelerometer: shared memory push(2) failed (result= 0).
    Dec 12 11:38:23 aterm user.err robot: accSensor_Init.c[808]accSensor_Task:[ERR] Accelerometer: shared memory push(2) failed (result= 0).
    Dec 12 11:38:24 aterm user.err robot: accSensor_Init.c[808]accSensor_Task:[ERR] Accelerometer: shared memory push(2) failed (result= 0).
    Dec 12 11:38:24 aterm user.err robot: accSensor_Init.c[808]accSensor_Task:[ERR] Accelerometer: shared memory push(2) failed (result= 0).
    Dec 12 11:38:24 aterm user.err robot: accSensor_Init.c[808]accSensor_Task:[ERR] Accelerometer: shared memory push(2) failed (result= 0).
    の6行の繰り返しの様です。

    動作確認は以下のプログラムで行いました。
    お手数をおかけしますがこれでも同じ現象になるか
    ご確認いただけますでしょうか?

    # -*- coding:utf-8 -*-
    from enum import Enum
    
    import pypapero
    
    class State(Enum):
        set_acc_sensor = 1
        set_acc_sensor_threshold = 2
        start_acc_sensor = 3
        running = 4
        end = 999
    
    def main(papero):
        cnt = 0
        ret = papero.send_set_acc_sensor("3000", "0", "2")
        state = State.set_acc_sensor
        while state != State.end:
            messages = papero.papero_robot_message_recv(1.0)
            if papero.errOccurred != 0:
                print("------Error occured(main()). Detail : " + papero.errDetail)
                break
            if messages is None:
                continue
            msg_dic_rcv = messages[0]
            name = msg_dic_rcv["Name"]
            print(name)
            if name == "detectButton":
                state = State.end
            elif state == State.set_acc_sensor:
                if name == "setAccSensorRes":
                    papero.send_set_acc_sensor_threshold("1200", "1100", "2", "3")
                    state = State.set_acc_sensor_threshold
            elif state == State.set_acc_sensor_threshold:
                if name == "setAccSensorThresholdRes":
                    papero.send_start_acc_sensor()
                    state = State.start_acc_sensor
            elif state == State.start_acc_sensor:
                if name == "startAccSensorRes":
                    state = State.running
            else:
                if name == "detectAccYaw":
                    if "Mode" in msg_dic_rcv:
                        mode = msg_dic_rcv["Mode"]
                        print("検知:mode=" + mode)
                        if (mode == "DETECT"):
                            cnt += 1
                            papero.send_start_speech("揺れを検知{}回目".format(cnt))
                        elif (mode == "LOST"):
                            papero.send_start_speech("揺れが収まりました")
    
        ret = papero.send_stop_acc_sensor()
    
    if __name__ == "__main__":
        url = "ws://192.168.1.1:8088/papero"
        papero = pypapero.Papero("", "", url)
        if papero.errOccurred == 0:
            main(papero)
        papero.papero_cleanup()
    

    (IPアドレス直書きしていますのでご注意ください)

    • この返信は2年、 8ヶ月前にtakahashi@spiが編集しました。
    • この返信は2年、 8ヶ月前にtakahashi@spiが編集しました。
    #1882
    まつやま
    参加者

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

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

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

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

    #1892
    takahashi@spi
    参加者

    確かに、パラメータのせいなのか分かりませんが、結構揺さぶらないと検出してくれない感じがします。

    加速度センサーについてはイベントが使えるようになっているだけで、
    波形自体を解析できる様になっていませんし、やろうとするとデータ量が多くて難しいかも知れません。
    必要な機能について、ご要望やアイディアがあれば、お教えください。

    /var/log/robotlog/messagesや/var/log/messages*についてはtmpfs=RAMディスクで、古いデータは順次消してくれるようですので、
    NANDフラッシュメモリの寿命やメモリ不足の心配は無いと思いますが、必要なログが埋もれたり流れてしまうので嫌ですね。
    ちょっと先になってしまいそうで申し訳ないのですが、なんとかできないか調べてみます。
    今回も貴重な情報ありがとうございました。

    #1922
    takahashi@spi
    参加者

    加速度データを読み捨ててエラーログが出ないようにしたWebSocket通信アドオンシナリオ暫定版を作成しましたのでお試し下さい。

    • この返信は2年、 7ヶ月前にtakahashi@spiが編集しました。
    Attachments:
    You must be logged in to view attached files.
5件の投稿を表示中 - 1 - 5件目 (全5件中)
  • このトピックに返信するにはログインが必要です。