Сколько он мусора соберет на такой скорости? Если пленка достаточно тонкая, даже единичные атомы материи могут его повредить, и долетит решето вместо паруса.
Не получится — для связи достаточно детектировать слабый сигнал на фоне шума, и до приемника дойдет мизерная доля излученного сигнала (не забывайте о рассеянии по площади). И отражать его обратно никакого смысла нет.
Ну вообще-то пункт "за спасибо" есть во многих компаниях, и это подтверждает высказанную выше мысль. Кому то просто интересно увидеть новый товар на рынке, своей помощью ускорив его выход. Потом пойдет и купит. Кто-то пытается съэкономить, рискуя ничего не получить.
Все понравилось, но отсутствие microSD просто перечеркнуло все жирным минусом. Уже привык к своей 16+64Gb конфигурации, когда не надо каждый день заниматься копированием файлов. Странное решение, "20Gb хватит всем" — но яблокофилам должно понравиться.
Все просто, но вот провода и системы их крепения, выглядят не очень. гик-стайл. А нельзя ли объединить блок управления с кареткой, поставить туда емкую LiPo батарею, и сделть все компактнее? Будет уже почти как коммерческий продукт.
Конечно она ничего не понимает, это просто классификатор которые на основе огромной обучающей выборки научилиотвечать на один конкретный вопрос: какие координаты на карте для этой фотографии. Если нужны ответы на другие вопросы, например, "на фотографии изображены люди и сколько их", можно научить отвечать и на них, проведя повторное обучение, но принцип остается таким же простым.
Как ни парадоксально звучит — потому что в некоторых областях Arduino подходит лучше, чем Linux устройства. Ключевое слово — система реального времени. Да, я знаю что и для linux пытаются сделать такую модификацию, но по моему это все зря, в связке с риалтайм сопроцессором сдеать это гораздо проще, а железо стоит копейки (+2-4$ за достаточно навороченный STM32).
Вот пример такого гибрида http://beagleboard.org/BLACK, только сопроцессор там очень слабенький, порты IO и немного DSP.
А разве шалоны не ведут к увеличению объема кода? К примеру у меня есть функция на 10 экранов, которая оперирует матрицами любого размера. Для возможности обращения вида a[i][j] нужно заранее определеить во всех переменных размерность матрицы, и это красиво делается при помощи шаблона. Но когда я вызову эту функцию для матрицы 3X3 и 4x4, разве компилятор не сделает 2 коппии кода фунции? Если задача экономить FLASH память, то очевидно шаблоны не лучшее решение.
Спасибо за развернутое объяснение, попробую на практике. ld-скрипты это то что я пропустил из-за их сложности, остановился на первом рабочем примере из того, что удалось найти.
В общем то new мне не нужен в проекте, поэтому я глубже не копал. Но думаю, вытянуть только часть функционала C++ связанного с конструкторами, и не тянуть исключения и прочее, будет достаточно сложно. Кстати, при создании объекта статически конструкторы не отрабатывают. Тоже нужно разибираться, почему.
Да, но они и не рабатают как надо. Выше я написал, что компилятор из всего конструктора выполняет только инициализацию переменных, которые указаны до фигурных скобок. Само тело конструктора не выполняется.
Да я особо не разбирался, просто достаточно упомянуть оператор 'new' и размер бинарника увеличивается на 40к. Это сам механизм конструкторов и выделения памяти, даже если сами фукнции пустые.
Причина в ограниченных ресурсах памяти FLASH и производительности. Конструкторы тянут достаточно много сервисного кода за собой, зато при их отсутсвии код сравним с генерируемым из С.
Из соображения что матрица F в выражении u_k = -Fx_k — константа, а x_k — вектор состоящий из x, dx, d2x в разных комбинациях. После перемножения и группировок получим все те же константы при x, dx, d2x что очень похоже на PID.
Но это только мое предположение, не судите строго :)
Уже давно использую "C++ с ограничениями" для микроконтроллеров, так как читабельнсть и структурирование кода в разы выше, чем на С. Если проект большой и сложный, то C++ здорово выручает. При этом практически не отличается от C в плане потребления ресурсов. Вот ограничения:
не используется динамическое выделение памяти и куча вообще. Все место отдано под стэк. Как правило, переменные состояния нужны на все время функционирования программы и прекрасно живут в статике. Если нужно выполнить операцию с большим расходом памяти, это делается объявлением переменных и объектов класса внутри функции. Такой подход автоматически избавляет от необходимости следить за фрагментацией кучи.
не используются конструкторы и деструкторы, кроме пустых конструкторов прямой инициализации:
SomeClass(int v1, int v2): member1(v1), member2(v2) {}
они компилятором правильно разворачиваются без доп. кода.
Если предполагается создать всего один экземпляр класса, то все функции и члены класса — статические. Результат компиляции ничем не отличается от С, но выигрывает синтаксисом.
Использование интерфейсов и мультинаследования бывает очень удобно, но приводит к расходу памяти (все нужные объекты всех реализаций создаются статически, и потом просто выбирается необходимая реализация). Впрочем, тут можно очень аккуратно использовать malloc — как правило, выбор реализаций интерфейса зависит от настроек и создается один раз при старте системы, удалять его не нужно и дефрагментация не страшна.
Ну у вас же 2 коэффициента a и b: один на расстояние — аналог Kp, другой при производной — аналог Kd:
u = Kpx + Kddx
Похоже что и в общем нелинейном случае если кол-во пременных состояния не более трех, управление сводится к PID, Если больше, то к одной из его каскадных версий или версии с 2-мя степенями свободы. И в этом случае LQR полезен тем что аналитически найдет коэффициенты под заданный критерий.
Вот реальный пример: STM32F303 с ядром M4F, компилятор gcc (arm-none-eabi). Использую fabsf(val) в коде — заменяется на одну инструкцию VABS.F32. Но в функциях из <math.h>, например atan2f() вызовы fabsf() ведут на софтовую реализацию. Притом что в этой фукнции ЕСТЬ другие инструкции FPU, то есть линкер подключает вроде как правильную библиотеку, заточенную под сопроцессор. Что это, недоработки реализации?
Вот пример такого гибрида http://beagleboard.org/BLACK, только сопроцессор там очень слабенький, порты IO и немного DSP.
Удаление неиспользуемых функций включено.
Но это только мое предположение, не судите строго :)
SomeClass(int v1, int v2): member1(v1), member2(v2) {}
u = Kpx + Kddx
Похоже что и в общем нелинейном случае если кол-во пременных состояния не более трех, управление сводится к PID, Если больше, то к одной из его каскадных версий или версии с 2-мя степенями свободы. И в этом случае LQR полезен тем что аналитически найдет коэффициенты под заданный критерий.