1 minute read

A getting started guide for openpilot development

Time required: ~30 minutes

Set up your development environment (Ubuntu 20.04)

# clone openpilot into your home directory
cd ~
git clone --recurse-submodules https://github.com/commaai/openpilot.git

# setup ubuntu environment
openpilot/tools/ubuntu_setup.sh

# build openpilot
cd openpilot && scons -j$(nproc)

TODO: Add Windows and Mac instructions.

Run a route replay and ui

TODO: you might have to log in to access the demo route. see the replay readme for more info. This will be fixed.

cd ~/openpilot
# in window 1
selfdrive/ui/replay/replay '3533c53bb29502d1|2019-12-10--01-13-27'
# in window 2
selfdrive/ui/ui

Dive in to change the speed color

Search for “mph” with git grep in the ui folder

batman@x840:~/openpilot/selfdrive/ui$ git grep mph
paint.cc:  ui_draw_text(s, s->fb_w/2, 290, s->scene.is_metric ? "km/h" : "mph", 36 * 2.5, COLOR_WHITE_ALPHA(200), "sans-regular");

The line right above contains the actual speed. Unfortunately, COLOR_BLUE isn’t defined, but a git grep of COLOR_WHITE shows it’s nvgRGBA(255, 255, 255, 255). Personally, I like a lighter blue, so I went with #8080FF.

batman@x840:~/openpilot$ git diff
diff --git a/selfdrive/ui/paint.cc b/selfdrive/ui/paint.cc
index 821d95115..cc996eaa1 100644
--- a/selfdrive/ui/paint.cc
+++ b/selfdrive/ui/paint.cc
@@ -175,8 +175,8 @@ static void ui_draw_vision_speed(UIState *s) {
   const float speed = std::max(0.0, (*s->sm)["carState"].getCarState().getVEgo() * (s->scene.is_metric ? 3.6 : 2.2369363));
   const std::string speed_str = std::to_string((int)std::nearbyint(speed));
   nvgTextAlign(s->vg, NVG_ALIGN_CENTER | NVG_ALIGN_BASELINE);
-  ui_draw_text(s, s->fb_w/2, 210, speed_str.c_str(), 96 * 2.5, COLOR_WHITE, "sans-bold");
-  ui_draw_text(s, s->fb_w/2, 290, s->scene.is_metric ? "km/h" : "mph", 36 * 2.5, COLOR_WHITE_ALPHA(200), "sans-regular");
+  ui_draw_text(s, s->fb_w/2, 210, speed_str.c_str(), 96 * 2.5, nvgRGBA(128, 128, 255, 255), "sans-bold");
+  ui_draw_text(s, s->fb_w/2, 290, s->scene.is_metric ? "km/h" : "mph", 36 * 2.5, nvgRGBA(128, 128, 255, 200), "sans-regular");
 }
 
 static void ui_draw_vision_event(UIState *s) {

Rebuild UI, and admire your work

scons -j8 && selfdrive/ui/ui

Push your fork to GitHub

Click fork on GitHub.

git remote rm origin
git remote add origin git@github.com:geohot/openpilot.git
git add .
git commit -m "Make the speed blue."
git push --set-upstream origin master

Run your fork on device in your car!

TODO: write this. You will have to reinstall openpilot.

Admire your work IRL

TODO: add a beautiful comma three picture here

Updated: