2
$\begingroup$

I’m trying to add lane keeping assist and adaptive cruise control to my 2017 Chevrolet Camaro, with the ultimate aim of using Comma.ai’s openpilot (or some other fork) to make my car drive itself. From what I’ve read, I need to be able to control steering, braking and accelerating using my vehicle’s CAN bus.

I’ve decided to start with steering, since that seems to be the most difficult endeavor. My original thought was that I could somehow send CAN signals to the electric power steering (EPS) system to turn the vehicle left and right. But I have read that EPS signals can neither be read nor injected through the car’s OBD-II port. I’ve seen someone reverse engineer their car’s power steering ECU with a custom board, so I’m hopeful that it is possible for me as well.

To summarize, I’m asking what approach could I take to control my car’s EPS system to make it stay centered in a lane? Method’s I have brainstormed include accessing the CAN bus at the OBD-II port, accessing the CAN bus at the power steering ECU, and using a servo to provide mechanical steering input to the wheel directly.

Edit: Through further research, I have learned that the EPS system in my vehicle is manufactured by Nexteer Automotive. It is a column and intermediate shaft system.

$\endgroup$
6
  • 2
    $\begingroup$ how will you license the vehicle for road operation after you make the modifications? $\endgroup$
    – jsotola
    Commented Apr 17, 2023 at 5:58
  • $\begingroup$ As far as I’m aware under Florida statutes, the car would not be considered an autonomous vehicle since it would still require “active control or monitoring”. The argument could also be made that this is simply a retrofit of a currently approved driver assistance technology i.e. LKAS. I’m unaware of any additional licensing requirements, but please point me to them if you can! I want to make sure I do this legally, of course. $\endgroup$ Commented Apr 17, 2023 at 15:02
  • $\begingroup$ Basically all that kind of stuff is extremely proprietary (even Chevrolet doesn't know how to do it -- it's whoever did the steering system). So you either need to luck out and find a hacker's group that does it, or you have to start hacking yourself. If it's steer-by-wire then there will be a communications bus, and it'll almost certainly be CAN -- it just won't be on a network that talks to the OBD-II port. $\endgroup$
    – TimWescott
    Commented Apr 18, 2023 at 0:03
  • $\begingroup$ Thanks for the input! I’m not surprised to hear that, unfortunately. Looks like I may have to carefully take a look at my power steering ECU and start sniffing for CAN data. $\endgroup$ Commented Apr 18, 2023 at 0:55
  • $\begingroup$ Have you disassembled, inventoried, and reassembled the vehicle yet? Figure out how to use each component, and replace the ones you can't. Start at the owner's manual and figure out what the components mentioned there do, that way you can eliminate what does not matter for your immediate objectives. $\endgroup$
    – Abel
    Commented Apr 19, 2023 at 12:28

1 Answer 1

2
$\begingroup$

CAN Bus is a robust protocol and is definitely used for control inputs and outputs on various industrial equipment (potato harvesters for example). That said, it is very unlikely that any car is going to directly accept control inputs over CAN Bus. The car will generally use one or more CAN Bus networks to accept inputs from auxiliary systems, but then controls the vehicle based on logic that is internal (and proprietary) to the car's computer. This is intentional for security and reliability of the car's control system. The programmers of the car would not want to let any third party device plugged into an OBD-II connector to have full control over the steering or braking for example. In the worst case, such a device could intentionally or unintentionally send a CAN message that steers the car off the road.

Some car models may have a separate CAN Bus network that is directly connected to the power steering sub system and is only secured by obscurity (no documentation or physical connections). While theoretically you could intercept this communication to send outputs directly to the subsystem, you would not want to do it without disabling the car's existing computer or there would be conflicting output messages to the subsystem.

If you would like to proceed with your project, you first have the project of essentially replacing the car's computer entirely. While it may be possible to leave the existing ECU engine computer to control the engine and emissions, the amount of effort to trick into believing it is still in control of the other systems would probably not justify the effort. There are at least three opensource ECU (engine control unit) projects that you may be able to use (rusefi, motoiq, speeduino). Once you have solved the tricky part of controlling the engine, you can use your own controller to control the various outputs of the car such as power steering.

This is a massive and dangerous endeavor, and one that is typically only taken on by multiple engineers that can double and triple check the logic, electrical, and sub-systems. One small error could easily lock up your control computer or cause it make erroneous outputs, killing the vehicle occupants or bystanders. If you do not have experience with industrial controls I would recommend you take on a less ambitious project such as using the CAN Bus output information for a novel non-life-threatening purpose. If you do have industrial programming experience, I would recommend you take your talents to a company that is currently commercializing driving-assist and self-driving cars. There you will have engineering peer review and liability protection.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.