Как стать автором
Обновить
11
0
Стулов Тихон Сергеевич @Kudesnick33

Разработчик встраиваемых систем

Отправить сообщение

Разработка hexapod с нуля (часть 12) — новое ядро передвижения

Время на прочтение11 мин
Количество просмотров9.2K

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

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

В этой статье расскажу, насколько простая может быть математика ядра передвижения гексапода и какие красивые движения можно выполнять с помощью неё. Разработка продолжается, и я переписал около 80% математики. Это позволило выкинуть явное указание координат точек назначения во время движения — траектории теперь строятся в реальном времени. Все технические подробности в статье. Как всегда, вас ждёт фото и видео.
Читать дальше →

Управление Яндекс.Станцией и другими колонками с Алисой из Home Assistant

Время на прочтение4 мин
Количество просмотров122K

Мы привыкли называть умными устройства, которыми можем управлять, не вставая с дивана. Включить лампочку, вентилятор, кофеварку или стиральную машину.


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


В январе 2020 кто-то обнаружил, что Яндекс.Станция поддерживает некий локальный протокол. На GitHub начали появляться проекты по управлению Яндекс.Станцией. Мне хватило пару часов, чтоб разобраться и выпустить первую версию компонента для Home Assistant. Это достаточно популярная система домашней автоматизации, написанная на языке Python.


На сегодняшний день компонент поддерживает управление всеми колонками с Яндекс Алисой и при желании может выглядеть так:


Читать дальше →

Особое мнение Ричарда Фейнмана по гибели шаттла «Челленджер»

Время на прочтение19 мин
Количество просмотров46K

В процессе чтения неплохого поста про американскую SLS наткнулся на цитату из документа, на который часто ссылаются в постах про Space Shuttle, но целиком на русском я его найти не смог - особое мнение Ричарда Фейнмана в составе комиссии по расследованию катастрофы шаттла "Челленджер" в 1986 году.

Решил сделать перевод для Хабра; все совпадения с сегодняшними инженерными практиками случайны (грустный вздох).

Читать далее

10++ способов работать с аппаратными регистрами на С++ (на примере IAR и Cortex M)

Время на прочтение13 мин
Количество просмотров20K
Choosing the safest path
Рис. И. Кийко

Всем доброго здравия!

Помните наверное бородатый анекдот, а может быть и правдивую историю про то, как студента спрашивали о способе измерить высоту здания с помощью барометра. Студент привел, по-моему около 20 или 30 способов, при этом не назвав прямого(через разницу давления), которого ожидал преподаватель.

Примерно в том же ключе я хочу продолжить обсуждение использования С++ для микроконтроллеров и рассмотреть способы как можно работать с регистрами используя С++. И хочу заметить, что для достижения безопасного обращения к регистрам простого пути не будет. Попытаюсь показать все плюсы и минусы способов. Если вы знаете еще способы, кидайте их в комментарии. Итак начнем:
Читать дальше →

Устройство файла UEFI BIOS, часть первая: UEFI Capsule и Intel Flash Image

Время на прочтение7 мин
Количество просмотров209K
Выпуск материнских плат на чипсетах Intel шестой серии (P67 и его братьях) принес на массовый рынок ПК новый вариант BIOS — UEFI. В этой статье мы поговорим об устройстве файлов UEFI Capsule и Intel Flash Image.
Структура EFI Firmware Volume и полезные в хозяйстве патчи будут описаны во второй части.
Читать первую часть

Разработка hexapod с нуля (часть 11) — стабилизация

Время на прочтение6 мин
Количество просмотров6.9K

Всем привет! Разработка медленно продолжается и я внес достаточно важные изменения в ядро передвижения, так же появилась новая версия платы управления. В результате гексапод теперь умеет выравнивать свое тело благодаря наличию акселерометра и возросла скорость передвижения. Все технические подробности в статье. Как всегда вас ждет фото и видео.

Этапы разработки:
Часть 1 — проектирование
Часть 2 — сборка
Часть 3 — кинематика
Часть 4 — математика траекторий и последовательности
Часть 5 — электроника
Часть 6 — переход на 3D печать
Часть 7 — новый корпус, прикладное ПО и протоколы общения
Часть 8 — улучшенная математика передвижения
Часть 9 — завершение версии 1.00
Часть 10 — датчики касания
Часть 11 — стабилизация

Читать далее

Интеграция PVS-Studio в uVision Keil

Время на прочтение14 мин
Количество просмотров3.7K

Я занимаюсь разработкой для встраиваемых систем (в основном, под STM32 и Миландр), в качестве основной среды я использую uVision Keil. И, поскольку пишу я на С и С++, уже долгое время меня мучает вопрос – правильно ли я пишу код? Можно ли так?


Не, он конечно компилируется, но это же С++, язык, где «program is ill-formed, no diagnostic required» — это норма.


Соответственно, на протяжении нескольких лет я донимал руководство просьбами купить нам лицензию PVS-Studio и, наконец, когда моя просьба неожиданно совпала с моментом, когда нужно было срочно потратить выделенные на закупку ПО деньги, нам ее все-таки купили!


Радости моей с одной стороны не было предела, но с другой оказалось, что не все так хорошо; сходу PVS-Studio встраивается только в Visual Studio (что порадовало отдел разработки под десктопы) и продукты от Jetbrains (CLion, Rider, Idea, Android Studio), для некоторых других систем сборки тоже предусмотрены готовые сценарии, а вот для Keil’a заявлена только поддержка компилятора – и все. А значит, нужно заниматься интеграцией. Кто будет этим заниматься? Ну, мне же больше всех надо…


Читать дальше →

Запуск сложных C++ приложений на микроконтроллерах

Время на прочтение8 мин
Количество просмотров14K
image Сегодня никого не удивить возможностью разрабатывать на C++ под микроконтроллеры. Проект mbed полностью ориентирован на этот язык. Ряд других RTOS предоставляют возможности разработки на С++. Это удобно, ведь программисту доступны средства объектно-ориентированного программирования. Вместе с тем, многие RTOS накладывают различные ограничения на использование C++. В данной статье мы рассмотрим внутреннюю организацию C++ и выясним причины этих ограничений.
Читать дальше →

Zynq 7000. Собираем Linux для платы QMtech

Время на прочтение21 мин
Количество просмотров30K

В этой статье я решил сделать небольшое отступление от общей линии повествования и зарулю на дорогу Linux. За то непродолжительное время, что я работаю с Zynq 7000, в тематических чатах я видел много вопросов насчет того, как запустить Linux на отладке. Я в общем-то, недолго думая, сел проштудировал документацию, примеры и завёл его своими руками под ту плату, что у меня есть в распоряжении. После этого я решил обобщить свои знания по этому вопросу и описать процедуру сборки, подготовки загрузочного образа Linux, который включает в себя U-boot, Device Tree Source, RootFS, и само ядро Linux. В дополнение к этому, я решил немного усложнить задачу и выяснил, как можно поморгать светодиодом подключенным к PL-части устройства из пространства пользователя Linux.

Обо всём этом я написал в этой статье. Всем интересующимся - добро пожаловать под кат.

Читать далее

Программируем Raspberry Pi на голом железе

Время на прочтение2 мин
Количество просмотров101K
До сих пор Raspberry Pi остается одним из самых популярных технологических гаджетов.На эту плату Вы можете установить практически любую операционную систему. Но сегодня мы поговорим о том, как писать программы для этой платы без операционной системе, пользуясь лишь аппаратными средствами.

В чем подвох?


На первый взгляд задача кажется тривиальной: скачиваем keil, создаем проект… Но все не так просто. Все среды программирования(keil, IAR, Atolic) поддерживают максимум ARM9.У нас же ARM11. Это связано с негласным правилом, что на голом железе пишут до ARM9, а после на Линуксе. Но все-таки есть одна лазейка: arm-none-eabi-gcc поддерживает любой ARM.
Вторая проблема заключается в том, что под данный процессор(BCM2835) нет никаких конфигурационных файлов, header'ов и т.д. Здесь нам на помощь придет загрузчик Raspberry Pi. И ничего, что он пропритетарный. Он выполняет две функции: инициализирует процессор и его периферию, а также передает управление ядру kernel.img. Мы просто замаскируем свою программу под ядро и загрузчик её запустит.
Читать дальше →

Можно ли использовать С++ вместо Си для небольших проектов в микроконтроллерах

