управление углом поворота руля в Linux
Я пытаюсь отправить на свой автомобиль команды по изменению угла поворота рулевого колеса.
Это довольно новая машина (Renault Espace IV). Для доступа к ней я использую порт OBD2, а также у меня есть ShieldCan. С помощью этих инструментов и pyserial мне удалось считать данные с автомобиля, но не удалось ввести угол поворота.
Есть ли способ это сделать? Как, например, ввести «угол x°» и заставить руль менять угол?
Если с таким автомобилем это невозможно, то на какие характеристики мне следует обратить внимание, чтобы это стало возможным?
Мы будем очень признательны за любую помощь.
РЕДАКТИРОВАТЬ: судя по обсуждениям в комментариях, этот вопрос может быть слишком привязан к типу моего автомобиля, но я думаю, что всем будет интереснее узнать, какими системами/характеристиками должен обладать автомобиль, чтобы мы могли задавать угол поворота руля.
Перефразирую: какой тип автомобиля может получать данные об угле поворота рулевого колеса? Какие технологии для этого нужны? Стоит ли мне искать систему удержания в полосе или есть другие характеристики, которые позволят мне это сделать?
Перевод вопроса с Mechanics Stack Exchange
Лицензия: CC BY-SA (2.5–4.0)
Оригинальный вопрос: https://mechanics.stackexchange.com/questions/38224/control-cars-steering-angle-from-linux
То, что вы пытаетесь сделать, — сложная задача, для решения которой потребуется взлом микроэлектроники. Возможно, вам также потребуется считать данные с некоторых чипов, чтобы получить доступ к фирменной флэш-памяти.
Скорее всего, вам больше всего повезёт с автомобилем с электроприводом, у которого руль не имеет механического соединения с колёсами. Вместо этого у него будет только датчик положения. Вам понадобится осциллограф, чтобы увидеть, какой сигнал этот датчик передаёт на компьютер для определения положения колёс. Как только вы получите нужную волну с правильным напряжением и силой тока, можно приступать к программированию для её имитации. Скорее всего, для управления сигналом вы будете использовать Raspberry Pi, но потенциально можно использовать последовательный порт или даже USB-порт, но тогда вам, возможно, придётся изготовить специальную плату, чтобы обеспечить соответствие напряжения и силы тока.
Вам понадобится схема, которая будет отключать сигнал от настоящего рулевого колеса, когда оно используется, и подключать его, когда оно не используется. Вам также понадобится схема для управления положением рулевого колеса с помощью встроенных двигателей с силовой обратной связью. Это также позволит удерживать рулевое колесо в ровном положении.
Ещё один момент, который следует учитывать: если при возвращении к обычному вождению руль находится в неправильном положении, то и управление может быть неправильным. В этом случае может потребоваться исправить ситуацию, сохранив положение руля и восстановив его в компьютере с помощью чего-то, что «наращивает» положение руля до текущего.
Было бы намного проще просто добавить шкив или цепную передачу на рулевую колонку любого автомобиля и управлять им с помощью серводвигателя.
С помощью цепного механизма можно модернизировать что угодно, даже Ford Model T. Всё, что вам понадобится, — это серводвигатель, плата управления двигателем и пара переключателей для сигнала о максимальном угле поворота. Компьютер будет вращать колесо вперёд и назад, чтобы определить центр и обе точки остановки. Вам понадобится настройка триммера, так как центровка неидеальна, а вы управляете автомобилем с помощью контроллера PS3.
Единственный способ сделать это с помощью obd2 — если компания-производитель автомобиля добавила специальный код для тестирования этой модели с использованием некоторых зарезервированных входов. Мне это кажется крайне маловероятным, но по мере того, как всё больше автомобилей становятся автоматизированными, появляется шанс, что в некоторых новых моделях это будет реализовано. Вам нужно будет взломать имеющийся у них код и попытаться выяснить, какие сигналы используются для того, чтобы заставить автомобиль делать то, что вам нужно. На этом этапе вам нужно получить их фирменный сканер OBD2 и декомпилировать его, чтобы получить код, необходимый для отправки данных с их компьютера OBD2.
Если у вас модель с цепным приводом, это будет намного проще.