加速度センサーについて

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

  • このトピックには6件の返信、2人の参加者があり、最後にohtakazukiにより4年、 6ヶ月前に更新されました。
7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • 投稿者
    投稿
  • #1239
    ohtakazuki
    参加者

    こんにちは!
    質問ばかりですみません。。。

    加速度センサーで揺れを検知したいのですが、上手く行きません。
    流れとしては、send_start_acc_sensorで測定を開始、
    1秒おきに「send_get_acc_sensor_state」で状態を確認
    papero_robot_message_recvの”Name”が”detectAccYaw”で来たら検知、
    だと思ったのですが、detectAccYawが返らず、getAccSensorStateResが続きます。
    何かヒントでも頂ければ幸いです。

    `
    # -*- coding:utf-8 -*-
    import sys
    import time
    from enum import Enum

    import pypapero

    class State(Enum):
    st0 = 0
    st1 = 1
    st2 = 2
    end = 999

    def main(papero):
    prev_detected = False
    last_time = time.monotonic()
    past_time = 0
    state = State.st0

    # 加速度センサー計測開始
    ret = papero.send_start_acc_sensor()
    ret = papero.send_set_acc_sensor_threshold(1100, 1030, 1, 2)

    while state != State.end:
    messages = papero.papero_robot_message_recv(1.0)
    now_time = time.monotonic()
    delta_time = now_time – last_time
    last_time = now_time
    if messages is not None:
    msg_dic_rcv = messages[0]
    else:
    msg_dic_rcv = None
    if papero.errOccurred != 0:
    print(“——Error occured(main()). Detail : ” + papero.errDetail)
    break

    if state == State.st0:
    papero.send_start_speech(“計測開始”)
    state = State.st1

    elif state == State.st1:
    past_time += delta_time
    if past_time > 1.0:
    # ret = papero.send_get_acc_sensor_state()
    past_time = 0
    if msg_dic_rcv is not None:
    print(msg_dic_rcv[“Name”])
    if msg_dic_rcv[“Name”] == “detectAccYaw”:
    if “Mode” in msg_dic_rcv:
    print(“検知:mode=” + msg_dic_rcv[“Mode”])
    elif msg_dic_rcv[“Name”] == “detectButton”:
    state = State.end

    # 加速度センサー計測終了
    ret = papero.send_stop_acc_sensor()

    if __name__ == “__main__”:
    papero = pypapero.Papero(“”, “”, “ws://192.168.2.1:8088/papero”)
    if papero.errOccurred == 0:
    main(papero)
    papero.papero_cleanup()

    0
    #1240
    ohtakazuki
    参加者

    すみません、ソースコードのインデントが解除されてしまったので、添付ファイルで再掲します。

    0
    #1241
    ohtakazuki
    参加者

    拡張子 py はダメなようでした。

    Attachments:
    You must be logged in to view attached files.
    0
    #1243
    takahashi@spi
    参加者

    いえいえご利用頂き本当にありがとうございます。

    この件は、大変申し訳ありません、現在WebSocket通信
    アドオンシナリオに、加速度センサーを使うのに必要な
    初期化処理が入っていません。
     リソースを消費するようなので、必要な場合だけ初期化する
    ようなうまい方法が無いか?というところで止まってしまって
    いました。
    早急に対応を考えますので少々お待ち下さい。
    明日中には一度状況をお知らせします。

    0
    #1244
    ohtakazuki
    参加者

    なるほど、了解しました。
    地震を検出できたら便利だなぁ、と思ってでした。
    ご検討ありがとうございます。よろしくお願いします。

    0
    #1251
    takahashi@spi
    参加者

    ひとまず良い方法が見つからないので、常に加速度センサーの
    初期化を行うバージョンのWebSocket通信アドオンシナリオを
    作りましたのでお試し下さい。
    申し訳ありませんが加速度センサーの初期化のために
    消費するリソースの影響などは評価出来ていませんので、
    よろしくお願いします。

    以下のコードで動作を確認しました。

    import sys
    import time
    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):
        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", "1", "10")
                    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"):
                            papero.send_start_speech("揺れを検知しました")
                        elif (mode == "LOST"):
                            papero.send_start_speech("揺れが収まりました")
    
        ret = papero.send_stop_acc_sensor()
    
    if __name__ == "__main__":
        papero = pypapero.Papero("", "", "ws://192.168.2.1:8088/papero")
        if papero.errOccurred == 0:
            main(papero)
        papero.papero_cleanup()
    
    • この返信は4年、 6ヶ月前にtakahashi@spiが編集しました。
    • この返信は4年、 6ヶ月前にtakahashi@spiが編集しました。
    Attachments:
    You must be logged in to view attached files.
    0
    #1259
    ohtakazuki
    参加者

    ありがとうございます。
    試してみます。

    0
7件の投稿を表示中 - 1 - 7件目 (全7件中)
  • このトピックに返信するにはログインが必要です。