Время на прочтение23 мин
Количество просмотров50K
Существует мнение, что использование С++ при разработке программного обеспечения для микроконтроллеров это как стрельба из пушки по воробьям. Мол код получается большого размера и неповоротливый, а мы привыкли бороться за каждый бит в ОЗУ или ПЗУ. И программное обеспечение для микроконтроллера может быть написано обязательно на Си. Действительно, ведь язык Си был задуман как альтернатива ассемблеру, код должен был быть такой же компактный и быстрый, а читаемость и удобство разработки позволять легко писать довольно большие программы. Но ведь когда-то и разработчики на ассемблере говорили тоже самое про Си, с тех пор утекло много воды и программистов, использующих только ассемблер, можно по пальцам пересчитать. Конечно, ассемблер еще играет важную роль в разработке кода для быстрых параллельных вычислений, написании ОСРВ, но это скорее исключение из правил. Так же как когда-то Си пробивал себе дорогу в качестве стандарта для встроенного ПО, так и язык С++ уже вполне может заменить Си в этой области. С++ стандарта С++14 и современные компиляторы имеют достаточно средств для того чтобы создавать компактный код и не уступать по эффективности коду, созданному на Си, а благодаря нововведениям быть понятнее и надежнее. Ниже приведен код поиска наименьшего числа в массиве из 5 целых чисел на двух языках Си и С++ на компиляторе IAR for ARM 8.20 с отключенной оптимизацией.
Читать дальше →

Малиновый Прог против Интернета Кирпичей, или Raspberry Pi с графикой на read-only microSD

Время на прочтение16 мин
Количество просмотров87K
Запуск Raspberry Pi с полной поддержкой графики на microSD, навсегда остающейся в режиме read-only после установки системы. Отсутствие какой-либо записи данных на флэш-память повышает надёжность устройства, приближая его к промышленному классу изделий. Пошаговая инструкция. Небольшой театр инженерного абсурда для развлечения аудитории.


Мне понадобилось сетевое устройство с открытым кодом и выходом HDMI, и я решил попробовать Малиновый Прог. Да, я именно так предлагаю переводить Pi: Прог. Понятное дело, даже одноплатнику нужна операционка. И вот, захожу я на официальный сайт, ожидая встретить там подробное руководство по созданию суровой, неломаемой Вещи à la turnkey box. Но народ, как ни в чём не бывало, устанавливает Ubuntu (т.е. Raspbian Jessie) прямо на microSD, размещая и swap там же. Как обычный десктоп, face palm.

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

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

«Genghis», «Attila» и «Hannibal» — роботы созданные для завоевания Марса, но ставшие прототипом пылесоса

Время на прочтение8 мин
Количество просмотров2.9K


Genghis («Дженгис») или «Чингис» — шестиногий робот, похожий на насекомого, который был создан робототехником Родни Бруксом из Массачусетского технологического института. Брукс хотел решить проблему того, как сделать роботов разумными, и предположил, что можно создавать роботов, демонстрирующих интеллект, с помощью «архитектуры подчинения», которая представляет собой тип реактивной роботизированной архитектуры, в которой робот может реагировать на окружающий мир. В его статье «Интеллект без репрезентации», которая до сих пор пользуется большим уважением в области робототехники и искусственного интеллекта, излагаются его теории по этому поводу.

Болезнь Альцгеймера

Время на прочтение12 мин
Количество просмотров29K

Возможно, вы слышали присказку: «Господи, отбери всё, только не лишай разума». Но, к сожалению, старость у всех разная, и зачастую, чтобы потом не страдать раскаянием, выбирать её надо чуть ли не с детства. И что самое печальное, наше общество так или иначе привыкло к стереотипу «тупеющих стариков». Мало кто знает, что под старческой деменцией, или, проще говоря, маразмом, или возрастным слабоумием, скрываются вполне реальные заболевания. Зачастую тот, кого мы называем сумасшедшим стариком - просто больной человек, которого общество бросило ещё тогда, когда его можно было спасти. Как не превратиться в монстра и не сойти с ума на пенсии?

Альцгеймер, Паркинсон и болезнь Пика. Добро пожаловать в один из постов серии «Всадники маразма» на ScientaeVulgaris.

Читать далее

Разработка измерительного прибора ИРИС

Время на прочтение8 мин
Количество просмотров6.2K
image
Приветствую, сообщество Хабра. Недавно наша компания выпустила на рынок контрольно-измерительный прибор ИРИС. Являясь главным программистом этого проекта, хочу рассказать вам про разработку прошивки прибора (По оценке руководителя проекта прошивка составляет не более 30% от общего объема работ от идеи до серийного производства). Статья в первую очередь будет полезна начинающим разработчикам в плане понимания трудозатрат на «реальный» проект и пользователям, которые желают «заглянуть под капот».
Читать дальше →

Создание простого чат-бота в VK на Python 3

Время на прочтение6 мин
Количество просмотров204K

Создание основы для работы бота будет состоять из следующих этапов:


  1. Создание бота в ВК
  2. Генерирование API- ключа
  3. Создание программы бота через LongPoolVK

Для кого эта статья?


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

Что есть в этой статье?


Создание основы бота. После этого его можно будет запрограммировать как-угодно. Автоматизировать какую-то рутину или использовать как собеседник.

Улучшенная (слегка усложненная версия бота). Я решил сначала представить простой процедурный код бота, а затем слегка усложнить его, добавив функции, значительно улучшающие работу бота.

Добавление функции передачи погоды. Научим бота говорить нам погоду.
Читать дальше →

Динамическая память в системах жёсткого реального времени

Время на прочтение6 мин
Количество просмотров17K

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



(КДПВ – см. аннотацию к диаграмме в конце)

Читать дальше →

Миникомпьютер из роутера с OpenWRT: разрабатываем USB-видеокарту

Время на прочтение25 мин
Количество просмотров186K

Добрый день, уважаемые хабровчане. В этом цикле статей мы с вами пройдем достаточно длинный, но весьма интересный путь по превращению обычного роутера в мини-компьютер с LCD-дисплеем. Для этого мы разработаем сначала USB-видеокарту на базе микроконтроллера STM32F103, потом тестовый драйвер, который позволит нам выводить на него графику, и, наконец – полноценный драйвер фреймбуффера, благодаря которому можно будет запустить настоящие графические приложения, такие как x-сервер. Заодно мы научимся включать наш код в дерево исходников OpenWRT, допиливать его ядро и делать прочие полезные вещи.
Ну а в самом конце мы получим результат, который, я надеюсь, вызовет ностальгическую слезу у многих читателей. Я постараюсь излагать материал таким образом, чтобы в конце каждого этапа мы получали осязаемый результат, не дающий угаснуть энтузиазму. Итак, начнем.
Читать дальше →

Доказательное планирование

Время на прочтение13 мин
Количество просмотров41K
Примечание переводчика: оригинальная статья была написана в 2007-м году, однако, на мой взгляд, полностью сохраняет актуальность и сегодня.

Разработчики программного обеспечения не любят составлять план работ. Обычно пытаются вовсе от него отказаться. «Закончу, когда закончу!», — говорят они, ожидая, что этот смелый и веселый поступок вызовет одобрение у босса, а о планировании будет успешно забыто.

Большая часть расписаний, с которыми вы встретитесь, будет представлять из себя бездушные отписки. Совершенно забытые, они хранятся в каком-нибудь общем каталоге. После выпуска продукта с опозданием на пару лет странный парень, в чьем офисе, говорят, видели картотеку, принесет на обсуждение причин провала старую распечатку, которую все засмеют. «Только гляньте! Мы запланировали две недели, на переписывание системы с нуля на Ruby!»
Читать дальше →

Кого вы пытаетесь впечатлить своими дедлайнами?

Время на прочтение5 мин
Количество просмотров19K
Подсказка: явно не ваших пользователей.

Поднимите руку те, чья компания провозгласила «Клиентоориентированность» как одну из своих корпоративных ценностей. Для тех из вас, кто читает этот текст на Хабре и не видит аудиторию: почти весь зал поднял руку, кроме пары человек сзади.

Они работают в Oracle.

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

Одержимость клиентами — полезная вещь, но есть ещё одна вещь, которой одержимы многие компании — это сроки. Дедлайны — это хорошо. «Будет готово, когда я закончу» может быть отличной (или даже рекомендованной) стратегией для двух человек работающих над одним приложением. Но когда вы работаете в компании с более чем двумя сотнями сотрудников, вам требуется некоторое понимание того, что происходит; примерное представление о том, когда ваши пользователи смогут использовать ваши новые свистелки и перделки.

Смею утверждать, что жестко установленные сроки — это плохие сроки, и если у вашей компании такие есть, возможно следует пойти еще дальше, и убрать пункт об «клиентоориентированности» из списка корпоративных ценностей. Потому что, хотите верьте, хотите нет, пользователям плевать на заваленные спринты.

Дедлайны нужны в первую очередь не клиентам, а менеджменту.
Читать дальше →

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность