Интеграция чтений гироскопа и акселерометра [дубликат]

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

14
задан Community 23 May 2017 в 11:57
поделиться

5 ответов

nBot, двухколесный балансировочный робот
Довольно много информации и ссылок о том, как этот автор решил решить проблему балансировки своего двухколесного робота.

3
ответ дан 1 December 2019 в 13:10
поделиться

Вы, кажется, имеете два (или три) отдельные проблемы здесь.

1. Вы действительно не понимаете фильтры Калмана и/или математику позади них. Это собирается сделать очень трудным правильно реализовать и использовать тот.

2. Вы, кажется, не понимаете базовую физику, вовлеченную в проблему. (Базовая физика означает лежать в основе физики, не простой физики, потому что это не просто.)

я предложил бы, чтобы Вы попытались использовать намного более простой интегратор, такой как Runga-Кутта 4, для которого можно найти много книг с примерами и реализации и использования. Это должно быть достаточно для этой проблемы. (Если клиент указал Kalman, запросите почему.)

Что касается того, почему проблема находится под ограниченным, мне кажется, что это не имеет никакого способа обеспечить, чтобы устройство было сохранено вертикально и никакой способ измерить фактическую ориентацию. Забудьте гироскоп в настоящий момент и предположите, что устройство не может быть повернуто о вертикальной оси. У Вас есть три акселерометра, по-видимому, для оценки положения в 3D. Таким образом, если Вы видите ускорение в направлении X, Вы увеличиваете оценку того, где Вы находитесь в направлении X. Точно так же, если Вы видите ускорение в направлении Z (который я приму, произошел), Вы увеличиваете оценку того, где Вы находитесь в направлении Z. Теперь поверните устройство немного, скажите 30 градусов об оси Y. Теперь, когда устройство думает, что Вы ускоряетесь вдоль направления X, устройство на самом деле ускоряется немного менее, чем обозначенный в X , и оно также ускоряется в направлении Z. Таким образом, Ваша оценка положения является теперь неправильной.

Вращения намного более трудно интегрировать (уравнения более "жестки", требуя, чтобы меньший временной интервал поддержал точность). Но они перенесут подобные проблемы с вычислительной техникой неправильных ответов, если устройство будет снабжено подсказкой (потому что устройство не может сказать, что снабжается подсказкой). Это будет думать, что вращение вокруг вертикальной оси больше или меньше, чем это на самом деле, потому что часть вращения на самом деле о другой оси (так же, как часть ускоряющей части приехала другая ось).

, Возможно, необходимо нанять консультанта (не, я не ищу задание) помогать Вам в формулировке математики.

7
ответ дан 1 December 2019 в 13:10
поделиться

Я нашел хорошие статьи об использовании акселерометров и гироскопов в навигации на этот блог . Часть на Kalman, фильтрующем, является немного туманной, но там, кажется, примеры кода.

Вы также найдете общие ресурсы на Kalman, фильтрующем в http://academic.csuohio.edu/simond/publications.html . Статья, отнесенная в (8) , является пользой, не слишком страшной, введение в математику позади фильтров Калмана.

3
ответ дан 1 December 2019 в 13:10
поделиться

Учитывая Ваш интерес к фильтру Калмана, возможно, Вы намереваетесь увеличить данные GPS с инерционными измерениями. О Вашем вопросе:

, "Как я пошел бы о кодировании фильтра для использования чтений акселерометра для калибровки гироскопа время от времени, когда система наклоняется так, ось гироскопа не коллинеарна с силой тяжести и поворачивается об оси гироскопа? Кажется, что должно быть достаточно информации, чтобы сделать это",

Это походит на gyrocompasing выравнивание. Принятие Вас делает заводскую калибровку и имеет единицу на месте размещения, Вы сможете независимо измерить выравнивание. Затем выполните выравнивающийся код, который Вы напишете и отступите систематическая ошибка гироскопа от различия между мерой и gyrocompased выравниванием.

, Если Вы хотите обновить дрейф гироскопа на лету, затем Вам будет нужен фильтр Калмана.

Насколько реализация идет, я рекомендую Главе 7, GPS и Инерционную Интеграцию из , Глобальная Системная Теория Положения и приложения vol 2 имеют превосходный фон по теме. Это имеет теорию и математику, но никакой исходный код.

4
ответ дан 1 December 2019 в 13:10
поделиться

Если вы разрабатываете для Propeller uController, то Parallax Object Exchange содержит некоторый код. Отличный вопрос; -)

1
ответ дан 1 December 2019 в 13:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: