149

Самодельный стратостат. Часть 1a

Серия Самодельный стратостат

Допустим, вы интересуетесь космосом, но космос для вас недоступен. Выше 10км не подняться, а посмотреть "что там?" очень хочется. По классификации NASA — нижняя граница космоса начинается на 100км от поверхности Земли. Эта статья будет не совсем про космос, но про возможность создания своего стратосферного зонда с нуля. Я много видел примеров успешного запуска и несколько статей на Хабре, но почти все они — это отчеты. Я же хочу оставить статью, которая сможет претендовать на "complete guide" для юных покорителей. Запаситесь терпением и безлимитным интернетом — будет много текста, картинок и даже пару видео. Это был долгий путь для нас, но я намерен сделать его не таким изнурительным для всех желающих. Поехали?

Вступление


Отступление для Pikabu:

Эта история публиковалась мной на Хабре. Сейчас там 3 статьи из этой серии и мы собираемся выпустить еще отдельную статью по легализации этих запусков в скором будущем (ориентировочно декабрь 2021). Цель "перепубликации" - увеличить покрытие аудитории. Так как мы считаем, что занятие это веселое и не бесполезное. Как минимум, сойдет за не самое тупое и активное времяпрепровождение. Цель всего мероприятия - исключительно просветительская, никакой коммерции!
Пикабу имеет весьма строгое ограничение на размер поста, так что я вынужден разбивать даже одну статью с Хабра на несколько постов.
Ну-с... Если "зайдет" - я продолжу переносить в том же порядке, в котором они выходили на Хабре ;-)

В этом проекте участвовало довольно много людей (навскидку ~10). Один бы я, разумеется, все это не потянул. Да и с друзьями интересней. У каждого была своя незаменимая роль в этом деле. А так как я — организатор, вдохновитель и спонсор всего проекта, то мне выпала честь говорить от имени каждого участника.


Мое непосредственное участие касалось:


- сборки электроники

- программирования

- финансирования

- организационных моментов

- подведения итогов


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


От идеи до завершения этого проекта прошел почти год. Нет, это не значит, что все так долго, сложно и т.п. Все на самом деле довольно просто, весело и интересно. Это значит: неправильное планирование и незнание особенностей работы некоторых служб. Из-за такого разрыва части этой статьи писались тоже в разное время. Так что в некоторых разделах у меня не сохранились собственные скрины и я поднатягал их из интернета.


Давайте посмотрим на распределение времени по активностям:

Ожидание… Ожидание служб доставки, ожидание ответа госслужб и, наконец, ожидание весны. Так как никто не хотел искать упавший зонд в ночи. А в регионе запуска (Северо-Запад) зимой темнеет очень рано. Ожидание съело 70% времени. Всегда закладывайте побольше времени в этот сегмент. Ну что я вам рассказываю? Все тут не первый день на IT женаты ;-)


Несмотря на довольно большую задержку нам удалось довести проект до успешного (!) завершения. И сейчас я расскажу вам как.


Список оборудования и компонентов


А начнем мы со списка используемого оборудования. В этом списке ссылки даны на сайты, где это можно купить. Не рекламы ради, а референса и облегчения поиска для:


1. Raspberry Pi 4 Model B

2. SPOT Trace GPS Tracker

3. Шар-зонд

4. Фал (канат)

5. Парашют

6. Гелий

7. GoPro 7 Black (+Micro SD card 128GB)

8. Powerbank x2 (20000 mah)

9. RPI Sense Hat

10. LTE GPS HAT — LTE / GPRS / GPS SIM7600E-H — for Raspberry — Waveshare 14952

11. TEMPer Gold USB Temperature Sensor

12. RPI Tall Case

13. RPI Mounting Kit


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


Raspberry Pi 4 Model B


Резонный вопрос: почему не Arduino? Простой ответ — потому что я не умею паять ¯\(ツ)/¯


Вторая причина — я предпочитаю использовать dotnet везде, где это возможно. Но это в меньшей степени повлияло на выбор.


Действительно, если дружите с паяльником — ардуино может стать хорошим выбором. Тем более я видел пару схожих проектов где он успешно используется. А вот в моем случае неумение паять стало причиной выбора USB термометра с весьма скромным диапазоном измерения (и это отразилось на результатах, о них в конце).


SPOT Trace GPS Tracker


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

GPS трекеров существует уйма, а этот, пожалуй, один из самых дорогих (во всяком случае, из тех, что мне встречались).


В чем проблема большинства трекеров, которыми завален любой радиорынок? Давайте подумаем: GPS трекер получает свои координаты с помощь GPS спутников (ну еще компенсирует погрешность по наземным станциям) — это замечательно, спутники покрывают всю поверхность Земли. Также очень замечательно, что наш трекер будет знать своё местоположение. Но нас то рядом с трекером не будет! Как он должен передать свои координаты в наш ЦУП? Самое массовое решение — GSM сети. Иначе говоря — покупаете симку, вставляете в трекер и он шлет вам смс-ки (ммс-ки, или стикеры в телегу, не важно). Я видел примеры успешных запусков с таким подходом. Но если честно, я пару раз выезжал за пределы КАД и готов вас уверить — во многих местах сотовой связи нет совсем! Если наш зонд упадет в такой зоне — провал операции, начинай сначала.


А вот сабж, в отличие от, для передачи координат использует спутниковый канал связи со 100% покрытием. Не буду наседать с рекламой, т.к. удовольствие это не дешевое, да еще и требует платной подписки, равной стоимости самого трекера, но отмечу — раз вы читаете эту статью, значит свою функцию он выполнил. Хотя и дал нам понервничать. Но об этом в разделе про поиск и спасение.


Так что еще раз — отнеситесь к выбору поискового трекера максимально ответственно!


Шар-зонд


Максимально просто — чем больше, тем выше полетит. Мы оперировали примерами успешных запусков из интернета. Там ребята часто использовали шары диаметром 2.5м. В конторе, где мы заказывали свои, нас тоже уверили, что этот — долетит. Немного не долетел, но мы склонны считать, что это не вина шара. Об этом в разделе про результаты.


Фал (канат)


Канат. Это просто тонкий канат. Заказывали у ребят по ссылке, но могли бы и купить в любом магазине за углом.


Парашют


Парашют бесстропный. Не разбираюсь в парашютах, но обратил внимание, что для таких нужд используют именно их. Его и заказали вместе с фалом.


Гелий


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


Количество стандартных баллонов по 40л которое нам понадобится мы считали так (к сожалению не нашел у пикабу возможности по-человечески использовать формулы, так что только так):

В нашем случае, необходимое количество баллонов по 40л получилось равным 1.36 баллона.


Фух, надеюсь ничего не напутал пока переносил формулы из Excel.


RPI Sense Hat


Для любителей RPI это довольно известная вещь. Вкратце поясню — это сенсорный мультитул для RPI. Имеет на борту следующее:


- Датчик температуры (2 штуки)

- Датчик давления

- Датчик влажности

- Гироскоп

- Магнетометр

- Компас

- Акселерометр

- LED дисплей


То, что надо, в одном флаконе.


LTE GPS HAT — LTE / GPRS / GPS SIM7600E-H — for Raspberry — Waveshare 14952


Еще одна спорная штука. Нет, вне сомнения, та часть функциональности, которую мы использовали нам очень нужна и она работает отлично. Но, возможно, это overkill и можно найти вариант подешевле.


А использовали мы ее только для показаний GPS (даже без GSM). Дело в том, что трекер то у нас есть (поисковый, не подключается к RPI), но хотелось бы еще к чему-то привязать телеметрию. И, желательно, привязать ее к координатам и времени. Из-за этого и появился еще 1 трекер, но уже подключенный к RPI. Показания с него (координаты, время, курс, скорость, высота) пишутся в лог и служат точкой синхронизации с показаниями всех сенсоров.


Его достоинство — он имеет выносную антенну. А это очень важно, когда на борту 2 приемника GPS и 1 передатчик (поисковый трекер). Производители Spot Trace советуют размещать их трекер на расстоянии не меньше 30см от других GPS устройств, во избежание помех. Так что тут пригодилась выносная антенна, которую мы просто кинули за борт.


Его недостаток — документация в лучших китайских традициях. Ее сначала пришлось поискать, а потом еще и нехило так покурить (но, в целом, она весьма исчерпывающая и понятная). Чтобы облегчить поиск будущим начинателям этой борьбы, оставлю ссылки тут (на одном из файлов стоит гриф COMFIDENTIAL (орфография сохранена), лол): раз, два.


TEMPer Gold USB Temperature Sensor


Внешний градусник (для замера температуры внутри использовали Sense Hat).


Его достоинства: он подключается в порт USB, есть рабочий тулсет для проверки (под Win)


Его недостатки: нижний предел измерения -40С. Сразу скажу — этого оказалось маловато; второй недостаток — документация. Ее нет. Пришлось реанимировать проекты 5-летней давности под похожие модели и написанные на разных языках. В итоге поскрещивал ежа с ужом и немного поколдовал (тяжела и неказиста жизнь простого программиста). Но, в итоге, все работает надежно, как швейцарские часы. В разделе с кодом я поясню где был тонкий момент.


RPI Tall Case


Это крутая штука, которая доставляет мне эстетическое удовольствие.


Красивый, алюминиевый, высокий кейс для RPI 4. Разумеется, перед заказом и прикинул высоту RPI с обеими шапками (Sense + GPS) — чуть-чуть не влезает при плотно закрытой крышке. Но, используя spacers (извините, не знаю русского названия), можно приподнять верхнюю крышку немного, для вентиляции.


Из проблем с ним было только одно — один из разъемов GPS HAT сильно выпирал за границы платы и не влезал в кейс. Разъем пришлось нежно демонтировать кусачками.


Ну только посмотрите, как элитно стал выглядеть наш самописец:

RPI Mounting Kit


Просто наборчик тех самых spacers и прочих мелочей. Приятное дополнение.


Конструкция


Общая конструкция


Для начала рассмотрим общую конструкцию аппарата (масштаб не соблюден!):

Как вы понимаете, стратосферный зонд это, по факту, шарик (в нашем случае диаметром 2.5м) с полезной нагрузкой на веревке и парашютом. Парашют крепится к нагрузке с помощью вентиляционных отверстий фалом 580мм (подробней в схеме полезной нагрузки). Ну а шар к куполу парашюта, тоже фалом (700мм).


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


Полезная нагрузка


Конструкция короба для полезной нагрузки вызывала у меня немного больше переживаний. Требовалось соблюсти несколько очень важных условий:


1. Предельная масса не более 2.5кг (для нашего объема шара)

2. Защита от воды + плавучесть (облака, дождь, падение в озеро и т.п.)

3. Хорошая терморегуляция (RPI не должна перегреться, а аккумуляторы не должны замерзнуть)


Посовещавшись с нашим конструкторским бюро, было решено делать куб со стороной 250мм из экструдированного пенополистирола (куплен в строительном магазине листами). Верхняя крышка двустворчатая из того же материала. В боковой стенке вырезано отверстие под объектив GoPro. Он легкий, имеет положительную плавучесть, достаточно прочный и не пропускает воду (швы, разумеется, проклеили):

Теперь рассмотрим компоновку компонентов. Как я сказал, тут главная проблема — терморегуляция. Честно говоря — я не инженер (хотя в дипломе такое слово написано). Так что за правильность решения не ручаюсь, но общими усилиями мы родили такую идею:

Обратите внимание, что это схема без развесовки. Сбалансируйте компоненты так, чтобы короб не перекашивало в подвешенном состоянии. Мы это делали методом проб и ошибок.


RPI располагается внизу. Забортный воздух поступает через вент. отверстия (дюбели, 8 штук) в короб и опускается к RPI. RPI выделяет тепло в процессе своей работы и нагретый воздух поднимается вверх. Тем самым подогревая аккумуляторы, расположенные над RPI. GPS трекер имеет собственное питание и довольно неприхотлив к внешним условиям (водонепроницаем, ударопрочен, низкое энергопотребление), так что за него голова не болела. До кучи, мы еще загерметизировали соединения с камерой и внешним градусником (обычным клеем залили), т.к. ожидали образование конденсата.

Вент. отверстия также используются для крепления фала от парашюта:

Конфигурация Raspberry PI 4B


Сам по себе не представляет никаких проблем, все очень просто и понятно. Это мини-компьютер с портами ввода-вывода к которым мы, в дальнейшем, планируем подключать все наши датчики\сенсоры\велотренажеры.


Скачать Raspberry PI Imager, выбрать нужную OS, свою SD карту и нажать WRITE:

OS было решено взять максимально облегченную. Десктоп и рюшечки нам не нужны, только консоль, только хардкор. Выбор пал на Raspberry PI OS Lite 32-bit:

SD карта для Raspberry PI


Хоть в официальной документации толком и не указан максимально допустимый объем карты памяти с которой RPI сможет загрузиться (но указан минимальный — 16GB и, как-то намеками указана возможность загрузки с 256GB с определенного дистрибутива), быстрый гугл показал, что лучше взять 32GB. На этом и остановились. Класс карты не сильно критичен, но разница в цене между Class 4 и Class 10 мне показалась не критичной, так что почему бы не взять ту, что побыстрее? Тем более что это, в дальнейшем, открывает возможность скидывать поток видео с GoPro на карту. Но до этой реализации мы не дошли и, честно говоря, я пока не придумал зачем это надо. Карту взяли SanDisk Extreme 32GB типа такой


Подключаем RPI к компу


После того как OS записана на карту и карта вставлена в слот на RPI, можно включить RPI просто подав на него питание. Питается это чудо через порт USB-C, так что озаботьтесь проводом заранее (я использовал 1 из павербанков).


Тут у нас первая проблема: ну включили, лампочки замигали, вроде все ОК.

И что?

Да, операционку то мы поставили без десктопной оболочки, да и мониторы с клавиатурами мы подключать не планировали, и Wi-Fi там еще не настроен.

Так что я немного присел на стул на полчаса.


(╯°□°)╯︵ ┻━┻


Честно говоря, бежать в магазин за проводом\переходником mini HDMI у меня не было никакого желания. Снова запускаем гугол и видим, что ситуация не безвыходная: можно подключить RPI к компу через USB и через него же наладить SSH. И, хотя тот же гугол говорит обратное, RPI при этом будет и питаться от компа и эмулировать сетевое соединение через один и тот же USB кабель. Нуштош, вытыкаем наш кабель из павербанка и подключаем его в USB компа. Снова замигали лампочки, RPI загрузился и, судя по статусу лампочек — у него все отлично.


Но по SSH все еще не подключиться. Курим вот эту страницу. Нас интересует headless mode:

Ага, надо поместить пустой файл с именем ssh в корень SD карты. Извлекаем карту из RPI и вставляем ее в комп (предварительно обесточив устройство). Делаем. Пробуем снова. Hostname, User, Password указаны там же, в подразделах для каждой OS. Но, честно говоря, информация там немного устаревшая. Например для Win10 указано, что надо использовать IP вместо имени хоста. Это не так. Забегая вперед, скажу, что и hostname: raspberrypi.local тоже заработал без приключений.

Интернеты пишут, что для этого необходимо поставить доп. приблуды от Apple, чуть ли не iTunes. Либо опенсорс аналог драйвера для таких доменных имен. Но, как я уже сказал, у меня все заработало и без вот этих вот дел. На всякий случай, вот подробная статья

Итого. Что мы имеем по подключению по SSH:


Hostname: raspberrypi.local

User: pi

Password: raspberry


Пробуем… не работает. К сожалению у меня не сохранились все скрины этих приключений, ну да ладно, придется поверить мне на слово — не работает.


(╯°□°)╯︵ ┻━┻


Переходим на нижние интернеты… Оказывается, мы забыли включить режим Lan Over Usb про который я что-то не нашел упоминания в документации (в итоге на офф форумах это им припоминали). Искомая статья (может не именно она, но шаги в ней описаны верные) — тут


Итак, если вкратце, нам нужно будет поменять 2 файла на SD карте: config.txt && cmdline.txt (могут быть без расширений, я уже не помню). Вынимаем карту из RPI, подключаем к компу, находим первый файл и добавляем в конце строчку dtoverlay=dwc2:

