As I Please

MTのいんすとーるの練習と、その他びぼうろく・・・

CC2650STK sensor.tag の accelerometer のデータがおかしい件

  • 投稿日:
  • by

CC2650STKの加速度計、x,y,z軸のデータ(ベクトル)の絶対値が どうも 2Gになる。
これは bluepy を使った場合にだけ発生しているようで、iOSのアプリではちゃんと 1.0G 程度の値になる。
CC2650STKのTIの wikiの 当該の場所を見るとGATTの設定で、rangeを 2G,4G,8G,16G の4通りが選択できるようになっている。またおのおのの軸は2byte=16bitで、-32767 ~ 32768 (sigined int?) の間の値が返ってくるようだ。
bluepy 附属の sensortag.py では、144行あたりでinit しているところで、

    def __init__(self, sensor_):
        self.sensor = sensor_
        self.bits = self.sensor.ACCEL_XYZ | self.sensor.ACCEL_RANGE_4G
        self.scale = 8.0/32768.0 # TODO: why not 4.0, as documented?
と、self.bits で rangeは 4Gの設定をしているつもりになっている。
でもって、データをdecodeするところでは、8.0/32768 の係数をかけている。
wikiには、range 4Gの場合には、
  case ACC_RANGE_4G:
    //-- calculate acceleration, unit G, range -4, +4
    v = (rawData * 1.0) / (32768/4);
    break;
となっている。こちらが正しいような。
bluepy でも
# TODO: why not 4.0, as documented?
と書いているけど修正していないようだ。
勝手に修正して
self.scale = 4.0/32768.0

で利用することに・・・

コメントする