Акселерометр слишком шумный - PullRequest
0 голосов
/ 20 марта 2019

Я работаю над групповым проектом по созданию робота, и мы пытаемся внедрить акселерометр, который выдает сигнал тревоги, если робот поднимается / толкается в пути. Прямо сейчас наш акселерометр очень шумный и не очень надежный. Может ли кто-нибудь указать мне правильное направление, как это исправить? Текущий код:

 def accel_alarm(self):
        cur_accel = self.read_smooth_accel()
        accel_x, accel_y, accel_z = cur_accel
        base_x, base_y, base_z = (-32, 31, 1075)  # values when robot is static
        if abs(accel_x - base_x) > 350 or abs(
                accel_y - base_y) > 350 or abs(accel_z - base_z) > 350:
            if not (self.alarm):
                self.send_alarm()
                self.alarm = True
                print(
                    "[accel_alarm] ALARM STATE " + str(accel_x) + " X " + str(
                        accel_y) + " Y  " + str(accel_z) + " Z")

    # Smooth accelerometer output by taking the average of the last n values
    # where n = len(self.accel_data)
    def read_smooth_accel(self):
        cur_accel, _ = self.accel.read()
        self.accel_data.pop()
        self.accel_data.appendleft(cur_accel)
        # For the first len(accel_data) values the average is not
        # representative - just return current value
        if [0, 0, 0] in self.accel_data:
            return cur_accel

        av_accel = [sum(i) / float(len(i)) for i in zip(*self.accel_data)]
        return av_accel

Второй метод - попытаться справиться с шумом, но он все еще не очень хорош ...

...