Да, все верно. Собирался калибровать шашечками как раз.
Про введение коэффициентов руками не думал. Спасибо за идею. Я попробую сначала с помощью распечатки шахматной доски, а потом руками посчитать. Имея предварительные параметры примерно будет понятно, что должно быть на выходе.
Вы все правильно говорите. У меня именно так и сделано. Я не акцентировал, на видео видно условную линию горизонта пунктирную. Я планирую горизонт сделать динамическим в следующей версии, по датчику наклона, пока он в статике.
Так же я отсекаю снизу часть картинки, где область непосредственно перед катером и ее обрабатывать уже бессмысленно, на траекторию не влияет.
Сейчас мне мешает «рыбий глаз» камеры. Можно заметить, где искажение больше, там шумы выше, они хуже поддаются фильтрации. Буду брать камеру без fish eye или исправлять картинку соответсвующим алгоритмом.
Спасибо за пояснение. Если метод точнее, то есть смысл разобраться. Сейчас в пределах 5% погрешность измерения. Пока приемлемо, я стараюсь не опускать емкость LiPo аккумуляторов ниже 20%
Сам алгоритм находит грани объектов и может применяться на других платформах. Я дополнил его возможностью адаптивной смены параметров(при множественных шумах снижаю чувствительность, если условия лучше - чувствительность повышается). Можно поставить на радиоуправляемую машинку, я катал катер на подставке по полу: препятствия видит, от собаки уворачивается. :) это если на плоскости.
Не вижу большой проблемы добавить ещё одну ось: руль высоты. Просто в дополнение к оси Yaw надо будет просчитывать дополнительные траектории по оси Pitch и их весовые коэффициенты для выбора наиболее безопасного направления в воздухе.
Думал. Но мне больше всего мешают водоросли, палки и прочий мусор который плавает на поверхности воды. Здесь воксельная карта, к сожалению, не поможет.
Я правильно понимаю, что при некоторых углах поворота можем получить обратный эффект? Помехи останутся, а полезная информация скроется? Как фильтр и экран телефона, к примеру? Ещё, как по вашему, нужно менять угол фильтра если мы плыли и солнце было справа, а обратно - солнце слева?
Нет. Такого фильтра у меня нет. Вы имеете в виду, что-то вроде стёкла темных поляризационных очков? Могу только предположить, что нужный эффект не дадут: плавая на лодке в таких очках, вы все равно будете видеть рябь на воде. А математический фильтр работает с черно-белым изображением и его градиентами. Причём области градиентов можете задавать самим. Не каждый параметр степени градиента даёт нужный результат.
Согласен. В широком плане такой помощник мог бы много кому пригодиться. Не обязательно как самостоятельный автопилот, а как дешевый ассистент безопасности.
Честно говоря, именно это я пытался сделать изначально: построить 3д сцену. Искал характеристики камеры, вводил near, far, FOV...
Все что смог посчитать: угол. Понял, что с одной камерой больше не получится ничего сделать. Хотя мне очень, очень хотелось узнать расстояние и скорость объекта на экране.
В результате, пришёл к таким же выводам: задача компромиссная, буду рисовать границы приближающегося объекта и избегать их. Это уже значительно повысит "живучесть" дрона во время движения по маршруту.
Вообще, ваша аналогия с парктроником очень точная.
Ещё я понял, что скорости объектов мне не особо и нужны. Испытываю катер я в безлюдном месте, что логично для механизма, который в любой момент может стать неуправляемым. Препятствия или находятся на месте(растительность) или являются тихоходными (дрейфуют по течению). Тут по аналогии с мотоциклистом в потоке машин, когда он, фактически принимает их за стоячие, несмотря на то, что они все-таки движутся.
Ага. Видел подобную статью, там с самолетом и камерой для определения скорости относительно земли, зная его высоту. К сожалению, не понял как мне это можно использовать. Если бы у меня камера висела на известной высоте, и на экране был катер и искомый объект, то задача решается просто. А у нас камера на катере в плоскости земли пишет. Другая картина получается.
Мне нравится с вами дискутировать, вижу, что здорово разбираетесь в вопросе.
Я как раз упражнялся с этим. У меня другие результаты получались с размерами. Представьте плывущую баржу и бутылку рядом с ней. На горизонте баржа будет в виде пикселя 1x1, бутылку не видно ещё: 0x0
Теперь мы сблизились с ними максимально, скорость по отношению к ним у нас одна и та же. Баржа занимает весь экран: 640x480, бутылка пусть например: 4x5
Размер в проекции экрана нарастал нелинейно, или я вас неправильно понял?
Но, я с вами согласен, что можно делить экран на зоны, только я ещё вектор сближения хотел учитывать: пересекает он корпус катера или пройдёт мимо.
И ещё было упражнение у меня такое. Разместил камеру на высоте корпуса катера, а перед ней рулетку растянул и сделал фото. И результат был, что-то вроде такого: первые 50-60 см хорошо укладываются в пиксели, 1-1,5 м ещё туда-сюда, все что свыше уже сливается в одну линию на экране.
А что будет быстрее увеличиваться: большое препятствие или малое?
Например, спичечный коробок или огромный лайнер. Как можно посчитать скорость сближения? Для простоты примем нашу скорость за 0. Пусть препятствие на нас движется. Вот этот момент меня смущает. Мы же не знаем размер объекта на горизонте. Почему он увеличивается на экране быстрее: он крупный или быстрый?
На близких расстояниях уже не успеваю среагировать. В моём примере камера слишком низко расположена: если препятствие далеко - погрешности большие, если близко - уже поздно маневрировать. Надо камеру выносить выше и угол настраивать, чтобы на экране было максимум полезной площади. Вот беда, не сезон сейчас, могу только теоретически предполагать.
Отлично!
Спасибо за совет.
Да, все верно. Собирался калибровать шашечками как раз.
Про введение коэффициентов руками не думал. Спасибо за идею. Я попробую сначала с помощью распечатки шахматной доски, а потом руками посчитать. Имея предварительные параметры примерно будет понятно, что должно быть на выходе.
Вы все правильно говорите. У меня именно так и сделано. Я не акцентировал, на видео видно условную линию горизонта пунктирную. Я планирую горизонт сделать динамическим в следующей версии, по датчику наклона, пока он в статике.
Так же я отсекаю снизу часть картинки, где область непосредственно перед катером и ее обрабатывать уже бессмысленно, на траекторию не влияет.
Сейчас мне мешает «рыбий глаз» камеры. Можно заметить, где искажение больше, там шумы выше, они хуже поддаются фильтрации. Буду брать камеру без fish eye или исправлять картинку соответсвующим алгоритмом.
Звучит здорово. Я уже почитал про фильтры и заказал на али CPL фильтр от GoPRO. Надеюсь поможет. Спасибо!
Спасибо за пояснение. Если метод точнее, то есть смысл разобраться. Сейчас в пределах 5% погрешность измерения. Пока приемлемо, я стараюсь не опускать емкость LiPo аккумуляторов ниже 20%
Сам алгоритм находит грани объектов и может применяться на других платформах. Я дополнил его возможностью адаптивной смены параметров(при множественных шумах снижаю чувствительность, если условия лучше - чувствительность повышается). Можно поставить на радиоуправляемую машинку, я катал катер на подставке по полу: препятствия видит, от собаки уворачивается. :) это если на плоскости.
Не вижу большой проблемы добавить ещё одну ось: руль высоты. Просто в дополнение к оси Yaw надо будет просчитывать дополнительные траектории по оси Pitch и их весовые коэффициенты для выбора наиболее безопасного направления в воздухе.
Не умею просто. Я же программист по профессии. :) Шунт же тоже как-то надо к raspberry подключать. АЦП надо для него, я не уверен?
Я старался сразу одним АЦП решить свою проблему.
Думал. Но мне больше всего мешают водоросли, палки и прочий мусор который плавает на поверхности воды. Здесь воксельная карта, к сожалению, не поможет.
Интересно. Проверим. :)
Я правильно понимаю, что при некоторых углах поворота можем получить обратный эффект? Помехи останутся, а полезная информация скроется? Как фильтр и экран телефона, к примеру? Ещё, как по вашему, нужно менять угол фильтра если мы плыли и солнце было справа, а обратно - солнце слева?
Понял о чем речь. У меня так бывает, упрусь в один какой-то аспект и упускаю другие варианты. Спасибо!
Понял. Надо экспериментировать дальше значит.
Рад вас снова видеть! :)
Нет. Такого фильтра у меня нет. Вы имеете в виду, что-то вроде стёкла темных поляризационных очков? Могу только предположить, что нужный эффект не дадут: плавая на лодке в таких очках, вы все равно будете видеть рябь на воде. А математический фильтр работает с черно-белым изображением и его градиентами. Причём области градиентов можете задавать самим. Не каждый параметр степени градиента даёт нужный результат.
Согласен. В широком плане такой помощник мог бы много кому пригодиться. Не обязательно как самостоятельный автопилот, а как дешевый ассистент безопасности.
Код на python для "посвечивания" объектов:
frame это картинка, которая может быть текущим фреймом вашего видео или просто статичной картинкой
Полный код с трекингом выложу чуть позже, планирую его переработать с учетом замечаний и предложений, которые были предложены в комментариях.
Честно говоря, именно это я пытался сделать изначально: построить 3д сцену. Искал характеристики камеры, вводил near, far, FOV...
Все что смог посчитать: угол. Понял, что с одной камерой больше не получится ничего сделать. Хотя мне очень, очень хотелось узнать расстояние и скорость объекта на экране.
В результате, пришёл к таким же выводам: задача компромиссная, буду рисовать границы приближающегося объекта и избегать их. Это уже значительно повысит "живучесть" дрона во время движения по маршруту.
Вообще, ваша аналогия с парктроником очень точная.
Ещё я понял, что скорости объектов мне не особо и нужны. Испытываю катер я в безлюдном месте, что логично для механизма, который в любой момент может стать неуправляемым. Препятствия или находятся на месте(растительность) или являются тихоходными (дрейфуют по течению). Тут по аналогии с мотоциклистом в потоке машин, когда он, фактически принимает их за стоячие, несмотря на то, что они все-таки движутся.
Ага. Видел подобную статью, там с самолетом и камерой для определения скорости относительно земли, зная его высоту. К сожалению, не понял как мне это можно использовать. Если бы у меня камера висела на известной высоте, и на экране был катер и искомый объект, то задача решается просто. А у нас камера на катере в плоскости земли пишет. Другая картина получается.
Мне нравится с вами дискутировать, вижу, что здорово разбираетесь в вопросе.
Я как раз упражнялся с этим. У меня другие результаты получались с размерами. Представьте плывущую баржу и бутылку рядом с ней. На горизонте баржа будет в виде пикселя 1x1, бутылку не видно ещё: 0x0
Теперь мы сблизились с ними максимально, скорость по отношению к ним у нас одна и та же. Баржа занимает весь экран: 640x480, бутылка пусть например: 4x5
Размер в проекции экрана нарастал нелинейно, или я вас неправильно понял?
Но, я с вами согласен, что можно делить экран на зоны, только я ещё вектор сближения хотел учитывать: пересекает он корпус катера или пройдёт мимо.
И ещё было упражнение у меня такое. Разместил камеру на высоте корпуса катера, а перед ней рулетку растянул и сделал фото. И результат был, что-то вроде такого: первые 50-60 см хорошо укладываются в пиксели, 1-1,5 м ещё туда-сюда, все что свыше уже сливается в одну линию на экране.
Интересно...
А что будет быстрее увеличиваться: большое препятствие или малое?
Например, спичечный коробок или огромный лайнер. Как можно посчитать скорость сближения? Для простоты примем нашу скорость за 0. Пусть препятствие на нас движется. Вот этот момент меня смущает. Мы же не знаем размер объекта на горизонте. Почему он увеличивается на экране быстрее: он крупный или быстрый?
На близких расстояниях уже не успеваю среагировать. В моём примере камера слишком низко расположена: если препятствие далеко - погрешности большие, если близко - уже поздно маневрировать. Надо камеру выносить выше и угол настраивать, чтобы на экране было максимум полезной площади. Вот беда, не сезон сейчас, могу только теоретически предполагать.