Hello. First of all, meet me. I'm a SWE, been at it for 20-odd years now. Electrical and electronics is a side hobby that never quite stays on the side. I've got a couple of cars I like to tinker with, nothing fancy, just enough to keep me curious and occasionally confused with soldering iron and flux.
I've had a few exploration projects before, including one with a Perodua Axia. I do all of this purely for fun and curiosity. Will I do it for other people? No lah. Haha! This is strictly a "my cars, my weekends, my mess to clean up" kind of situation.
I want to be upfront. I know the risks involved in what I'm doing. I test carefully, I don't rush, and I don't stack changes on things that affect how a car behaves. If you're reading this and getting ideas, please think twice. Safety-related modifications are genuinely dangerous if you don't fully understand what you're poking at. I'm still learning myself, honestly. I just happen to enjoy the process. Read along, learn something, have a laugh with me, but please be careful with your own projects.
New Field for Me
I should be honest, while I've been writing software for a long time, CAN bus communication and ADAS systems are new territory for me. Understanding how the Kommu device and comma.ai's openpilot framework actually work under the hood has been... let's just say it's like opening a can of worms. A fascinating, beautifully-engineered can of worms, but a can of worms nonetheless.
That's a big part of why I'll be testing things thoroughly. I need to build a proper understanding of how CAN signals behave, how the control loops work, and how all the pieces fit together before I get comfortable moving forward.
The Platform
I'm running on Proton X90. The 2025-unit of X90. Not the cheap not-safe 2026 X90. - check Paultan. Sigh. Why la proton take out ADAS. The best part, removing BSM is a real mistake.
Well, I'm genuinely glad I ended up on the Geely platform. I was initially thinking about going the Toyota route, which is the well-trodden path in the openpilot world. But the Geely platform has something interesting going for it, the steering angle goes full max to max turning, because the X90 has self-parking. (I think this might be specific to the X90 only? I haven't tried other Geely-based cars, so I can't say for sure.) That full steering range opens up some interesting possibilities for lateral control.
Down the road, I might also see the Axia's ADAS for another round of headache exploration. See what we can do with that little thing. (I remember, Kommu team tried on Axia previously, got ping pong terrible issue).
I've been spending time just reading through the codebase from both the Kommu team and the comma.ai. I have to give proper credit to the Kommu team here. They've done a genuinely impressive job of productising (is that even a word?) the comma platform for the Malaysian market. The device is rock solid! And looking nice too! The code is open source, and clearly encourage exploration. The hardware is a bit pricey though. But well, not all good thing is cheap.
The Projects
I have a few projects in mind with the Kommu device. I won't go into all of them in detail, not trying to be a step-by-step guide for modifying safety systems. Just a jot for me, and probably spark other people to explore as well.
Here's what I'm thinking about.
Project 1: Bypass the LKA Requirement
This one's already figured out. It's a simple fix, literally one line of code.
The problem: In bukapilot v10.0.5 (release_ka2), the X90 requires the car's LKA (Lane Keeping Assist) setting to be turned ON for bukapilot to control steering in ACC mode. In the previous version (v10.0.4), this wasn't needed - bukapilot would steer regardless of the car's LKA setting.
Why it matters: When LKA is enabled in the X90's settings, the stock system plays an audible lane departure warning every time you cross a road line, even during intentional lane changes. It drives you mad. In v10.0.4, you could keep LKA off and bukapilot would still handle steering just fine. v10.0.5 broke that for ACC mode users.
The root cause: In selfdrive/car/proton/carstate.py, the line changed from:
# v10.0.4 — always let bukapilot steer
ret.lkaDisabled = False
to:
# v10.0.5 — only let bukapilot steer if LKA is on OR in ICC mode
ret.lkaDisabled = not (self.lka_enable or self.is_icc_on)
The Kommu team did this intentionally to fix an ICC disengagement bug. Makes sense for that use case. But the side effect is that ACC users with LKA off (like me) lost steering control.
The fix: Fork from release_ka2, revert that one line back to ret.lkaDisabled = False. Point the device to my repo fork, reboot, drive.
Testing: This gets driven daily until I'm comfortable it's solid with my own fork. The changes just a single value, but nevertheless, again, this is still new for me. No timeline, it's a hobby after all. I've got a day job to keep my clients happy, and I need to practice my EUC riding too. Haha!
Project 2: Independent Lateral Control (Mode 2)
This is the bigger one. I'll keep it vague for now. Not really know how yet technically. I know it is possible, somehow X90 can turn on LKA, but at the same time not engage the cruise actively.
Urghh.. I hate the LKA stepping on line beeping. We live in motorcycle-respect world here in Malaysia. We always need to swerving left and right giving them more space.
The idea: A new driving mode where bukapilot controls lateral movement only, that's steering, keeping you in lane... while longitudinal control stays fully with the driver. That means gas and braking are all you, all the time.
Quick terminology guide, because I mix these up myself constantly:
- Lateral = steering = left/right = lane keeping. Think: Lateral = Lane.
- Longitudinal = gas/brake = speed control. Think: Longitudinal = Long road ahead.
Right now, kommu ties steering to cruise control activation (ACC/ICC). The moment bukapilot can steer, the car is also controlling your speed. I want to decouple that, kommu handles the lane, I handle the pedals.
The trigger would be a physical button on the car, something deliberate and driver-initiated that doesn't activate cruise control. The deactivation rules are things like: seatbelt removal, gear not in D, door open and steering self-force torque overriding the system. These get validated thoroughly before any activation logic gets written.
This project only starts after Project 1 feels rock solid. No rushing.
Project 3: The Rockchip Playground
The Kommu device runs on a Rockchip SoC, it's a surprisingly capable computer in your car. I want to explore what else it can do beyond ADAS. Think of it as turning the device into a Python playground on wheels.
No concrete plans yet. Just poking around.
Project 4: Second Device for ML
Further out. The idea is a second Kommu KA device dedicated to machine learning, object detection, traffic light recognition, more accurate lead car distance measurement. Keeping the ML workload separate from the primary ADAS device so one doesn't interfere with the other.
Project 5: Extra Eyes (just dreaming)
The most distant idea: additional cameras, left, right, and rear, feeding into the Rockchip. Combined with deeper CAN bus exploration on the X90. Lots of interesting possibilities, but firmly in the "maybe one day" category.
What's Next
Project 1 is ready to deploy. I'll post more as I see fit when there's something worth sharing. No schedule, no pressure.
If you're an X90 owner (a engineer too) hitting the same LKA warning issue, the fix might save you some headaches. Stay tuned.
Unshamely written with AI. haha!



