Управление через интернет

Korogodsky

На выходных удалось получить кое-какие результаты. Встроил передачу видео посредством JPEG в программу. Такого “ужаса” как с передачей MJPEG через VLC не наблюдается. 😃 Сделал крутилку для регулирования качества jpeg вручную, с базы значение передается на борт, и борт понижает качество изображения. Видео приближенного к реальному времени удается добиться при довольно низком качестве картинки. Не знаю возможно ли будет управлять самолетом в ручном режиме с таким изображением. Еще нужно сделать режим автоматического понижения/повышения качества.

Мне нравится идея с черезстрочным выводом. А что если черезстрочный вывод сделать и по горизонтали и по вертикали? Тогда по идее размер изображения должен уменьшиться в 4 раза?

PS
Чтобы вы получше представляли как это выглядит: дерево можно разглядеть и сказать что это дерево, предполагаю что можно будет разглядеть поле для посадки (изначальная задача), но вот понять какая высота травы - врядли. Впринципе можно сделать передачу качественного снимка местности по нажатию кнопки - присмотрел место для посадки, получил фотографию, оценил - не подходит место (трава высокая), полетел искать дальше.

Stas#

Такой БПЛА надежнее садить на парашуте.

Korogodsky
Stas#:

Такой БПЛА надежнее садить на парашуте.

Я понимаю, да, на парашюте проще всего реализовать, но не лежит душа к такому способу приземления 😃 “не красиво” это!
Еще вариант реализации посадочного режима: по нажатию кнопки открывается два окна - в одном показывается видео в реальном времени с низким разрешением, а во втором 1 раз в 2-3 секунды обновляется изображение 640х480 размером 50-60Кб. На время передачи “качественных” кадров, видео в реальном времени будет останавливаться, эксперименты показывают что на 1 секунду.

Stas#

Даже для большой авиации подбор плошадок с воздуха сложная задача. На это одельный допуск пилоту дается. А вы хотите это по видеокартинке сделать.

Korogodsky
Stas#:

Даже для большой авиации подбор плошадок с воздуха сложная задача. На это одельный допуск пилоту дается. А вы хотите это по видеокартинке сделать.

Задача сложная, я не спорю, но все-таки это самолет без людей на борту, опасность он представляет для тех кто на земле находится, реально можно не заметить человека на поле. Думаю на таком ЛА не должно быть пропеллеров выступающих за корпус, и посадочная скорость должна быть минимальной в идеале вертикальное приземление.

UncleSam
Stas#:

Даже для большой авиации подбор плошадок с воздуха сложная задача. На это одельный допуск пилоту дается. А вы хотите это по видеокартинке сделать.

Ну посадка пассажирского ЛА и РУ модели это немного разные вещи. Думаю нет ничего невозможного.

Уважаемый топикстартер, можно видео с десктопа, хотелось хотя бы приблизительно оценить качество.

Korogodsky
UncleSam:

можно видео с десктопа, хотелось хотя бы приблизительно оценить качество.

Я обязательно сделаю видео того как это выглядит со стороны, но не раньше следующих выходных. В скриншоте нет смысла, надо смотреть как это выглядит в движении, так например человек при взгляде из окна с четвертого этажа дома на удалении 100 метров выглядит пятном, только в движении можно понять что это человек, марку автомобиля понять можно, я например разглядел что проехала машина соседа по улице. Еще пробовал подключать аналоговую камеру 540твл через ТВ-тюнер, картинка лучше чем с вэб-камеры Microsoft hd-5000, смазывание при движении меньше. Возможно имеет смысл купить самое дешевое USB устройство видеозахвата и подключить аналоговую камеру.

Извиняюсь, заметил что видео просили, в общем на след. выходных будет.

Дми-III-й
Korogodsky:

Возможно имеет смысл купить самое дешевое USB устройство видеозахвата и подключить аналоговую камеру

Думаю дешевле просто сменить объектив у вебкамеры, съэкономите в весе точно

Korogodsky
Дми-III-й:

Думаю дешевле просто сменить объектив у вебкамеры

неее, там дело в матрице, желе-эффект и смаз если ее резко двигать, хотя веб камера одна из лучших, но жить можно 😃
Еще кстати автофокус реально мешает, правда его отключить можно.

UncleSam

Поиграл сегодня с видео в Linux купил для этого дела самую дешевую USB 1.1 вэбку за 599 рублей.

Для передачи использовал motion в режиме 320х240 jpeg сжатого с качеством 20%. Передавал через HTTP поверх TCP.
Для отображения использовал браузер Crome постоянно перезагружающий картинку.

В целом результаты таковы.
в 320х240
при сжатии 20% передаваемый поток 85 кб/c задержка 0.3 сек (0,4 на соседнем компьютере)
при сжатии 50% передаваемый поток 120 кб/c задержка 0.3 сек (0,4 на соседнем компьютере)
В обоих случаях качество картинки довольно удовлетворительное. Похоже на обычный аналог переданный через эфир.

В принципе летать сложно но можно.

Думаю в сторону следующих улучшений.
Передача через UDP.
Своя программа для просмотра картинки с отрисовкой через OpenGL.

Korogodsky
UncleSam:

В целом результаты таковы. в 320х240 при сжатии 20% передаваемый поток 85 кб/c задержка 0.3 сек (0,4 на соседнем компьютере) при сжатии 50% передаваемый поток 120 кб/c задержка 0.3 сек (0,4 на соседнем компьютере)

Не плохо, и подход научный 😃
у меня все более на глазок

Я только не понял - видео передавалось по сети или на самого себя? Если на самого себя - 0.3 сек многовато. Попробуйте развернуть на полный экран, как оно, с точки зрения полетов? В маленьком окошке все кажется лучше чем оно есть 😃 В мобильном интернете скорость будет не постоянной, там нужно на лету менять параметры качества видео. Вчера вечером с этим поэксперементировал, в принципе получается, но надо еще тестировать/оптимизировать.

UncleSam

На фото передача на самого себя, через удаленный комп (пинг до которого ~12 мс) задержка больше на 0,1 сек. Но это используя HTTP и браузер в качестве клиента.
Если одна шабашка мимо пролетит и будет свободное время, попробую сварганить передачу на UDP с выводом программой через OpenGL. О результатах доложусь.

А вот со скростью похоже ошибочка сейчас пришел домой посмотрел на скрины, ну мало как то 85 кБ/с, это похоже скорость не в килобитах, а в килобайтах, соответсвенно это 680 кб/с? Приду на работу проверю точно. Просмотрел я это как то. (кстати я использовал 24 кадра в секунду).
Так что соответственно вопрос о чересстрочной развертке остается в силе. Кстати делать чересстрочку и по горизонтали и по вертикали не советую, получается что кадр полностью обновится только через 4 четвертькадра, при 20 четвертькадрах это 0,2 секунды многовато как то. Может лучше полукадрами но не чересстрочной разверткой а в шахматном порядке пиксели слать, это сразу сгладит расческу оставив полное обновление картинки за 2 полукадра.
Вопрос в том насколько увеличит время обработки такая выборка, стоит ли овчинка выделки в конце концов можем прийти к тому от чего пытаемся уйти - увеличим задержку =(

Korogodsky
UncleSam:

Вопрос в том насколько увеличит время обработки такая выборка, стоит ли овчинка выделки в конце концов можем прийти к тому от чего пытаемся уйти - увеличим задержку

Я думаю это будет происходить мгновенно - повыкидывать через один пиксель из битмэпа. Надо пробовать и смотреть что получится, если из битмэпа выкинуть пиксели, а затем то что получилось перегнать jpeg, и вывести вперемежку с предыдущим кадром.
Кстати если с такой системой резко перевести камеру с черного на белое, получится забавная сеточка. 😃

msv

Сомневаюсь, что jpeg это простит… Во всяком случае исходное качество кадра из двух полукадров вряд ли получится… (правда и сожмет значительно больше чем в 2 раза). имхо.

Korogodsky
msv:

Сомневаюсь, что jpeg это простит

Если не простит, можно просто тупо отрезать часть кадра сверху и снизу, получится а-ля 16:9. Сегодня попробую авто-FPS сделать, там в общем то не сложно. При FPS=5 видео нормально смотрится как ни странно 😃

UncleSam
Korogodsky:

Я думаю это будет происходить мгновенно - повыкидывать через один пиксель из битмэпа.

Нет, нет, смысл не в том чтобы просто выкинуть каждый второй пиксель в битмепе, а затем все это сжать. Ясно что в этом случае будет фигня. Смысл в том, чтобы из битмэпа полного кадра вытащить каждый второй пиксель и сгенерировать из этого битмэп полукадра, получим то же изображение сжатое в два раза по одной из осей, - jpeg скушает. Затем после получения jpeg и его раскодирования, на финальном битмэпе заменить точки также в шахматном порядке.
А при подготовке следующего кадра выбирать другие пиксели и заменять на финальном битмэпе другие пиксели. Надеюсь не очень сумбурно обьяснил

Korogodsky
UncleSam:

Смысл в том, чтобы из битмэпа полного кадра вытащить каждый второй пиксель и сгенерировать из этого битмэп полукадра, получим то же изображение сжатое в два раза по одной из осей

А полукадры на рисунке не должны быть в два раза меньше по высоте???
JPEG наверное это скушает, но скажем если взять два абсолютно одинаковых кадра, на одном повыкидывать все четные пиксели (т.е. сделать ресайз), затем его сжать (с потерями!). Потом во втором кадре повыкидывать все нечетные пиксели (ресайз), сжать. После получаем кадр “сложением” из двух. И этот результирующий кадр не будет попиксельно равен исходному. И вот интересно насколько изменится картинка.

Если я все правильно понял, из рисунка получается что полукадры должны быть в два раза меньше по высоте, а это и выходит черезстрочная развертка по горизонтали и вертикали, или нет???

Дми-III-й
Korogodsky:

При FPS=5 видео нормально смотрится как ни странно

В движении смотреться все будет значительно хуже, 5 FPS это слайдшоу

Korogodsky:

И вот интересно насколько изменится картинка

Станет намного мутнее

UncleSam
Korogodsky:

А полукадры на рисунке не должны быть в два раза меньше по высоте???
JPEG наверное это скушает, но скажем если взять два абсолютно одинаковых кадра, на одном повыкидывать все четные пиксели (т.е. сделать ресайз), затем его сжать (с потерями!). Потом во втором кадре повыкидывать все нечетные пиксели (ресайз), сжать. После получаем кадр “сложением” из двух. И этот результирующий кадр не будет попиксельно равен исходному. И вот интересно насколько изменится картинка.

Если взять один кадр, сжать Jpeg а затем обратно распаковать будет ли он попиксельно равен оригиналу?
А Дмитрий прав, если подумать таким образом мы избавляемся от расчески, но и вносим дополнительное размытие в картинку, Jpeg уменьшает контрастность соседних пикселей в пределах блока 8х8. Выходит обычные полукадры чересстрочной развертки лучше?
Кстати согласен и с тем, что 5 кадров крайне мало, минимум на котором я не ощущаю явный дискомфорт - 14-17 кадров все что ниже воспринимается как лаги и слайдшоу.

Korogodsky:

Если я все правильно понял, из рисунка получается что полукадры должны быть в два раза меньше по высоте, а это и выходит черезстрочная развертка по горизонтали и вертикали, или нет???

А какая собственно разница по какой оси сдвигать пиксели по высоте или по ширине? Это видимо только вопрос вкуса.
Нет кадры не должны быть меньше по высоте, представьте что серые пиксели это кубики на столе и вы их сдвигаете например влево, кадр уменьшится только в 2 раза. Думаю идею с такой разверткой можно оставить.слишком много мороки с ней а результаты скорее всего будут скромны.

Korogodsky
UncleSam:

Если взять один кадр, сжать Jpeg а затем обратно распаковать будет ли он попиксельно равен оригиналу?

Я не правильно выразился.

Проделав эти манипуляции с двумя идентичными битмапами, мы получаем один jpeg. Затем берем исходный битмап и делаем из него одного тоже jpeg. Эти два JPEGа не будут равны. Хотя мы ожидаем, что они будут идентичными.

UncleSam:

Думаю идею с такой разверткой можно оставить.слишком много мороки с ней а результаты скорее всего будут скромны.

Я ее временно отложу, пока есть еще что делать, но потом попробую реализовать, тут нужно глазами смотреть, теоритически оно часто бессмысленным выходит. 😃

Leg1on

Я извеняюсь, но не читал все посты, просто по данной теме хотел пояснить кое что.
-Управление с компьютера будет осуществляться по средствам чего? Обычно данную функцию реализуют через грамотно написанную программу(сервер)!
У нас тут есть програмеры высшего звена? Ну или золотая молодёж, способная купить разработку.
-Управление летательным аппаратом будет осуществляться по средствам чего? Обычно данную функцию реализуют через грамотно написанную программу(клиент)! ПЛЮС электронника на которой и будет установлен клиент! Ещё спрошу - у нас тут есть программеры и радиоэлектронщики высшего звена? Ну или богатенькие?
-Время реакции человека в непосредственной близости от модели состовляет 1сек и более прибавим к этому задержки при передачи по GPRS каналу, прибавим скорость GPRS канала, прибавим помехи, прибавим скорость прохождения скрипта на сервере, прибавим скорость прохождения скрипта на клиенте, получим ну минимум скажем 5 секунд…ХМ и где будет Ваш аппарат за такое время?
-Ах да, авто пилот…а посадка и взлёт без участия человека?
-В общем у нас получается обычный беспилотник! А теперь включаем новости и смотрим про военку…где рассказывают про закупку беспилотников для военной или гражданской задачи и слышим цену!
Вычитаем все блатные разработки и оставляем толкьо всё необходимое для полетушек…ХМ…30 000 евро или больше…

p.s. Вперёд парни! Дерзайте! У Вас всё получиЦО)))