Теперь ищем второй файл (cmdline.txt).

По поводу второго файла небольшое отступление — мне его менять не пришлось — и так все было как надо. Но мало ли ¯\_(ツ)/¯

Добавляем в него строчку, указывающую на необходимость загрузки нужного модуля ядра (все параметры идут через пробел в одну строчку, это важно!). Скрин из статьи:

Всё, файлы сохранили, карту вставили обратно в RPI, подключаем USB кабель в комп и в порт питания RPI, RPI загружается. Пробуем SSH:


> ssh pi@rasberrypi.local


(да, кстати, озаботьтесь наличием SSH клиента на рабочем компе, если вдруг у вас его еще нет)


На этот раз все должно пройти как по маслу (извините, этого скрина тоже не сохранилось). Мы попадем в bash консоль на нашей Raspberry PI 4B по USB и теперь можем наворотить там дел ;-) А первое дело будет — обеспечить себе максимально удобные условия работы, иначе говоря — Wi-Fi!


Включаем Wi-Fi на RPI


Тут совсем все просто и без неожиданностей. В RPI OS входит утилита конфигурации через которую можно сделать все (или почти все) что может понадобиться в дальнейшем. Называется она raspi-config и ее использование, в частности в контексте настройки вафли неплохо описано в официальной документации — тут.


Подключаемся по кабелю в SSH сессию нашего черного ящика, запускаем из консоли:


> sudo raspi-config


Всего несколько клацаний кнопками и можно отсоединять наш USB кабель от компа и подключать его к павербанку (картинки из интернета):

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

Для удобства также советую добавить SSH ключи. Надеюсь не надо объяснять как это делать, но если вдруг, то вот отличный тутор от DigitalOcean

Сборка .NET Core проекта под RPI


Небольшое отступление: вся возня с RPI, периферией и написание софта делалось почти год назад. Много информации с тех пор утекло из моей головы и сейчас я эту часть пытаюсь восстанавливать по памяти. К сожалению, восстановить 100% этого приключения у меня не получится, но общие моменты я обозначу.

Настало время что-нибудь напрограммировать для нашего самописца. Сейчас, прочитав этот подзаголовок, многие могут подумать:

А почему не питон??

Ну… по нескольким причинам. Во-первых: хваленое комьюнити, которое "уже все давно написало, просто подключай и поехали", оказывается не всё написало, а то, что написало, мягко скажем — не едет (об этом в разделе про внешний градусник). А во-вторых: что-бы я не начинал писать — все равно получается C#.


Так что стереотипы прочь — будем ваять простенький скрипт на шарпе (зря нам что ли кроссплатформу завозили)! Я буду показывать всё на примере своего проекта для логирования всех показателей. Кто захочет — может использовать свой "hello world", кто не захочет — вот исходники на гитхабе


Бытует мнение, что для того, чтобы завести что-то на dotnet, надо для начала этот самый dotnet установить. На самом деле это не так. Dotnet умеет паковать свой CLR в приложение для целевой платформы. Для этого у dotnet cli есть флаг --self-contained. Так же нам потребуется указать какой конкретно рантайм мы будем использовать при помощи параметра -r linux-arm. Ну и фреймворк укажем, чего уж там. Итого полная команда для сборки самодостаточного dotnet приложения (не требующего установки dotnet runtime на целевую машину) будет выглядеть так:


> dotnet publish RpiProbeLogger\RpiProbeLogger.csproj --self-contained -r linux-arm -f netcoreapp3.1 -c Release


На выходе у нас получится исполняемый файл под linux arm со всеми зависимостями. Нам останется только скопировать все содержимое директории на Raspberry по SSH, сделать файл исполняемым (не обязательно) и, собственно, запустить (подробнее в разделе про CI/CD):


> chmod +x /home/pi/RpiProbeLogger/RpiProbeLogger

> ./home/pi/RpiProbeLogger/RpiProbeLogger


Если кто-то крутит носом от self-contained приложений — ничего страшного, вариант с установкой рантайма и фреймворка (ну мало ли кто-то захочет еще и билдить на распберри) на RPI тоже допустим и прекрасно работает — проверено! Вот статья которую я лично использовал (в ходе экспериментов).


CI/CD для Raspberry


Немного громкое название, но смысл тот-же — приложения мы писать умеем, надо теперь их собирать под целевую платформу и как-то их туда доставлять. Тут нам поможет его величество PowerShell (linux-like товарищи легко заменят его на bash, sh, etc по вкусу. Это не принципиально).


Весь скрипт находится в корне репозитория и называется buildAndDeploy.ps1. Общий алгоритм такой:


1. Подключиться к RPI по SSH для выполнения команд

2. Установить SFTP сессию для работы с файлами

3. Собрать наше приложение

4. Скопировать билд на RPI

5. Установить и включить сервис нашего приложения (чтобы запускался автоматически при загрузке RPI)


SSH


Поехали по очереди: с SSH/SFTP нам сильно поможет модуль для Powershell — Posh-SSH. На мой взгляд с этим модулем все хорошо, кроме одного — почему-то документацию по нему приходится искать по всему интернету и собирать по крупинкам. Может автор посчитал, что его API и ежу понятно, но вот мне было не очень понятно. Примеры использования с описаниями нашлись тут. Нас же сейчас интересует установка SSH сессии и делается она вот так:


$sshSession = New-SSHSession -Computer raspberrypi.local -Credential $credentials -KeyFile $rsaKeyFile


Сама сессия сохраняется в переменную $sshSession. Обратите внимание на 2 переменные: $credentials и $rsaKeyFile: мы же не хотим использовать привет из 90-х пароли? Мы будем использовать RSA ключи! И как это делать в случае Posh-SSH мне пришлось поискать. Сначала объясню немного про креденшиалс — в Powershell есть такой командлет Get-Credential — он занимается тем, что нативными средствами запрашивает пару логин-пароль у пользователя и возвращает их в качестве объекта:


$credentials = (Get-Credential pi)


В Win10 это выглядит так:

Как вы уже догадались, первым параметром можно сделать пре-ввод логина — pi. Нам это подходит. Теперь тонкий момент про Posh-SSH: он имеет параметр -KeyFile куда передается путь до приватного SSH ключа. НО! Приватный ключ может иметь passphrase — а такого параметра Posh-SSH не имеет. Оказывается, и это пришлось поискать, Posh-SSH будет в качестве passphrase использовать пароль из объекта $credentials — и это не слишком очевидное поведение, но именно из-за этого и затевалось использование Get-Credential. Что ж, этого вполне достаточно, чтобы подключиться по SSH к RPI. Полный скрипт находится в репозитории, а мы двигаемся дальше.


SFTP


Никаких откровений тут не скрыто, тот же Posh-SSH, те же Credentials, немного другое имя команды:


> $sftpSession = New-SFTPSession -Computer raspberrypi.local -Credential $credentials -KeyFile $rsaKeyFile


Сразу укажу команду для копирования файлов (да, всего в одну строчку деплоим, без хитростей):


> Set-SFTPFolder -SFTPSession $sftpSession -RemotePath '/home/pi/RpiProbeLogger' -LocalFolder "RpiProbeLogger\bin\$($c)\netcoreapp3.1\linux-arm\publish" -Overwrite


Да, называется она Set-SFTPFolder, не спрашивайте почему — я не знаю. Можно догадаться, что копирует она содержимое исходной директории в целевую директорию, а параметр -Overwrite указывает что содержимое целевой директории будет перезаписано в случае совпадения имен файлов. Параметры -RemotePath и -LocalFolder ясны без пояснений. Единственное, что может привлечь внимание — $($c) — это передача параметра командной строки, который содержит тип сборки: Release или Debug. Он также используется в следующем пункте — сборке приложения.


Сборка


Итак, как уже было описано в разделе про сборку .net под arm — наша команда сборки будет выглядеть следующим образом:


> dotnet publish RpiProbeLogger\RpiProbeLogger.csproj --self-contained -r linux-arm -f netcoreapp3.1 -c $c


Единственная разница тут — это параметр $c который мы будем подставлять из параметров командной строки (Release, Debug, etc) — на самом деле можно и не параметризовывать это, а захардкодить "Release" — на любителя.


Включение\запуск сервисов


Все тот же Posh-SSH имеет еще одну полезную команду: Invoke-SSHCommand. С помощью нее мы выполним установку systemctl сервиса. Unix-like ребятам тут делать нечего, для остальных немного пролью свет что это.


systemctl — это системная служба для управления службами (да-да). Она запускается автоматически и запускает, останавливает, управляет пользовательскими службами, основываясь на специальных файлах — .service. Такой файл присутствует и у меня в репозитории в подпапке с проектом — probelogger.service и вот его содержимое:

[Unit]
Description=Probe Logger Service
[Service]
User=root
WorkingDirectory=/home/pi
ExecStart=/home/pi/RpiProbeLogger/RpiProbeLogger
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
Type=exec
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=RpiProbeLogger
[Install]
WantedBy=multi-user.target
Я не буду врать, говоря что мне тут понятно абсолютно все, но, в основном, это читается как-то так:


1. запускать службу от пользователя root (да, секурность — не секурность, я понимаю. но рут привелегии потребовались для чтения данных с порта USB. Об этом позже)

2. рабочая директория — такая-то

3. запускать — тот-то файл

4. для перезапуска сервиса в случае катастрофы использовать команду kill

5.перезапускать в случае падения

6. логи сохранять в syslog


Далее пара команд Posh-SSH. Включение сервиса (означает что он будет запускаться автоматически при запуске RPI):


> Invoke-SSHCommand -Command 'sudo systemctl enable /home/pi/RpiProbeLogger/probelogger.service' -SSHSession $sshSession


Немедленный запуск сервиса (не обязательно же перезапускать RPI для нашего логгера, мы же не драйвера пишем):


> Invoke-SSHCommand -Command 'sudo systemctl start probelogger.service' -SSHSession $sshSession


Переменная $sshSession нам знакома из раздела про SSH сессию — это именно та самая сессия. Файл probelogger.service — в репозитории.


Что ж, на этом пожалуй все, что касается билда и доставки нашего самописца на RPI. Напоминаю, весь powershell-скрипт — в корне репозитория (buildAndDeploy.ps1). Не совсем автоматизировано — запускать нужно ручками, но вполне себе "continuous" — билди хоть после каждого коммита. Можно было бы конечно поднять pipeline на основе этого на каком-нибудь Azure DevOps или кто что любит (благо выбор сейчас из десятка платформ присутствует), но я посчитал это оверкилом для таких задач. Побилдим руками, не сломаемся.


Команда билда и деплоя выглядит вот так:


> .\buildAndDeploy.ps1 -enableService -runService


По умолчанию билдится Debug версия (нам же для разработки и отладки надо). Можно добавить параметр -c=Release если необходимо собрать финальную версию.


Отладка в Visual Studio


Это та часть, где время стерло бОльшую часть информации. Но поверьте — тут все просто и прозрачно, а на MSDN есть даже статья по отладке кода на RPI для VSCode и Visual Studio — VS Remote Debug.


Я опишу буквально в 2-х словах для своего случая (Visual Studio):


1. Открываем окно удаленного дебага: Debug -> Attach to Process

2. Выбираем Connection Type: SSH

3. Вбиваем в поле Connection Target наш pi@rasberrypi.local

4. Ищем в списке наш процесс dotnet (иногда может потребоваться включить Show processes from all users, зависит от вашей конфигурации)

5. Жмем Attach и мы в деле!


Breakpoints, Watches, Locals, Immediate Window, Threads — все работает.


Нуштош... На этом моменте пикабу сказал мне, что длина текста превышена, так что закругляемся. Если эта тема зайдет - я продолжу переносить эту историю сюда.


Fly safe, cmdr!

Автор поста оценил этот комментарий
дочитал. не понял, нахера вся эта ламбада, но понял, что у тс и его товарищей лапки, поэтому для своих непонятных целей они взяли распберри пи вместо легкой и маложрущей ардуины.
раскрыть ветку (1)
8
Автор поста оценил этот комментарий

Вопросы вкуса. Разницы никакой. Мне не нравится, что все что угодно из ардуино выглядит так, будто это трофей в битве с бомжом :)

1
Автор поста оценил этот комментарий
Нифига не понятно , но очень интересно!
Можете для ЛЛ в двух словах описать цели мероприятия ?
раскрыть ветку (1)
4
Автор поста оценил этот комментарий

Цель привезти телеметрию и видео в 4к с высоты 30+ км

показать ответы
Автор поста оценил этот комментарий
До сих пор не понятно. Эта камера будет там на постоянной основе? Если нет , тогда какой результат ? Телеметрия не добавляет информативности
раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Камера будет работать независимо с момента запуска и пока не сдохнет :)

0
DELETED
Автор поста оценил этот комментарий

А как будет работать коррекция посадки?

Его при подъеме унесет хз куда от точки старта а потом посадка еще даст снос

Садится в море к примеру или в тайге

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Коррекция посадки будет работать очень просто - ее не будет =) Да, его унесет. Унесет далеко и в не очень хорошее место. Мы этого ожидали. Мы даже были готовы что его унесет в море (хоть морей там поблизости нет, разве что финский залив и ладожское озеро). Из-за этого вся конструкция с положительной плавучестью и поисковый трекер с большим запасом жизнеспособности - может спокойно работать месяц+ в автономном режиме. За это время из любого окрестного водоема его должно прибить к берегу. Если нет - лодка ;-)

показать ответы
2
Автор поста оценил этот комментарий

Блин. Самолёта…Т9 будь он неладен

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

И самолета и самодура на самолете - может =) Как "бороться" с авиацией на государственном уровне - будет рассказано ориентировочно в декабре. Сейчас эта часть только готовится и ее нет даже на хабре. Про меры предосторожности, которые можно принять "до" - описано в подчасти "Б" первой части. Которая уже вышла тут ;-)

Автор поста оценил этот комментарий
Вопрос задачи. Если стоит задача собрать данные с нескольких датчиков, то той же ардуинки хватит, да и цена ниже на порядок, так что можно обеспечить двойной запас и дублирование систем. Если стоит задача самоуправления, чтобы устройство само что то собирало, анализировало, решало сложные задачи, то да- ардуино тут не помощник совсем
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Да, согласен: разные задачи - разные инструменты. Но. Не забывайте еще про момент планирования проекта - когда сидишь перед пустым монитором и идеей в голове - довольно сложно заранее предугадать все варианты развития событий. Вполне нормально допускать ошибки на ранних стадиях и потом их исправлять. Это лишь 30% первой части (из 3-х частей) всей истории. И сейчас, после 4-х запусков, я могу сказать, что не пожалел о выборе RPI. Хоть, объективно, с поставленными задачами справилась бы и ардуина. Я не говорю, что RPI лучше или хуже ардуины - это лишь один из вариантов. К тому же он (с моей точки зрения) сильно проще в реализации. Во-первых: не надо паять. Во-вторых: все равно придется программировать, так почему-бы не программировать на чем-то более высокоуровневневом, чем C? В-третьих: если мне надо заменить вышедший из строя компонент - я могу сделать это и в лесу (при условии что у меня есть запаска) - просто выткнул и воткнул. Все это конечно субъективные вещи, потому что заядлые ардуинщики могу при желании притащить и RabbitMQ на ардуину. Так что, как я сразу сказал - дело вкуса. А питание и тепловыделение (как будет видно в будущих частях) - совсем не проблема. Тем более что схема терморегуляции полезной нагрузки у меня указана и она работает хорошо (тоже будет видно дальше)

показать ответы
1
Автор поста оценил этот комментарий

Не совсем понятно зачем спутниковый канал связи для трекера. Есть приёмо-передатчики на Lora на частоте 433Мгц. Такой одно ватный, спокойно берёт 100км по прямой . Прямо в онлайне будете получать всю телеметрию, сможете так же в онлайне управлять оборудованием на борту. Скорость передачи не большая, но тут много и не надо. Антенны обычный полуволновой диполь.

Можно пойти дальше, видео передавать прямо с борта. Есть аналоговые системы на 1.3Ггц. Цена не большая. Картинка конечно не 4k, только PAL но зато прямо сейчас. Этакий FPV на шаре.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Лора в этот сезон «не успела» полететь. Мы ее рассматривали. По надёжности она, конечно, все равно уступает спутнику. Так как 100км (на самом деле 100км это «теоретическая дальность», которую видели только 2 человека в лаборатории), это - по прямой. Упади шар за холм - потерян навсегда. Но. Есть ещё LoRa Wan. И если за холмом найдётся ретранслятор, то «может быть». В общем хотелось на первые разы меньше рисковать. Но лор мы закупили.

показать ответы
0
DELETED
Автор поста оценил этот комментарий

Но это высота 30 км, ветер, на подъем снесет и потом на посадку, для теста наверное достаточно трекера ?

Какой аккум на месяц трекера нужен?

Много технических проблем

Не с луны конечно аполон приземлить,  но все же есть расчеты вероятности? Я в детстве ракеты трехступенчатые запускал и ракетопланы

На пару км уносило и найти сложновато

75% ненайденышей

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

1. Есть расчеты траектории в части "Б" (Самодельный стратостат. Часть 1б). Раздел: Подготовка к запуску.

2. В трекере используются 4 АА батарейки (точную емкость и модель сейчас не скажу - у меня нет его на руках, но в посте приведена ссылка на сам трекер). Этот трекер можно настроить таким образом, что он будет слать треки раз в 5 минут только если фиксирует движение и, если не фиксирует, раз в сутки "статус-сообщение". Которое фактически читается как: я норм, лежу там-то. Соответственно, при посадке на твердую поверхность, движение ликвидируется и трекер переходит в энергосберегающий режим - отправляет уведомление раз в 24 часа.

3. Описание поиска и спасения конкретно этого аппарата уже вышло тут, в части "В" (Самодельный стратостат. Часть 1в). Раздел: Поиск и спасение.

показать ответы
0
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Кадр из видео в заголовке поста :)

0
Автор поста оценил этот комментарий
Дочитаю завтра. Spacers = проставки. И почему не водород? Да, опаснее, да, утекает через ткань, но дешевле и лучше подъемная сила.
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

С водородом много возни. Цель была не утащить человека в стратосферу, а сделать и описать настолько простой аппарат, чтобы его мог собрать практически любой при желании (и не умереть). В интернете, во всяком случае в русскоязычном, оказалось не так много инструкций "от А до Я" по сборке и запуске подобных вещей. Я нашел 0. От того и появилась серия статей в таком виде. Для нас же цель была просто притащить телеметрию и видео с высоты 30+ км.

2
Автор поста оценил этот комментарий

Автор, а эта штука не может пролететь на пути какого-нибудь самодура?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Может. Как с этим бороться будет описано чуть дальше. Конечно, если человек решит самоубиться об шар - никто ему не помешает. Но можно попробовать минимизировать эти риски

0
Автор поста оценил этот комментарий
Самое главное не написано. Очень много сложностей, написание какого то софта. Что он делать то будет?
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Эта часть не влезла :) софт собирает показания со всех датчиков (они указаны в списке оборудования) и записывает в файл для последующего анализа

1
Автор поста оценил этот комментарий
и ? Что сказать то хотели?
раскрыть ветку (1)
Автор поста оценил этот комментарий

Я предложил эксперимент. Где-то там лежит зонд. Где конкретно - хз. Доедете за 2 дня - дам новые координаты. Не доедете - провал домашней теории.

показать ответы
1
Автор поста оценил этот комментарий
У лораван есть готовый протокол, ничего городить не надо, там и адресация и маршрутизация и, о боже, шифрование.

И внимание, всё это не нужно в вашем случае, от слова совсем.


Все давно готово и делается просто покупкой 1 модуля.

А шлюз вы из воздуха достанете?  Он самое дорогое в этой системе.


Главное чтобы наше устройство выходилось когда ему надо. А нам даже раза в сутки достаточно.

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


Днями будет работать? А как насчёт месяцев?

Зависит от аккумулятора и как вы настроите систему. Да можно и месяц. Будет засыпать и просыпаться раз час, два.


После этого его ещё проволокло 2км. Так что если за 2 дня вы не приедете в район поисков у вас будет 4 кВ.км поисковая площадь.

И? Район известен, маяк работает. 433Мгц через препятствия хорошо проходит. Что не так? Ваш спутниковый маяк ляжет антенной вниз или в лесу будет и всё. Ищи его там.  А с лоровким маяком можно несколько их иметь, один сломает при падении, будет второй. Они копеечные.


В вашем варианте всё ровно так же, только ещё менее надёжно и цена конская получается. Понятно хозяин - барин. Я только советы даю, т.к. знаком не мало со схожими областями и по профессии инженер-программист по встраиваемым системам.

раскрыть ветку (1)
Автор поста оценил этот комментарий

59.627608, 51.592030

Вперед!

показать ответы
1
Автор поста оценил этот комментарий
Есть ещё LoRa Wan. И если за холмом найдётся ретранслятор, то «может быть».

1. Ну как бы.... :)

2. Появится. Если не сажать на один акк всю начинку. Так не делается. Есть основные системы, есть вторичные, есть критичные. У всех свои акки. Lora передатчик живёт автономно, при потере соединения от основного компа (сдох, разрядился его акк) будет слать последние координаты, т.е. за секунду до приземления, достаточная точность что бы найти. Он так сутками может работать. Спокойно найдёте.

3. Тем что это не IoT даже близко. Я занимался разработкой это хрени. Там не сеть как таковая. Там модель звезда. Устройства различного класса (что раз сутки выходят на связь, что каждые пару минут и т.п. по расписанию  и обслуживающий шлюз в инет. Вам это всё не нужно. Это не подходит для этой задачи. Тут связь должна быть точка-точка. Lora это всего лишь широкополосная модуляция, по модели OSI это физический уровень, это как ethernet, только по воздуху и маленькие скорости. По верх уже городиться то что вам нужно. По сути по верх делается какой либо свой или готовый протокол.


Какая разница? Речь то не про управление полётом, а про каналы связи с объектом. Про поиск после приземления. С самолётами при краше всё ровно тоже самое. Едешь и ищешь по координатам с телеметрии что получал во время полета. Потом по пишалке если уже близко, или по маяку что вещает координаты. Плюс направленная принимающая антена для понимания вектора куда двигаться, аля "охоты на лис".

раскрыть ветку (1)
Автор поста оценил этот комментарий

Что «ну как бы»? Какая точка-точка о чем вы? Вы не угонитесь за ним. Нет дорог, а еслиб и были - шар не полетит вдоль них. Куда вы со своей точкой поедете? В финский залив? В тайгу? В болото?


У лораван есть готовый протокол, ничего городить не надо, там и адресация и маршрутизация и, о боже, шифрование. Все давно готово и делается просто покупкой 1 модуля. Устройства который раз в сутки выходят на связь - пусть выходят. Главное чтобы наше устройство выходилось когда ему надо. А нам даже раза в сутки достаточно.


Днями будет работать? А как насчёт месяцев? Давайте проведём эксперимент: я вам сейчас сообщу последние известные координаты зонда, а вы поедете и будете его искать? Что, сейчас нет времени? Аккумулятор сядет через 2 дня, так что поторапливайтесь! А! Это ещё координаты не с земли! После этого его ещё проволокло 2км. Так что если за 2 дня вы не приедете в район поисков у вас будет 4 кВ.км поисковая площадь. Там леса, болота, степи и овраги. Ой, вы приехали за 400км от дома и поняли что вам нужен болотоход, чтобы двигаться дальше? Как жаль, что вы не знали этого заранее.


Ну как? Надёжно?

показать ответы
1
Автор поста оценил этот комментарий

Не уступает. Скорее наоборот превосходит. 100 км не лабораторные тесты, а реальные, полевые. Народ летает на FPV самолётах на эти дистанции. Только нужны модули Lora не в 25 и ниже мВт, что для IoT используют, а одноватные на 433Мгц. Падение за холм не проблема. Вы знаете последние координаты шара, они же прямо в онлайне поступают. Передатчик постоянно передаёт их. Выдвинулись ближе к последним координатам, связь востановилась. Так и ищут упавшие самолёты и квады в FPV.

LoraWan вам не нужен. Это совершенно из другой оперы. Это для управления IoT устройствами. Это не ретранслятор. Ещё советую добавить пищалку на 110 Бд и светодиодную подсветку. И завести на канал управления через Lora. Легче будет искать на последних метрах. При том лучше что бы это всё включалось и само автоматом скажем через пару часов, имело автономный аккумулятор. На случай если было жёсткое приземление и остальная электроника  пошла по звезде. Отстегнулись аккумуляторы, сломалась антенна и т.п.

раскрыть ветку (1)
Автор поста оценил этот комментарий

«Не уступает» - ооочень сильное заявление. Локальная радиосвязь не уступает спутниковой? Прям совсем-совсем? Ладно, раскрою спойлер из будущей части: зонд улетел на 300км. Ваш план по его спасению? :)

1
Автор поста оценил этот комментарий

Не уступает. Скорее наоборот превосходит. 100 км не лабораторные тесты, а реальные, полевые. Народ летает на FPV самолётах на эти дистанции. Только нужны модули Lora не в 25 и ниже мВт, что для IoT используют, а одноватные на 433Мгц. Падение за холм не проблема. Вы знаете последние координаты шара, они же прямо в онлайне поступают. Передатчик постоянно передаёт их. Выдвинулись ближе к последним координатам, связь востановилась. Так и ищут упавшие самолёты и квады в FPV.

LoraWan вам не нужен. Это совершенно из другой оперы. Это для управления IoT устройствами. Это не ретранслятор. Ещё советую добавить пищалку на 110 Бд и светодиодную подсветку. И завести на канал управления через Lora. Легче будет искать на последних метрах. При том лучше что бы это всё включалось и само автоматом скажем через пару часов, имело автономный аккумулятор. На случай если было жёсткое приземление и остальная электроника  пошла по звезде. Отстегнулись аккумуляторы, сломалась антенна и т.п.

раскрыть ветку (1)
Автор поста оценил этот комментарий

1. Я нигде и не говорил что лораван это ретранслятор :)

2. Упал за холм, пролетел 20км - никто его не найдёт никогда. Связь не появилась никогда потому что он просто разрядился.

3. Чем зонд не IoT устройство? Это сеть из лора устройств с гейтвеем в интернет. Я могу через неё управлять зондом/получать телеметрию сидя в другой стране, а не пытаться гоняться по лесу за шаром с приемником (как FPV дроны).


Надо же понимать, что дроны/самолеты и прочие утюги это совершенно другой тип устройств. Их полёт - управляем и предсказуем.

показать ответы

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества