Управление внешним устройством в автомобиле с помощью кнопок на руле
Иногда возникает необходимость управлять каким-либо внешним устройством в автомобиле, к примеру видео регистратором или лебедкой. В этом случае, обычно, устанавливаются дополнительные кнопки. Но иногда хочется сделать скрытую установку, что б интерьер автомобиля остался неизменным. Этим сегодня и займемся, в качестве автомобиля будет VW Polo Sedan с установленным блоком мониторинга Vega MTX, а в качестве нагрузки будет кнопка «аварийки». Сделаем так, что б при удержании кнопки «ok» на руле 3 раза моргала «аварийка».
Под катом большое количество картинок и видео.
Один раз меня попросили сделать кнопку «спасибо» на автомобиле Renault Kaptur 2012 года выпуска. Нажимая на эту кнопку автомобиль должен 3 раза моргнуть «аварийкой». У этого автомобиля был аналоговый подрулевой джойстик. Одну из кнопок на подрулевом джойстике подключил к реле времени, которое подавало импульс, длинной в 3 секунды на кнопку «аварийки». Позже владелец очень хорошо отзывался о новой функции своего автомобиля и я решил попробовать повторить это на своем Polo Sedan.
В отличии от Renault Kaptur у меня нет аналоговых кнопок, но сигнал со всех кнопок на руле можно найти в CAN шине. В качестве кнопки была выбрана кнопка «ok» на руле автомобиля. В моей комплектации эта кнопка, почти нигде не используется. Пока я нашел что с помощью него можно выставлять срабатывание «лимитера», когда приборка пищит при превышении заданной скорости. В любых других случаях нажатие на эту кнопку ничего не делает.
Можно было реализовать задуманное с помощью самодельной электроники, но у меня в автомобиле уже стоял блок телематики Vega MTX, потому было принято решение попробовать реализовать данный функционал с помощью него.
Нажатие этой кнопки можно найти в CAN шине, которая находится за магнитолой. Подробно поиск подобных датчиков я описывал в своей предыдущей статье про расшифровку CAN шины.
В нашем случае данные нашлись по адресу 5BF. При нажатии на кнопку «ok» в нулевом байте появляется цифра 40 в десятичном формате. Когда кнопки не нажаты, в нулевом байте будет 0. Надо будет сделать датчик, в котором будут отображаться эти изменения. В моем случае это датчик «Кнопки на руле».
Теперь разберемся с тем, как управлять кнопкой «аварийки». К сожалению, Polo Sedan не может управлять «аварийкой» по CAN шине, поэтому придется управлять ей по аналогу. Для этого придется протянуть провод от бело-синего провода из разъема кнопки «аварийки». Если на этот провод кратковременным импульсом подать «землю», то аварийка включается. Аналогичным образом она выключается.
Подавать «землю» будем с помощью цифрового выхода Vega MTX. Тут мы имеет 4 цифровых выхода, использовать будем третий выход (синий провод).
Теперь нужно задать алгоритмы, по которым будет работать кнопка.
Во-первых, я не хочу, что б аварийка включалась сразу по нажатию на кнопку «ok», я хочу, что б она включалась после секундного удержания кнопки. Делаю я это для защиты от случайного нажатия и для того, что б сохранить функционал данной кнопки.
Во-вторых, нужно выключать аварийку спустя 3 вспышки. 3 вспышки «аварийка» делает за 2 секунды.
Что бы ввести все эти алгоритмы надо перейти в настройки Vega MTX, далее перейти на вкладку «Сценарии». Тут можно задать условия, при которых совершаются какие-либо действия. Для реализации мне пришлось использовать 3 сценария.
Вообще сценарии не предназначены для таких операций, поэтому пришлось долго экспериментировать до получения нужного результата.
Первый сценарий служит для создания задержки в секунду, после нажатия на кнопку «ok». Он срабатывает, если в CAN датчике значение станет равно 40, а внешний цифровой выход 1 будет равен 0.
Тут поясню про внешние цифровые выходы. Если для задачи требуется больше, чем 4 цифровых выхода, то к Vega MTX можно подключить дополнительный внешний модуль, в котором будет 15 цифровых выходов и еще множество других входов и выходов. Так как у нас этого внешнего блока нет, то мы можем использовать эти выходы, как переменные, помещая туда 0 или 1 (включено или выключено). По умолчанию все выходы выключены. Внешний цифровой выход 1 будет переменной, которая показывает, что с момента нажатия на кнопку «ok» прошла одна секунда.
Наш сценарий следует читать так: сейчас нажата кнопка «ok», и нажата она менее одной секунды. Если эти условия совпадают, то выполняется действие: выключается внешний цифровой выход 1 на 1 секунду. Значит он переходи в состояние «выкл», но через секунду он перейдет в состояние «вкл».
Теперь перейдем ко второму сценарию.
В отличии от первого сценария он сработает при датчике «Кнопки на руле» равном 40 и при внешнем цифровом входе, равному 1. То есть, нажата кнопка «ok» и внешний цифровой выход 1 равен 1. А внешний цифровой выход станет 1 только спустя секунду после срабатывания первого сценария.
Теперь разберем, что произойдет после срабатывания второго сценария.
Тут дается импульс длинной 1 секунду на цифровой выход 3, к которому подключен вывод с кнопки «аварийки», тем самым мы ее включаем.
После этого нам надо сбросить 0 внешний цифровой выход 1. Поэтому мы включаем внешний цифровой выход 1 на 1 секунду. То есть спустя 1 секунду после срабатывания сценария внешний цифровой выход 1 станет 0.
Последним пунктом мы переводим на 2 секунды 15 в положение 0. Спустя 2 секунды после срабатывания скрипта внешний цифровой выход 15 станет 1. Внешний цифровой выход 15 используется в качестве переменной, что «аварийка» была включена с помощью кнопки на руле. 2 секунды – это то время, за которое машина моргнет «аварийкой» 3 раза.
Теперь последний сценарий, который должен послать импульс, на выключение «аварийки».
Этот сценарий сработает, когда внешний цифровой выход 15 станет равным 1, то есть через 2 секунды после срабатывания второго сценария.
После срабатывания третьего скрипта мы посылаем импульс на выключение «аварийки», и сбрасываем в ноль (выключено) внешний цифровой выход 15.
На этом работа со сценариями заканчивается, сохраняем результат в Vega MTX и проверяем работу устройства.
Таким образом можно сделать управление любым устройством с помощью CAN шины автомобиля. Управление не ограничивается только кнопками на руле. К примеру, можно задать включение устройства по скорости автомобиля, по открытию окна или двери, по запуску двигателя, по оборотам двигателя, по температуре двигателя и т.д. Можно сделать блокировку дверей при наборе определенной скорости (если завод изготовитель не предусмотрел такой возможности), включение камеры при открытии окна и многие другие варианты.
Все вышеописанное есть в видеоформате, а также там есть пример включения аварийки при включении задней передачи.
Подключение кнопок управления магнитолой по CAN
Не редкость, что на автомобилях выходят из строя штатные мультимедийные системы,
особенно если в них используются многодисковые CD-чейнджеры. Стоимость ремонта или замены такого неисправного устройства может составлять большую сумму.
Иногда целесообразнее приобрести переходную рамку и установить современную мультимедийную систему(далее МС), недорогую и гораздо более функциональную.
Останется только задействовать кнопки управления на руле для управления ею.
Как правило, многие МС (made in CHINA) могут легко адаптироваться к штатным резистивным кнопкам руля.
Но вот по штатной автомобильной системе CAN их мало.
Имеем автомобиль Volvo S60 2006 года (аналогично и у XC70, XC90).
Родная МС пережевала и накрошила CD — диски, при включении впадала в конвульсии,
и в конце концов была выкинута на мороз.
В данном автомобиле, блоки кнопок на руле (каждый на микроконтроллере),
передают информацию по LIN – шине о их состоянии в центральный электронный блок автомобиля — CEM.
А дальше по низко скоростной CAN шине, в МС и другие заинтересованные в звуке блоки.
В качестве новой МС владелец выбрал магнитолу Pioneer, имеющий специальный вход для
подключения дистанционного управления:
В интернете полно схем и решений использования данного входа, приведу для примера такой рисунок:
Подключение проводов питания, зажигания, громкоговорителей думаю читателей мало интересна,
все на уровне школьных знаний, есть даже переходные разъемы…
С помощью планшета, программы CANHACKER, своего переходника CAN-USB, подключенного к CAN шине на разъеме МС,
был определен пакет данных, содержащий информацию о состоянии кнопок управления МС.
Нужные провода CAN — белый и зеленый:
Ищем и записываем:
Я для своей работы разработал и использую универсальные платы-конструкторы, на базе STM32,
с помощью которых можно быстро реализовывать разнообразные устройства
(если CAN модуль Starline не подходит для этого :) ).
Вот схема одной из плат:
Теперь осталось только запрограммировать следующий алгоритм:
Настраиваем плату только слушать CAN шину по указанному адресу. Из принятых данных анализируем выбранный байт. И в зависимости от его содержимого, активируем определенные транзисторы для выдачи правильного сопротивления резисторной матрицы на плате в шину дистанционного управления МС Pioneer. Я знаю что есть электронные сопротивления и прочее прочее. Мне так было дешевле и удобней.
Весь проект выкладывать не буду, там много еще другого реализовано. А кусочки кода для Volvo приложу.
Настройка CAN фильтра:
Процедура, вызываемая при приеме пакета:
И далее разбор принятого сообщения:
Некоторые данные для работы программы хранятся в оперативно изменяемой области флеш памяти, что бы к примеру подключив плату к компьютеру, оперативно что либо изменить, не внося изменений в код:
Написав все это, думаю что чуть упростил жизнь другим интересующимся людям, хотя разбираться в чужом коде сомнительное удовольствие. Главное не боятся. И «лучше день потерять, затем за час долететь». В итоге все заработало как надо.
Если есть вопросы, пишите, буду исправлять и дополнять по возможности.
Автопилот своими рукам. Добавляем электронное управление steer-by-wire на обычный автомобиль
Всем привет. Любому автопилоту, очевидно, нужно не только принимать решения по управлению, но и заставлять автомобиль этим решениям подчиняться. Сегодня увидим, как весьма доступными средствами доработать обычный автомобиль полностью электронным рулевым управлением (steer-by-wire). Оказывается, сам авто для разработки не очень и нужен, а большинство функционала можно с комфортом отлаживать дома или в офисе. В главных ролях всем известные компоненты из хобби-магазинов электроники.
Задумаемся на секунду, что нужно для системы электронного управления? Сервопривод, который может поворачивать колёса, и контроллер, чтобы сервоприводом управлять. Внезапно, всё это в большинстве современных автомобилей уже есть, и называется «усилитель рулевого управления». Традиционные чисто механические (как правило, гидравлические) усилители стремительно исчезают с рынка, уступая место узлам с электронным блоком управления (ЭБУ). А значит, задача сразу упрощается: нам остается только «уговорить» имеющийся ЭБУ усилителя выдать нужные команды на сервопривод.
Очень удобным для доработки оказался KIA Cee’d начиная с 2015 модельного года (скорее всего аналогично и его соплатформенники от KIA/Hyundai). Сошлись одновременно несколько факторов:
- Усилитель руля полностью электрический, нет возни с гидравликой, стоит копейки (относительно) на разборках. Вся нужная проводка выведена наружу и легко доступна.
- Усилитель интегрирован с рулевой колонкой, поэтому к нему есть легкий доступ на автомобиле и любая дополнительная электроника останется в салоне в тепличных условиях (в отличие от усилителей, интегрированных в рулевую рейку).
- Очень важно — есть пример успешной доработки аналогичного KIA Soul. Американская PolySync разрабатывает апгрейд Soul до полностью drive-by-wire платформы для беспилотников, и на их гитхабе можно подсмотреть много полезного.
Итак, получена в распоряжение рулевая колонка в сборе:
Будем заставлять её крутиться. Для этого нужно создать у блока управления впечатление, что
- Он находится в автомобиле с работающим двигателем.
- Водитель прикладывает вращающее усилие к рулевому колесу.
Пойдем по порядку.
Симуляция автомобиля
Нужно понять интерфейс между электронным блоком управления (ЭБУ) усилителя и остальным автомобилем. Нагуглив электрическую схему видим картинку:
Из схемы видно, что физически интерфейс очень прост:
- Питание (12V постоянное) через разъем E29.
- Сигнал включенного зажигания (12V) через разъем M46.
- CAN-шина данных также через разъем M46.
Внешний вид и распиновки разъемов находим на том же сайте.
С питанием и зажиганием всё просто, берем 12V с обычного компьютерного блока питания. Но если просто подать питание и зажигание, усилитель полноценно не включится, и усиливать не будет. Дополнительно нужна информация от других блоков автомобиля: работает ли двигатель (чтобы не тратить энергию аккумулятора при выключенном), текущая скорость (чтобы делать руль «тяжелее» на скорости), наверняка что-то ещё.
Обмен данными между электронными блоками в современных автомобилях организован по шинам CAN (Controller Area Network). Это широковещательная (у пакетов нет адресов назначения) локальная сеть на витой паре, где каждый блок может публиковать свои данные. У каждого типа данных свой идентификатор. Например, в нашем случае усилитель руля рассылает значения угла поворота руля с ID 0x2B0. Часто бывает несколько физически разделенных шин, чтобы второстепенные блоки типа контроллеров стеклоподъемников не мешались обмену между критически важными компонентами. В Cee’d используется две шины: C-CAN и B-CAN (схема здесь, в части «Информация о канале передачи данных»). На C-CAN «висят» почти все блоки с ней и будем работать.
Выбор адаптера CAN-шины
Первым делом понадобится CAN интерфейс для компьютера. Детальный обзор возможных решений есть например здесь, цены варьируются от десятков до сотен долларов. По устройствам у нас относительно доступны:
- Адаптеры в сборе с алиэкспресса. Их не пробовал, по слухам довольно много брака и софт видимо только под Windows.
- Arduino шилды на MCP2515/MCP2551, в основном клоны дизайна от seeed в любом магазине ардуинной тематики. Но совмещать такой шилд надо не с Arduino (я так и не смог заставить связку работать на воспроизведение с нужной скоростью), а с Raspberry Pi. В приложении ниже подробная инструкция.
- USB адаптер CANHacker Baby, разработка Artemka86. Выгодно отличается от вариантов с алиэкспресса отличной поддержкой «из первых рук» от разработчика (проверено лично, Артём подходит к делу с душой). Также плюсом является поддержка стандартного протокола LAWICEL совместимого с широким набором софта.
Софта разного тоже много (за обзором опять сюда). Самый простой вариант — Linux c can-utils из SocketCAN, за который спасибо инженерам Volkswagen. Большой плюс SocketCAN в стандартизации — любое USB устройство с поддержкой протокола LAWICEL (pdf) видится системой как обычный сетевой интерфейс. Таким образом избегаем привязки к вендор-специфическому софту конкретного устройства. У текущей версии CANHacker есть небольшая несовместимость со стоковыми can-utils по работе с USB, поэтому берём патченную версию отсюда. Raspberry Pi с CAN шилдом работает со стоковым пакетом can-utils из Raspbian OS без проблем.
Подключение к шине, запись пакетов
С подключением к индивидуальному узлу на стенде всё просто: соединяем контакт CAN-High адаптера с CAN-High автомобильного узла, CAN-Low — c CAN-Low. По стандарту между CAN-High и CAN-Low должно быть 2 замыкающих резистора по 120 Ом, на практике обычно всё работает на довольно широком интервале сопротивлений, у меня например одно на 110 Ом.
На автомобиле замыкающий резистор не нужен (они там уже стоят, чтобы шина сама по себе работала). В зависимости от модели авто, возможно придется повозиться с физическим доступом к проводке шины. Самый удобный вариант — разъём OBD-II (on-board diagnostic), он обязателен на всех легковых автомобилях, выпущенных в Европе с начиная 2001-2004 года и находится не дальше 60 см от рулевого колеса. На Cee’d разъём слева под рулём, за пластмасовой крышкой блока предохранителей.
Распиновка OBD-II стандартизована и включает шину CAN (CANH на 6 контакте, CANL на 14). Нам повезло, корейцы пошли по пути наименьшего сопротивления и вывели C-CAN, на которой висят все важные узлы, прямо на диагностический разъём:
В результате на Cee’d можно прослушать весь внутренний трафик, ничего в авто не разбирая. Когда машина не твоя, а знакомые пустили повозиться — большой плюс. Но такая халява не везде. У Volkswagen например служебная CAN изолирована от OBD шлюзом, поэтому подключаться пришлось бы примерно так:
Подключив все контакты, поднимаем сетевой интерфейс:
Проверяем, что сеть работает и данные принимаются (включив зажигание):
И наконец, если всё нормально, можно записывать лог:
Здесь нужно запустить двигатель, т.к. усилитель руля включается на собственно усиление только при работающем двигателе, а нам на стенде надо, чтобы он усиливал.
Воспроизведение записи шины на стенде
С записанным логом с авто можно возвращаться на стенд и приступать к обману нашего одинокого усилителя. Первым делом вспомним, что в автомобиле стоит свой собственный усилитель, он тоже шлёт данные в CAN шину, и эти пакеты есть и в нашем логе. Отфильтруем их, чтобы избежать конфликтов. Подключаемся к усилителю на стенде, смотрим, что он выдает:
Видим, что рассылаются пакеты 2B0 (текущий угол поворота руля) и, реже, 5E4 (какой-то общий статус усилителя). Отфильтровываем их из общего лога:
Фильтрованный лог можно подавать на воспроизведение:
Если всё сработало успешно, усилитель заработает, крутить рукой рулевой вал станет гораздо легче. Итак, работать в штатном режиме мы узел заставили, можно переходить к симуляции усилий на руле.
Эмуляция усилия на руле
Крутящий момент на рулевом валу и угол поворота измеряются встроенным блоком датчиков, от которого идет жгут проводов к блоку управления усилителем:
Блок управления обрабатывает сигналы датчиков и выдаёт команды сервоприводу на создание дополнительного усилия на поворот рулевого вала.
Проверка формата сигнала датчиков
По информации PolySync, на Soul, у которого с Cee’d общая платформа, два аналоговых датчика крутящего момента. Cигнал каждого — отклонение уровня постоянного напряжения от базовых 2.5V, провода в жгуте — зеленый и синий. Проверим, что у нас то же самое:
- Размыкаем разъем на ЭБУ, пробрасываем нужные контакты через макетку и заводим на аналоговые входы arduino.
- Загружаем скетч, в цикле замеряющий напряжения и печатающий их в терминал.
- Запускаем Serial Plotter в Arduino IDE, поворачиваем рулевой вал. Видим результат на графике, схема совпадает с Soul:
- Радуемся сэкономленному времени.
Эмуляция сигнала датчиков
Переходим к эмуляции сигнала датчиков. Для этого поставим свой модуль в разрыв цепи между датиком и ЭБУ, будем транслировать настоящий сигнал с датчика и по команде сдвигать его на фиксированный уровень (изображая приложенное к рулевой колонке усилие). Силами одной arduino это не получится: там нет полноценного цифро-аналогового преобразователя, который мог бы выдавать постоянное напряжение. Аналоговые входы arduino нам тоже не очень подходят — хотя пинов для них целых 6, канал АЦП в контроллере только один, и его переключение между пинами занимает заметное время.
Нужно добавить к arduino внешние ЦАП/АЦП. Мне попались модули YL-40 (описание в pdf) на основе чипа PCF8591 — на каждой по 4 канала 8-бит АЦП и 1 8-бит ЦАП. Модуль может общаться с arduino по протоколу I2C. Потребуется небольшое допиливание (в буквальном смысле): китайские товарищи поставили на плату светодиод индикации напряжения на выходе ЦАП — его обязательно надо отсоединить. Иначе утекающий через диод ток не даст ЦАП поднять напряжение на выходе больше 4.2V (вместо штатных 5V). Диод отсоединяем, отковыривая резистор R4 с обратной стороны платы.
Также на входы распаяны игрушечные нагрузки (терморезистор, фоторезистор, ещё что-то), отсоединяем их, убирая перемычки, чтобы не мешались.
С интерфейсом к arduino есть нюанс — нам нужно 2 канала ЦАП, соотвественно 2 модуля, но у них одинаковые адреса I2C (зашиты в чип). Хотя чип позволяет менять свой I2C адрес, замыкая определенные ноги на +5V вместо земли, на плате эти перемычки не разведены. Вместо перепайки возьмем костыль — две разные библиотеки I2C на arduino (стандартная Wire и SoftI2CMaster), каждая на свою пару пинов. Получаем модули на разных шинах, конфликт пропадает.
Остальное прямолинейно — ставим модули в разрыв цепи от датчиков, соединяем с arduino, загружаем скетч. Подробности по распиновке подключения есть в комментариях в скетче. Остается включить всё в сборе, здесь важна последовательность:
- Включаем arduino, открываем Serial Monitor. Важно запустить arduino первой, не останавливать и не прерывать. Иначе напряжение на выходах ЦАПов сбросится, ЭБУ усилителя определит ошибку сигнала с датчиков, уйдет в безопасный редим и придется все перезапускать по новой.
- Запитываем усилитель, подключаем зажигание.
- Запускаем воспроизведение лога CAN-шины.
- Теперь по командам l и r через Serial Monitor усилитель будет поворачивать рулевой вал. Объявляется победа.
На сегодня всё, на очереди доработка софта (интеграция с CAN шиной, чтение оттуда текущего угла поворота и динамическое управление крутящим усилием, чтобы внешний контроллер мог задать фиксированный угол поворота руля и система его выдерживала), отработка на автомобиле (на стенде не смоделируешь сопротивление от колёс). Возможно замена 8-битных ЦАП/АЦП на 10 или 12 бит (взял первое, что под руку попалось). Рулящая нейросеть тоже в процессе, надеюсь скоро сделать пост.
Спасибо Artemka86 за ценные консультации по работе с CAN и помощь с оборудованием.
Ресурсы для дальнейшего погружения
- Car Hacking: The definitive source. Начинать можно с Car Hacking for Poories, там отлично покрыты основы. Остальное тоже интересно, но с упором на несанкционированный доступ.
- The Car Hacker’s Handbook: A Guide for the Penetration Tester. Больше деталей, чем в Car Hacking: The definitive source, тоже акцент на несанкционированный доступ. Если читать как первое введение в тему, надо приспособиться пропускать большие куски.
- Car Hacking 101: Tools of the Trade, MCD Software — обзоры инструментов. В основном малоинтересная экзотика на мой взгляд.
- Open Source Car Control — открытая платформа для KIA Soul, в процессе разработки. Они делают полное решение (руль, акселератор, тормоза), включвя доработки по «железу» на машине (в основном для тормозов — ставятся дополнительные тормозные приводы, что-то меняется в тормозной гидравлике итд). Релиза ещё не было, но многие вещи уже можно подсмотреть.
Бонус. Совмещаем Raspberry Pi и Arduino CAN shield
Прежде всего, внимание, CAN шилд и raspberry pi нельзя соединять напрямую, они не совместимы по напряжению. На Arduino UNO-совместимых платах напряжение логики 5V, а на raspberry pi только 3.3V, поэтому прямое соединение только сожжет задействованные пины.
- Raspberry Pi (проверялось на версии 3B).
- Arduino CAN шилд на MCP2515/MCP2551.
- Преобразователь уровня логики на 5 каналов или больше (можно 2 по 4 канала, но понадобится больше соединений). Мне попался этот
Нужно завести на CAN шилд питание (5V), соединения интерфейса данных SPI (4 пина: MOSI, MISO, SCLK, CS) и 1 пин сигнала прерывания. Всё, кроме питания, идет через преобразователь уровня, который в свою очередь тоже надо запитать.
На схемах ищем нужные пины.
- SPI на raspberry pi 19, 21, 23, 24 (MOSI, MISO, SCLK, CS) соответствуют D11, D12, D13, D9 (или на некоторых версиях D10) на CAN шилде.
- Прерывание с D2 на шилде можно завести на любой GPIO пин raspberry, у меня это пин 22 (GPIO 25). Номер пина укажем в софте при настройке.
Соединяем через преобразователь, заводим нужные напряжения питания на каждую сторону преобразователя, получается такая лапша:
Всё, кроме 5V питания и земли на шилд идёт через преобразователь:
Переходим к настройке софта (стандартный Raspbian).
Включаем поддержку SPI и CAN модуля. В /boot/config.txt добавляем
Здесь interrupt=25 указывает пин, на который заведено прерывание с шилда. Индексация идёт по GPIO пинам, поэтому interrupt=25 это GPIO 25, он же пин 22 по сквозной индексации всех пинов. Также важно указать частоту интерфейса SPI spimaxfrequency , т.к. значение по умолчанию — 10 МГц — слишком высокое для шилда, он просто не соединится.
Перезагружаем raspberry pi, проверяем соединение с шилдом:
Запускаем виртуальный сетевой интерфейс:
Вторая команда важна при воспроизведении большого количества данных с raspberry pi, то есть когда записанный на автомобиле полный лог CAN шины воспоизводим для изолированного узла на стенде. Без увеличения буфера он скорее всего переполнится, когда в логе встретится несколько CAN пакетов с маленькими интервалами, и тогда соединение зависнет.