› アプリ開発に関する質問 › 加速度センサーについて
- このトピックには4件の返信、2人の参加者があり、最後にtakahashi@spiにより3年、 1ヶ月前に更新されました。
-
投稿者投稿
-
2017年12月12日 12:19 AM #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」を使用しております。お忙しいところ恐れ入りますが、もし何か情報等ございましたら、お教えいただけますと幸いです。
よろしくお願いいたします。02017年12月12日 11:57 AM #1861こんにちは、いつも大変お世話になっております。
試してみたのですが、今のところ現象を再現させられないでおります。
こちらでは似たエラーは出ますがイベントは複数回発生します(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アドレス直書きしていますのでご注意ください)
- この返信は3年、 1ヶ月前にtakahashi@spiが編集しました。
- この返信は3年、 1ヶ月前にtakahashi@spiが編集しました。
02017年12月14日 1:28 AM #1882まつやま参加者さっそくお返事ありがとうございます。
ファームウェアのバージョンと、sysmgrのタイムスタンプは同一でした。お送りいただいたテストプログラムを試したところ、正常にDETECT,LOSTが検出されました。
その後、こちらで作ったプログラムを再度試したところ、やはり正常にDETECT,LOSTが複数回検出されました。
お騒がせして、大変申し訳ございません。私のテストの仕方がまずかったようで、PaPeRo i本体を強めにゆさぶると検出されました。
頑丈なOAデスクに乗せていたせいか、机を叩くぐらいではうまく振動が起こせなかったようです。
人間の転倒を検知するセンサーに使いたいと考えていたのですが、設置場所の材質にも左右されるので、パラメータの調整がなかなか難しそうですね。PaPeRo i本体の/var/log/robotlog/messagesに同一エラーがえんえんと記録されるのが気になるところですが、/varはtmpfsを
使っているので、NANDフラッシュメモリの寿命は気にしなくても大丈夫でしょうか?02017年12月14日 5:15 PM #1892確かに、パラメータのせいなのか分かりませんが、結構揺さぶらないと検出してくれない感じがします。
加速度センサーについてはイベントが使えるようになっているだけで、
波形自体を解析できる様になっていませんし、やろうとするとデータ量が多くて難しいかも知れません。
必要な機能について、ご要望やアイディアがあれば、お教えください。/var/log/robotlog/messagesや/var/log/messages*についてはtmpfs=RAMディスクで、古いデータは順次消してくれるようですので、
NANDフラッシュメモリの寿命やメモリ不足の心配は無いと思いますが、必要なログが埋もれたり流れてしまうので嫌ですね。
ちょっと先になってしまいそうで申し訳ないのですが、なんとかできないか調べてみます。
今回も貴重な情報ありがとうございました。02017年12月21日 7:18 PM #1922加速度データを読み捨ててエラーログが出ないようにしたWebSocket通信アドオンシナリオ暫定版を作成しましたのでお試し下さい。
- この返信は3年、 1ヶ月前にtakahashi@spiが編集しました。
Attachments:
You must be logged in to view attached files.0 -
投稿者投稿
- このトピックに返信するにはログインが必要です。