Pull to refresh
59
7

Инженер

Send message

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

Reading time8 min
Views5.8K

Привет, Хабр! Меня зовут Лёша Лещанкин, я руковожу проектом Humanoids в Яндексе. В начале 2025 года мы запустили это направление при поддержке фонда технологических инициатив компании — Yet Another Tech Fund, созданного специально для реализации новаторских идей сотрудников. Наша цель — создать гуманоидных роботов, которые смогут уверенно и безопасно работать рядом с людьми в самых разных условиях: от логистики и промышленности до сферы обслуживания.

В рамках нашего проекта мы тестируем разные RL‑модели. И сегодня расскажу об одном из методов, который позволил нам перейти от «робот дёргается и падает» к «робот ходит плавно 500 шагов подряд» — Lipschitz‑Constrained reinforcement learning.

Читать далее

Лаборатория в смартфоне: изучаем эффект Доплера на палочках в Android

Level of difficultyMedium
Reading time8 min
Views2.7K

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

Статья предназначена для девочек и мальчиков, а также их родителей.

Плывём по волнам!

Создание своего ядра на Rust

Level of difficultyHard
Reading time19 min
Views9K

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

Читать далее

Отсутствие динамической аллокации в embedded мире

Level of difficultyEasy
Reading time5 min
Views6K

Когда мы разрабатываем под embedded, нам приходится сталкиваться с такими флагами компиляции как -nostdlib -fno-exceptions -fno-rtti.

Во многих средах нет malloc/free (new/delete) и вообще нет встроенного выделения памяти.

Использование «больших» стандартных контейнеров C++ (например, std::vector) нередко исключено

В результате приходится решать задачу «ручного» управления памятью. Ниже рассмотрим два подхода:

Читать далее

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

Level of difficultyEasy
Reading time3 min
Views460

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

Читать далее

Разработка автономного робота для навигации по городу

Level of difficultyEasy
Reading time2 min
Views1.4K

Как мы взяли первое место на Кубке РТК "Высшая лига" с TurtleBot3 на ROS2

В рамках регионального этапа хакатона “Кубок РТК: Высшая лига”, который проходил 24-25 мая в Москве, наша команда misis_robo_family разработала автономного робота с функцией распознавания дорожных знаков и возможностью следовать по маршруту, используя эти знаки. Этот проект объединил в себе современные технологии компьютерного зрения и автономной навигации.

Читать далее

Использование библиотек для программирования ПАК Рудирон

Level of difficultyEasy
Reading time24 min
Views589

Продолжим серию статей про ПАК «Рудирон» и его программирование. Сегодня мы осветим тему использования библиотек при создании своего программного обеспечения.

Библиотеки являются мощным инструментом при работе с проектами. Особенно когда используются внешние модули, подключенные к Рудирону. Библиотека – файл или набор файлов, к котором используется такой же код по синтаксису, как и в основном тексте программы. Можно подключить библиотеку в свой код и использовать тот функционал, который она нам в этом случае предоставляет, а вариантов там может быть очень много: готовые функции высокого уровня для работы с внешними датчиками, различными модулями, экранами и т.п., для работы с внутренней периферией микроконтроллера (часы, таймеры, АЦП), библиотеки различных математических функций и многое другое, всего и не перечислить. Для опытного программиста это способ сократить время разработки программы, а для начинающего – готовые рабочие примеры работы с внешней периферией.

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

Шаблоны и примеры проектов ПАК Рудирон размещены в репозитории: https://gitflic.ru/project/akvarius-rudiron/rudiron-projects

Читать далее

l9ec: волшебный патч ядра Linux

Level of difficultyMedium
Reading time10 min
Views19K

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

Читать далее

Разработка DIY компьютера на базе FPGA

Reading time12 min
Views15K

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

Это статья о том, как я занялся разработкой электроники, не имея почти никакого опыта в этой сфере. Цель - сделать устройство с FPGA на котором можно загрузить Linux, подключить экран и клавиатуру, а потом прямо там писать и компилировать код.

Зачем это нужно? Это хобби. Практической ценности не имеет. Просто я так развлекаюсь. А сейчас у меня, к моему собственному удивлению, все задуманное получилось, и я хочу показать и похвастаться.

Читать далее

От космической баллистики до kernel bypass — все, что вы хотели знать про C++ и Linux

Level of difficultyEasy
Reading time5 min
Views4.6K

Заходят как-то в лофт разработчик на С++, доктор математических наук и инженер-программист Linux kernel — и вместо шутки начинается System Level Meetup. 24 мая в Санкт-Петербурге соберутся те, кто пишет код на уровне железа, оптимизирует ядро Linux и проектирует архитектуру сложных систем. Два трека — C++ и Linux kernel, десятки докладов, живое общение, стенды, квесты и железо от YADRO. Регистрируйтесь и подключайтесь — онлайн или офлайн.

Читать далее

Задача про мышей и отраву

Level of difficultyEasy
Reading time6 min
Views11K

Есть 1000 одинаковых колб с прозрачной жидкостью.

В 999 колбах вода, а в одной случайной - отрава.

Если мышь попробует отраву, то она погибнет через 1 час.

Как найти отравленную колбу за минимальное время?

Читать далее

Процессор на коленке ч.1

Level of difficultyMedium
Reading time11 min
Views11K


Предыстория


Захотелось мне как-то перевести управление станком на ПЛИС, а для этого понадобилось ядро процессора. Поиск на opencores не особо помог, x86 лицензированный, ARM лицензированный, NIOS… ну, вы поняли. Если выдумывать свою систему команд, может получиться криво, и главное, где брать компилятор. В общем, всё было сложно, так что на время идею пришлось отложить.
С недавних пор ситуация изменилась, архитектура RISC-V пошла в массы.

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

Дискретные тригонометрические функции, машинный эпсилон и автоматическое дифференцирование

Level of difficultyHard
Reading time7 min
Views5.5K

Попалась мне недавно статья Синус, косинус, квадратный корень FixedPoint. Автор размышляет как можно не затратно рассчитывать координаты и углы в микроконтроллере. Попробовал я подсказать автору пару аппроксимаций, но он оказался разговорчив только на тему "упадка автоматизации в РФ", а по делу как то не сложился диалог. Посмотрел, такие статьи не редкость. Например, очень хорошая статья Как посчитать синус быстрее всех на Xабре. В общем разгрузил себе голову на майских праздниках от главного хобби - геометрической алгебры.

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

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

Автоматическим дифференцированием можно назвать любую конечную разность, например dy=(y(x+ε)-y(x-ε))/(2*ε). Разность взята центральная, так как она дает меньшую погрешность.

 ε это машинный ноль. За счет округления до младшего бита его главное свойство: ε^2=0.

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

Читать далее

Как нейросети, RL и байесовскую оптимизацию стали использовать на ускорителях заряженных частиц

Reading time6 min
Views3.2K

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

Ускорители заряженных частиц — сложные установки, которые требуют высокой точности работы. Даже небольшое отклонение пучка, сравнимое с долей толщины человеческого волоса, может иметь значение. Чтобы справляться с такими задачами, всё чаще используют методы машинного обучения. 

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

Читать далее

Быстрое приближённое умножение и деление чисел с плавающей точкой

Level of difficultyHard
Reading time27 min
Views6.9K

Особенности формата хранения чисел с плавающей точкой позволяют быстро находить приближённое значение логарифма, и, за счёт этого, выполнять умножение и деление. Результат при этом будет неточным, однако может быть применимым там, где особая точность не требуется.

Читать далее

Когда хочется портировать старые игры, но нет ни сил, ни времени: запускаем отсекатель лучей на RISC-V RV32I

Level of difficultyMedium
Reading time5 min
Views4.6K

Всех, кто работает с софт-ядрами, наверное, можно разделить на две категории: первые хотят запустить на своем ядре Linux, вторые — DOOM. Я отношусь ко второй: идея запустить DOOM на ядре YRV, что я синтезирую на отладках, любезно предоставленных FPGA-Systems.ru, преследует меня постоянно и не дает спать.

Как запустить DOOM с ходу, непонятно, ведь у меня все-таки некоммерческий микроконтроллер. Поэтому начну с подготовительного упражнения, чтобы понять, что возможно реализовать на аппаратной части. Когда мы говорим про DOOM, то вспоминаем другие игры любимой компании id Software — Wolfenstein 3D, Catacomb 3D и Hovertank 3D. В них все начинается с алгоритма отсечения лучей (raycasting), с которым и будем поработать. С raycasting можно получить и doom-образный геймплей, надо лишь улучшить разрешение и текстуры.

Читать далее

Релятивистская трассировка лучей

Level of difficultyHard
Reading time14 min
Views12K

В этой статье я покажу как можно самому, бесплатно и без смс, нарисовать черную дыру при помощи OpenGL, в полном соответствии с ОТО.

Для этого, мы сначала выведем уравнения движения лучей света, напишем интегратор Рунге-Кутты на GLSL, и наконец, объединив одно с другим, получим фрагментный шейдер, который вычисляет путь лучей, отправленных из камеры назад во времени.

Читать далее

Когда ты больше не просто пишешь код. Ты управляешь энергией

Reading time7 min
Views13K

Привет, Хабр!

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

Да, задачи были интересными. Команда — отличной. Но где-то внутри появилась пустота. Хотелось делать что-то настоящее. Осязаемое. Что-то, где за твоим кодом — больше, чем UI и API. Хотелось влиять на реальный мир.

Так я попал в мир электропривода.

Читать далее

С борта МКС впервые по лазерному каналу была передана широкополосная информация на наземный пункт

Reading time4 min
Views38K

2 октября 2012 года с Российского сегмента Международной космической станции впервые по лазерному каналу была передана широкополосная информация на наземный пункт


В рамках космического эксперимента (СЛС) по отработке аппаратуры и демонстрации российской технологии создания космических лазерных систем передачи информации, проводимого ОАО «НПК «СПП» совместно с ОАО «РКК «Энергия», осуществлен сеанс передачи информации с терминала связи, установленного на борту РС МКС, на лазерный терминал наземного пункта станции оптических наблюдений «Архыз» на Северном Кавказе (филиал ОАО «НПК «СПП»).
Была передана информация общим объемом 2,8 Гигабайт со скоростью 125 Мбит/с.
Этот шаг открывает дорогу к широкому внедрению в космическую технику России лазерных линий связи, которые при меньших массогабаритных параметрах бортовой аппаратуры потенциально могут обеспечивать исключительно высокую скорость информационного потока (до десятков гигабит в секунду).

Новости Федерального космического агентства
Читать дальше →
1
23 ...

Information

Rating
1,235-th
Registered
Activity

Specialization

Embedded Software Engineer
Middle
Linux
C
C++
Embedded Linux
Embedded system
Real-time operating system
Python
English
Assembler
Programming microcontrollers