diff --git a/docs/404.html b/docs/404.html index e849df5..dc27949 100644 --- a/docs/404.html +++ b/docs/404.html @@ -159,6 +159,50 @@ + +
sunnypilot is a fork of comma.ai's openpilot, an open source driver assistance system. sunnypilot offers the user a unique driving experience for over 250+ supported car makes and models with modified behaviors of driving assist engagements. sunnypilot complies with comma.ai's safety rules as accurately as possible.
"},{"location":"#how-do-i-use-it","title":"How do I use it?","text":"sunnypilot is designed to be used on the comma 3/3X.
"},{"location":"#how-does-it-work","title":"How does it work?","text":"In short, sunnypilot uses the car's existing APIs for the built-in ADAS system and simply provides better acceleration, braking, and steering inputs than the stock system.
"},{"location":"CHANGELOGS/","title":"sunnypilot - 0.9.8.0 (2024-xx-xx)","text":"Visit https://bit.ly/sunnyreadme for more details * sunnypilot 0.8.14 release - based on openpilot 0.8.14 devel * \"0.8.14-prod-c3\" branch only supports comma three * If you have a comma two, EON, or other devices than a comma three, visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * Mono-branch support * Honda/Acura * Hyundai/Kia/Genesis * Toyota/Lexus * Volkswagen MQB * Modified Assistive Driving Safety (MADS) Mode * NEW\u2757: CRUISE (MAIN) now engages MADS for all supported car makes * NEW\u2757: Added toggle to disable disengaging Automatic Lane Centering (ALC) on the brake pedal * Dynamic Lane Profile (DLP) * NEW\u2757: Gap Adjust Cruise (GAC) * openpilot longitudinal cars can now adjust between the lead car's following distance gap via 3 modes: * Steering Wheel (SW) | User Interface (UI) | Steering Wheel + User Interface (SW+UI) * NEW\u2757: Custom Camera & Path Offsets * NEW\u2757: Torque Lateral Control from openpilot 0.8.15 master (as of 2022-06-15) * NEW\u2757: Torque Lateral Control Live Tune Menu * NEW\u2757: Speed Limit Sign from openpilot 0.8.15 master (as of 2022-06-22) * NEW\u2757: Mapbox Speed Limit data will now be utilized in Speed Limit Control (SLC) * Speed limit data will be utilized in the following availability: * Mapbox (active navigation) -> OpenStreetMap -> Car Interface (Toyota's TSR) * Custom Stock Longitudinal Control * NEW\u2757: Volkswagen MQB * Honda * Hyundai/Kia/Genesis * NEW\u2757: Mapbox navigation support for non-Prime users * Visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * Hyundai/Kia/Genesis * NEW\u2757: Enhanced SCC (ESCC) Support * Requires hardware modification. Visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * NEW\u2757: Smart MDPS (SMDPS) Support - Auto-detection * Requires hardware modification and custom firmware for the SMDPS. Visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * Toyota/Lexus * NEW\u2757: Added toggle to enforce stock longitudinal control
"},{"location":"CHANGELOGS/#sunnypilot-version-0812-4","title":"sunnypilot - Version 0.8.12-4","text":"developenpilot is an Adaptive Cruise Control (ACC) and Automated Lane Centering (ALC) system. Like other ACC and ALC systems, openpilot is a failsafe passive system and it requires the driver to be alert and to pay attention at all times.
In order to enforce driver alertness, openpilot includes a driver monitoring feature that alerts the driver when distracted.
However, even with an attentive driver, we must make further efforts for the system to be safe. We repeat, driver alertness is necessary, but not sufficient, for openpilot to be used safely and openpilot is provided with no warranty of fitness for any purpose.
openpilot is developed in good faith to be compliant with FMVSS requirements and to follow industry standards of safety for Level 2 Driver Assistance Systems. In particular, we observe ISO26262 guidelines, including those from pertinent documents released by NHTSA. In addition, we impose strict coding guidelines (like MISRA C : 2012) on parts of openpilot that are safety relevant. We also perform software-in-the-loop, hardware-in-the-loop and in-vehicle tests before each software release.
Following Hazard and Risk Analysis and FMEA, at a very high level, we have designed openpilot ensuring two main safety requirements.
For additional safety implementation details, refer to panda safety model. For vehicle specific implementation of the safety concept, refer to panda/board/safety/.
Extra note: comma.ai strongly discourages the use of openpilot forks with safety code either missing or not fully meeting the above requirements.
For these actuator limits we observe ISO11270 and ISO15622. Lateral limits described there translate to 0.9 seconds of maximum actuation to achieve a 1m lateral deviation.\u00a0\u21a9
release-c3 Release branch Stable release branches. After testing on staging-c3, updates are pushed here and published publicly. Ready to Use: Highly stable, recommended for most users. staging-c3 Staging branch Pre-release testing branches. Community feedback is essential to identify issues before public release. Varied Stability: Generally stable, but intended for testing before public release. dev-c3 Development branches Experimental branches with the latest features and bug fixes brought in manually. Expect bugs and braking changes. Experimental: Least stable, suitable for testers and developers. master Primary development branch All Pull Requests are merged here for future releases. CI automatically strips, minifies, and pushes changes to staging-c3. Running the master branch is suitable for development purposes but not recommended for non-development use. For Development Use: Suitable for developers, may be unstable for general use. Tip
Your feedback is invaluable. Testers, even without software development experience, are encourage to run dev-c3 or staging-c3 and report issues.
release-c3 comma 3/3X release-c3.sunnypilot.ai CHANGELOGS.md staging-c3 comma 3/3X staging-c3.sunnypilot.ai CHANGELOGS.md dev-c3 comma 3/3X dev-c3.sunnypilot.ai CHANGELOGS.md"},{"location":"community/CONTRIBUTING/","title":"How to contribute","text":"Our software is open source so you can solve your own problems without needing help from others. And if you solve a problem and are so kind, you can upstream it for the rest of the world to use. Check out our post about open-sourcing and externalization. Development activity is coordinated through our GitHub Issues, GitHub Discussions, and Discord.
"},{"location":"community/CONTRIBUTING/#getting-started","title":"Getting Started","text":"sunnypilot's priorities are safety, stability, quality, and features, in that order. Aligning with comma's ideals, part of sunnypilot's mission is to solve self-driving cars while delivering shippable intermediaries, and all development is towards that goal.
"},{"location":"community/CONTRIBUTING/#what-gets-merged","title":"What gets merged?","text":"The probability of a pull request being merged is a function of its value to the project and the effort it will take us to get it merged. If a PR offers some value but will take lots of time to get merged, it will be closed. Simple, well-tested bug fixes are the easiest to merge, and new features are the hardest to get merged.
All of these are examples of good PRs:
Check out any good first issue from commaai's openpilot to get started.
"},{"location":"community/CONTRIBUTING/#what-do-i-need-to-contribute","title":"What do I need to contribute?","text":"A lot of sunnypilot work requires only a PC, and some requires a comma device. Most car-related contributions require access to that car, plus a comma device installed in the car.
"},{"location":"community/CONTRIBUTING/#pull-requests","title":"Pull Requests","text":"Pull requests should be against the master branch. If you're unsure about a contribution, feel free to open a discussion, issue, or draft PR to discuss the problem you're trying to solve.
A good pull request has all of the following:
justification
passes the CI tests
#general Discord channel.staging-c3 branch and report issues. This branch is like master but it's built just like a release.Aside from the ML models, most tools used for sunnypilot development are in this repo.
Most development happens on normal Ubuntu workstations, and not in cars or directly on comma devices. See the setup guide for getting your PC setup for sunnypilot development.
"},{"location":"community/WORKFLOW/#quick-start","title":"Quick start","text":"# get the latest stuff\ngit pull\ngit lfs pull\ngit submodule update --init --recursive\n\n# update dependencies\ntools/ubuntu_setup.sh\n\n# build everything\nscons -j$(nproc)\n\n# build just the ui with either of these\nscons -j8 selfdrive/ui/\ncd selfdrive/ui/ && scons -u -j8\n\n# test everything\npytest\n\n# test just logging services\ncd system/loggerd && pytest .\n\n# run the linter\nop lint\n"},{"location":"community/WORKFLOW/#testing","title":"Testing","text":""},{"location":"community/WORKFLOW/#automated-testing","title":"Automated Testing","text":"All PRs and commits are automatically checked by GitHub Actions. Check out .github/workflows/ for what GitHub Actions runs. Any new tests should be added to GitHub Actions.
Code is automatically checked for style by GitHub Actions as part of the automated tests. You can also run these tests yourself by running pre-commit run --all.
sunnypilot is an actively maintained project that we constantly strive to improve. With project of this size and complexity, bugs may occur. If you think you have discovered a bug, you can help us by submitting an issue in comma's public issue tracker, sunnypilot's public issue tracker or on our Discord, following this guide.
"},{"location":"community/reporting-a-bug/#before-creating-an-issue","title":"Before creating an issue","text":"With more than 2,500 users, issues are created frequently. The maintainers of this project are trying very hard to keep the number of open issues and reports down by fixing bugs as fast as possible. By following this guide, you will know exactly what information we need to help you quickly.
But first, please do the following things before creating an issue.
"},{"location":"community/reporting-a-bug/#upgrade-to-the-latest-version","title":"Upgrade to the latest version","text":"Chances are that the bug you discovered was already fixed in a subsequent version. Thus, before reporting an issue, ensure that you're running the latest release version of sunnypilot. Please consult our installation guide to learn how to upgrade to the latest version.
Bug fixes are not backported
Please understand that only bugs that occur in the latest version of sunnypilot will be addressed. Also, to reduce duplicate efforts, fixes cannot be backported to earlier versions.
"},{"location":"community/reporting-a-bug/#remove-customizations","title":"Remove customizations","text":"If you're using customized features, such as your own tweaks of the features, please remove them from the branch you are testing from before reporting a bug. We can't offer official support for bugs that might hide in your implementations, so make sure to omit any customizations from the version being tested.
If, after removing the customizations, the bug is gone, the bug is likely caused by your customizations. A good idea is to add them back gradually to narrow down the root cause of the problem If you did a major version upgrade, make sure you adjusted all customizations you have implemented.
Tip
If you are an advanced user, you could also utilize git bisect to perform a binary search in the history to find a particular regression.
Customizations mentioned in our documentation
A handful of the features sunnypilot offers can only be implemented with customizations. if you find a bug in any of the customizations that our documentations explicitly mentioned, you are, of course, encouraged to report it.
Don't be shy to ask on our Discord for help if you run into problems.
"},{"location":"community/reporting-a-bug/#search-for-solutions","title":"Search for solutions","text":"At this stage, we know that the problem persists in the latest version and is not caused by any of your customizations. However, the problem might result from a small typo or a syntactical error in the source code, e.g., selfdrive/car/interfaces.py.
Now, before you go through the trouble of creating a bug report that is answered and closed right away with a link to the relevant documentation section or another already reported or closed issue or discussion, you can save time for us and yourself by doing some research:
Keep track of all search terms and relevant links, you'll need them in the bug report.1
At this point, when you still haven't found a solution to your problem, we encourage you to report the issue on our Discord because it's now very likely that you stumbled over something we don't know yet. Read the following section to learn how to create a complete and helpful bug report.
"},{"location":"community/reporting-a-bug/#issue-template","title":"Issue template","text":"We have created an issue template to make the bug reporting process as simple as possible, and more efficient for our community and us.
A good title is short and descriptive. It should be a one-sentence executive summary of the issue, so the impact and severity of the bug you want to report can be inferred from the title.
Example Clear Speed Limit Control (SLC) stuck inpreActive when engaged Wordy The Speed Limit Control (SLC) remains in the preActive state when longitudinal it's supposed to be engaged Unclear SLC does not work Useless Help"},{"location":"community/reporting-a-bug/#context","title":"Context optional","text":"Before describing the bug, you can provide additional context for us to understand what you were trying to achieve. Explain the circumstances in which you're using sunnypilot, and what you think might be relevant. Don't write about the bug here.
Why this might be helpful
Some errors only manifest in specific settings, environments or edge cases, for example, when the feature is not available to certain cars.
"},{"location":"community/reporting-a-bug/#bug-description","title":"Bug description","text":"Now, to the bug you want to report. Provide a clear, focused, specific, and concise summary of the bug you encountered. Explain why you think this is a bug that should be reported to sunnypilot, and not to one of its dependencies.2 Adhere to the following principles:
Explain the what, not the how \u2013 don't explain how to reproduce the bug here, we're getting there. Focus on articulating the problem and its impact as clearly as possible.
Keep it short and concise \u2013 if the bug can be precisely explained in one or two sentences, perfect. Don't inflate it \u2013 maintainers and future users will be grateful for having to read less.
One bug at a time \u2013 if you encounter several unrelated bugs, please create separate issues for them. Don't report them in the same issue, as this makes attribution difficult.
Stretch goal \u2013 if you found a workaround or a way to fix the bug, you can help other users temporarily mitigate the problem before we maintainers can fix the bug in our code base.
Why we need this
In order for us to understand the problem, we need a clear description of it and quantify its impact, which is essential for triage and prioritization.
"},{"location":"community/reporting-a-bug/#related-links","title":"Related links","text":"Of course, prior to reporting a bug, you have read our documentation and could not find a working solution. Please share links to all sections of our documentation that might be relevant to the bug, as it helps us gradually improve it.
Additionally, since you have searched comma's issue tracker, sunnypilot's issue tracker or Discord before reporting an issue, and have possibly found several issues or discussions, include those as well. Every link to an issue or discussion creates a backlink, guiding us maintainers and other users in the future.
Stretch goal \u2013 if you also include the search terms you used when searching for a solution to your problem, you make it easier for us maintainers to improve the documentation.
"},{"location":"community/reporting-a-bug/#reproduction","title":"Reproduction","text":"A minimal reproduction is at the heart of every well-written bug report, as it allows us maintainers to instantly recreate the necessary conditions to inspect the bug to quickly find its root cause. It's a proven fact that issues with concise and small reproductions can be fixed much faster.
After you have created the reproduction, take note of your comma Dongle ID. It will be used during the bug report.
Why we need this
If an issue contains no minimal reproduction or just a link to a repository with thousands of files, the maintainers would need to invest a lot of time into trying to recreate the right conditions to even inspect the bug, let alone fix it.
Don't share links to repositories
While we know that it is a good practice among developers to include a link to a repository with the bug report, we currently don't support those in our process. The reason is that the reproduction, which is automatically produced by the route ID contains all the necessary environment information that is often forgotten to be included.
Additionally, there are many non-technical users of sunnypilot that have trouble creating repositories.
"},{"location":"community/reporting-a-bug/#steps-to-reproduce","title":"Steps to reproduce","text":"At this point, you provided us with enough information to understand the bug and provided us with a reproduction that we could run and inspect. However, when we check your reproduction, it might not be immediately apparent how we can see the bug in action.
Thus, please list the specific steps we should follow when running your reproduction to observe the bug. Keep the steps short and concise, and make sure not to leave anything out. Use simple language as you would explain it to a five-year-old, and focus on continuity.
Why we need this
We must know how to navigate your reproduction in order to observe the bug, as some bugs only occur at certain viewports or in specific conditions.
"},{"location":"community/reporting-a-bug/#uploading-logs-and-preserving-routes","title":"Uploading logs and preserving routes","text":"After reproducing the bug, please follow these steps to upload the necessary logs and preserve the routes.
Ensure the route is fully uploaded at comma Connect. We cannot look into issues without routes, or at least a comma Dongle ID.
Note
Sometimes when the qlogs of the route are still being uploaded, some raw logs may not be available to request for upload. Refresh the page a few times once you have confirmed all qlogs have been uploaded, then try to upload all raw logs again if available.
Share your Dongle ID with sunnypilot on comma Connect.
support@sunnypilot.ai.Once all raw logs are uploaded, click \"More info\" and enable the \"Preserved\" option to preserve the route.
Thanks for following the guide and creating a high-quality and complete bug report \u2013 you are almost done. The checklist ensures that you have read this guide and have worked to your best knowledge to provide us with everything we need to know to help you.
support@sunnypilot.ai.We'll take it from here.
We might be using terminology in our documentation different from yours, but we mean the same. When you include the search terms and related links in your bug report, you help us to adjust and improve the documentation.\u00a0\u21a9
Sometimes, users report bugs on our sunnypilot's issue tracker or Discord that are caused by one of our upstream dependencies, including comma's openpilot, comma's panda, or other openpilot forks' dependencies. A good rule of thumb is to reproduce the issue with stock openpilot in the same conditions and check if the problem persists. If it does, the problem is likely not related to sunnypilot and should be reported upstream. When in doubt, use our Discord to ask for help.\u00a0\u21a9
Our documentation is composed of many pages and includes extensive information on features, configurations, customizations, and much more. If you have found an inconsistency or see room for improvement, please follow this guide to submit an issue on our issue tracker.
"},{"location":"community/reporting-a-docs-issue/#issue-template","title":"Issue template","text":"Reporting a documentation issue is usually less involved than reporting a bug. Please thoroughly read this guide before creating a new documentation issue, and provide the following information as part of the issue:
A good title should be a short, one-sentence description of the issue, contain all relevant information and, in particular, keywords to simplify the search in our issue tracker.
Example Clear Clarify Speed Limit Control engagement Unclear Missing information in the docs Useless Help"},{"location":"community/reporting-a-docs-issue/#description","title":"Description","text":"Provide a clear and concise summary of the inconsistency or issue you encountered in the documentation or the documentation section that needs improvement. Explain why you think the documentation should be adjusted and describe the severity of the issue:
Keep it short and concise \u2013 if the inconsistency or issue can be precisely explained in one or two sentences, perfect. Maintainers and future users will be grateful for having to read less.
One issue at a time \u2013 if you encounter several unrelated inconsistencies, please create separate issues for them. Don't report them in the same issue \u2013 it makes attribution difficult.
Why we need this
Describing the problem clearly and concisely is a prerequisite for improving our documentation \u2013 we need to understand what's wrong, so we can fix it.
"},{"location":"community/reporting-a-docs-issue/#related-links","title":"Related links","text":"After you described the documentation section that needs to be adjusted above, we now ask you to share the link to this specific documentation section and other possibly related sections. Make sure to use anchor links (permanent links) where possible, as it simplifies discovery.
Why we need this
Providing the links to the documentation help us understand which sections of our documentation need to be adjusted, extended, or overhauled.
"},{"location":"community/reporting-a-docs-issue/#proposed-change","title":"Proposed change optional","text":"Now that you have provided us with the description and links to the documentation sections, you can help us, maintainers, and the community by proposing an improvement. You can sketch out rough ideas or write a concrete proposal. This field is optional but very helpful.
Why we need this
An improvement proposal can be beneficial for other users who encounter the same issue, as they offer solutions before we maintainers can update the documentation.
"},{"location":"community/reporting-a-docs-issue/#checklist","title":"Checklist","text":"Thanks for following the guide and providing valuable feedback for our documentation \u2013 you are almost done. The checklist ensures that you have read this guide and have worked to your best knowledge to provide us with every piece of information we need to improve it.
We'll take it from here.
"},{"location":"features/","title":"Features","text":"WIP
"},{"location":"features/dynamic-lane-profile/","title":"Dynamic Lane Profile (DLP)","text":"Dynamic Lane Profile (DLP) aims to provide the best driving experience by confidently keeping the vehicle within a lane. It allows sunnypilot to dynamically switch between lane profiles based on the lane recognition confidence level on the road.
Note
Due to the removal of lateral planner in newer Driving Models, Dynamic Lane Profile is only available with the following selected Driving Models:
Laneline or Laneless model.Settings
sunnypilot Panel
Select the desired mode
Modified Assistive Driving Safety (MADS) aims to elevate the user's driving experience by modifying the behaviors of driving assist engagements.
Note
This feature aligns closely with comma.ai's safety rules.
"},{"location":"features/modified-assistive-driving-safety/#independent-engagement","title":"Independent Engagement","text":"MADS allows users to engage sunnypilot Automatic Lane Centering (ALC) for lateral control and Adaptive Cruise Control (ACC) or Smart Cruise Control (SCC) for longitudinal control independently.
Why This Feature ExistsWhile newer car models allow for independent engagement of lateral (steering) and longitudinal (speed) control, many older models and stock openpilot enforce engaging both controls together. MADS introduces this modern convenience to older models, effectively backporting a feature found in newer cars and providing users more flexibility.
"},{"location":"features/modified-assistive-driving-safety/#dedicated-buttons","title":"Dedicated Buttons","text":""},{"location":"features/modified-assistive-driving-safety/#toggle-for-sunnypilot-alc","title":"Toggle for sunnypilot ALC","text":"CRUISE (MAIN) button: Available on all supported cars on sunnypilot.LFA button: Available on newer HKG cars.LKAS button: Available on Honda, Toyota, and Global Subaru.SET- button: Enables ACC/SCC.CANCEL button: Disables ACC/SCC only.CRUISE (MAIN) must be ON to use ACC/SCC.Info
The CRUISE (MAIN) button disables sunnypilot completely when OFF. This is strictly enforced in the panda safety code.
Dedicated toggle to handle Lateral state on brake pedal press and release:
BRAKE pedal will pause Automatic Lane Centering.sunnypilot is a fork of commaai's openpilot, developed by sunnypilot and by users like you. We welcome both pull requests and issues on GitHub.
To use sunnypilot in a car, you need four things:
Supported Device: a comma 3/3X, available at comma.ai/shop.
Software: The setup procedure for the comma 3/3X allows users to enter a URL for custom software. Use the URL release-c3.sunnypilot.ai to install the release version.
Supported Car: Ensure that you have one of the 275+ supported cars.
Car Harness: You will also need a car harness to connect your comma 3/3X to your car.
comma.ai have detailed instructions for how to install the harness and device in a car.
Note
It's possible to run sunnypilot on other hardware, although it's not plug-and-play.
"},{"location":"getting-started/what-is-sunnypilot/","title":"What is sunnypilot?","text":"sunnypilot is a fork of comma.ai's openpilot, an open source driver assistance system. sunnypilot offers the user a unique driving experience for over 250+ supported car makes and models with modified behaviors of driving assist engagements. sunnypilot complies with comma.ai's safety rules as accurately as possible.
"},{"location":"getting-started/what-is-sunnypilot/#how-do-i-use-it","title":"How do I use it?","text":"sunnypilot is designed to be used on the comma 3/3X.
"},{"location":"getting-started/what-is-sunnypilot/#how-does-it-work","title":"How does it work?","text":"In short, sunnypilot uses the car's existing APIs for the built-in ADAS system and simply provides better acceleration, braking, and steering inputs than the stock system.
"},{"location":"how-to/enable-mapbox-navigation/","title":"\ud83d\uddfa Enable Mapbox Navigation","text":"Enabling Mapbox Navigation on your sunnypilot \ud83d\ude97 enhances your driving experience by providing accurate maps and directions. Follow the steps below to set up and enjoy this feature:
"},{"location":"how-to/enable-mapbox-navigation/#setup-steps","title":"\ud83d\udee0 Setup Steps","text":"Create a Free Mapbox Account: Sign up for a free Mapbox account. Although a credit card is required for verification, you will not be charged for the free tier.
Generate Access Tokens: On the Dashboard, find the Access Tokens section and click Create a Token. Name it as you like and set the scopes to allow everything for both Public and Secret. Copy both keys. \u26a0\ufe0f Remember: You won't be able to access the secret key after this window.
Enable Mapbox Navigation on C3: Go to SP - Visuals on your C3 and toggle Enable Mapbox Navigation*. Accept the reboot prompt.
Connect C3 to Network: Once rebooted, connect your C3 to a network with internet access and note the C3\u2019s IP address.
Configure Keys: In a browser, navigate to C3_IP:8082 (e.g., 192.168.1.69:8082). You should see the Comma logo and an input field. Paste your Public token (pk.xx), press enter, paste your Secret key (sk.xx), and press enter again. This page lets you search for destinations.
Set Home and Work Addresses: To set Home and Work addresses, search for a place, select Home/Work from the dropdown, and click Navigate. For other destinations, select Recent Places.
Search on C3: At this time, it is not possible to search directly on the C3.
:::tip TIPS: - If your C3 shows a \"Map Loading\" screen, a reboot via the UI should fix it. - Connect the C3 to your phone's hotspot and use your phone browser to search for places. - In the Navigation panel on the C3, select Home, Work, and Recent Places without needing a browser (assuming internet connection). :::
:::warning IMPORTANT NOTE: Your C3 requires an active internet connection to download map data, generate directions, and update ETA. Once data is downloaded, offline use is possible, but updates (like new directions after a missed turn) won't occur. :::
:::info NAVIGATION NOTE: Mapbox does not support alphanumeric addresses (e.g., W123N1234 Main St). There is currently no known workaround for this. :::
"},{"location":"how-to/radar-tracks/","title":"\ud83d\udce1 Radar Tracks","text":"Unlock the potential of your sunnypilot \ud83d\ude97 by enabling Radar Tracks manually on applicable cars. Thanks to @greghogan and @pd0wm, this feature is now accessible through SSH.
:::info How Radar Points Can Be Used Along With Vision: Current Openpilot policy is to identify with vision first and match it to a radar point. If vision sees nothing, you get a false negative and no lead car detection. (Source: Hubblesphere#7894 from comma.ai community Discord) :::
"},{"location":"how-to/radar-tracks/#enable-radar-tracks-experimental","title":"\ud83d\udea8 Enable Radar Tracks (Experimental)","text":"(As of January 1st, 2022) (Applicable to some Hyundai, Kia, and Genesis cars) (Based on version 0.8.12 devel)
:::caution USE AT YOUR OWN RISK! Stock system safety features, like AEB and FCW, might be affected by these changes. :::
"},{"location":"how-to/radar-tracks/#steps-to-enable-radar-tracks","title":"Steps to Enable Radar Tracks:","text":"Preparation: Ensure the car is in the OFF ignition position and connect your compatible comma device (EON, C2, C3) to the car.
SSH Connection: Connect to your comma device via SSH. (Instructions HERE)
Execute Commands: In the SSH terminal, execute the following commands:
pkill -f openpilot\npython /data/openpilot/selfdrive/debug/hyundai_enable_radar_points.py\n Follow the script instructions and ensure no faults appear. Reboot: Reboot your comma device and start your car ensuring no faults.
Test Drive: Go for a quick drive, drive behind a lead car, and allow the drive to upload its rlogs in comma Connect.
Verify in Cabana: Open the drive in Cabana from comma Connect, load hyundai_kia_mando_front_radar.dbc, search RADAR_TRACK_50x, and check LONG_DIST.
Confirmation: If the radar tracks data is relevant, you've successfully enabled radar tracks.
:::tip Having issues or need assistance? Reach out to the community in Sunnyhaibin's Openpilot Discord Server or #hyundai-kia-genesis channel on commaai community Discord Server. :::
A getting started guide for openpilot development
In 30 minutes, we'll get an openpilot development environment setup on your computer and make some changes to openpilot's UI.
And if you have a comma 3/3X, we'll deploy the change to your device for testing.
"},{"location":"how-to/turn-the-speed-blue/#1-setup-your-development-environment","title":"1. Setup your development environment","text":"Run this to clone openpilot and install all the dependencies:
curl -fsSL openpilot.comma.ai | bash\n Navigate to openpilot folder & activate a Python virtual environment
cd openpilot\nsource .venv/bin/activate\n Then, compile openpilot:
scons -j8\n"},{"location":"how-to/turn-the-speed-blue/#2-run-replay","title":"2. Run replay","text":"We'll run the replay tool with the demo route to get data streaming for testing our UI changes.
# in terminal 1\ntools/replay/replay --demo\n\n# in terminal 2\nselfdrive/ui/ui\n The openpilot UI should launch and show a replay of the demo route.
If you have your own comma device, you can replace --demo with one of your own routes from comma connect.
Search for \u201cmph\u201d with git grep in the ui folder.
$ git grep \"mph\" selfdrive/ui/\npaint.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\");\n The line right above contains the actual speed. Unfortunately, COLOR_BLUE isn\u2019t defined, but a git grep of COLOR_WHITE shows it\u2019s nvgRGBA(255, 255, 255, 255). Personally, I like a lighter blue, so I went with #8080FF.
$ git diff\ndiff --git a/selfdrive/ui/paint.cc b/selfdrive/ui/paint.cc\nindex 821d95115..cc996eaa1 100644\n--- a/selfdrive/ui/paint.cc\n+++ b/selfdrive/ui/paint.cc\n@@ -175,8 +175,8 @@ static void ui_draw_vision_speed(UIState *s) {\n const float speed = std::max(0.0, (*s->sm)[\"carState\"].getCarState().getVEgo() * (s->scene.is_metric ? 3.6 : 2.2369363));\n const std::string speed_str = std::to_string((int)std::nearbyint(speed));\n nvgTextAlign(s->vg, NVG_ALIGN_CENTER | NVG_ALIGN_BASELINE);\n- ui_draw_text(s, s->fb_w/2, 210, speed_str.c_str(), 96 * 2.5, COLOR_WHITE, \"sans-bold\");\n- 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\");\n+ ui_draw_text(s, s->fb_w/2, 210, speed_str.c_str(), 96 * 2.5, nvgRGBA(128, 128, 255, 255), \"sans-bold\");\n+ 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\");\n }\n\n static void ui_draw_vision_event(UIState *s) {\n"},{"location":"how-to/turn-the-speed-blue/#4-rebuild-ui-and-admire-your-work","title":"4. Rebuild UI, and admire your work","text":"scons -j8 && selfdrive/ui/ui\n"},{"location":"how-to/turn-the-speed-blue/#5-push-your-fork-to-github","title":"5. Push your fork to GitHub","text":"Click fork on GitHub. Then, push with:
git remote rm origin\ngit remote add origin git@github.com:<your-github-username>/openpilot.git\ngit add .\ngit commit -m \"Make the speed blue.\"\ngit push --set-upstream origin master\n"},{"location":"how-to/turn-the-speed-blue/#6-run-your-fork-on-device-in-your-car","title":"6. Run your fork on device in your car!","text":"Uninstall openpilot from your device through the settings. Then, enter the URL for your very own installer:
installer.comma.ai/<your-github-username>/master\n"},{"location":"how-to/turn-the-speed-blue/#7-admire-your-work-irl","title":"7. Admire your work IRL","text":""},{"location":"safety-information/prohibited-safety-modifications/","title":"Prohibited Safety Modifications","text":"All official sunnypilot branches strictly adhere to comma.ai's safety policy. Any changes that go against this policy will result in your fork and your device being banned from both comma.ai and sunnypilot channels.
The following changes are VIOLATIONS of the safety policy and ARE NOT supported in any official sunnypilot branches:
Driver Monitoring
Panda Safety
CRUISE MAIN in OFF state.It is recommended to read the entire documentation before proceeding. This will ensure that you fully understand each added feature in sunnypilot. This also ensures that you are choosing the correct settings and branch for your car to have the best driving experience.
Warning
By installing this software, you accept all responsibility for anything that might occur while you use it. sunnypilot and all contributors to sunnypilot are not liable.
Use at your own risk.
"},{"location":"setup/read-before-installing/#installation","title":"Installation","text":"Please refer to the Recommended Branches to find your preferred/supported branch. This guide will assume you want to install the latest release-c3 branch.
You can install sunnypilot on your comma 3/3X using one of the following methods:
"},{"location":"setup/read-before-installing/#url-method-directly-on-device","title":"URL Method (Directly on Device)","text":"This method allows you to install sunnypilot directly from your device's screen using a provided URL. It's simple and user-friendly, requiring no additional tools or external devices.
"},{"location":"setup/read-before-installing/#ssh-method-command-line","title":"SSH Method (Command Line)","text":"This method is for advanced users who prefer to use SSH to clone the sunnypilot repository and install it manually via the command line. It offeres greater control over the installation process.
"},{"location":"setup/ssh-method/","title":"SSH Method","text":"If you are looking to install sunnypilot via SSH, run the following commands in an SSH terminal after connecting to your comma 3/3X:
data directory cd /data\nClone sunnypilot
release-c3 branch is used in this step as an example.
git clone release-c3 --recurse-submodules https://github.com/sunnyhaibin/openpilot.git \n Git LFS
git lfs pull\n sudo reboot\nThe URL installation method can be done in two ways, depending on your current setup and version of sunnypilot on your device.
sunnypilot not installed, or sunnypilot < 0.8.17sunnypilot already installed, or sunnypilot \u2265 0.8.17Custom Software when given the option.Recommended Branches
Branch Installation URLrelease-c3 release-c3.sunnypilot.ai staging-c3 staging-c3.sunnypilot.ai dev-c3 dev-c3.sunnypilot.ai Example of Installation URL
release-c3.sunnypilot.ai1
Settings \u2192 Software.Download option, press CHECK. This will fetch the list of latest branches from the sunnypilot repository on GitHub.Target Branch option, press SELECT to open the Target Branch selector.Recommended Branches
Branch Installation URLrelease-c3 release-c3.sunnypilot.ai staging-c3 staging-c3.sunnypilot.ai dev-c3 dev-c3.sunnypilot.ai Example of Desired Branch
release-c3
Shortened URL for convenience. Full URL is smiskol.com/fork/sunnyhaibin/release-c3.\u00a0\u21a9
Visit https://bit.ly/sunnyreadme for more details * sunnypilot 0.8.14 release - based on openpilot 0.8.14 devel * \"0.8.14-prod-c3\" branch only supports comma three * If you have a comma two, EON, or other devices than a comma three, visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * Mono-branch support * Honda/Acura * Hyundai/Kia/Genesis * Toyota/Lexus * Volkswagen MQB * Modified Assistive Driving Safety (MADS) Mode * NEW\u2757: CRUISE (MAIN) now engages MADS for all supported car makes * NEW\u2757: Added toggle to disable disengaging Automatic Lane Centering (ALC) on the brake pedal * Dynamic Lane Profile (DLP) * NEW\u2757: Gap Adjust Cruise (GAC) * openpilot longitudinal cars can now adjust between the lead car's following distance gap via 3 modes: * Steering Wheel (SW) | User Interface (UI) | Steering Wheel + User Interface (SW+UI) * NEW\u2757: Custom Camera & Path Offsets * NEW\u2757: Torque Lateral Control from openpilot 0.8.15 master (as of 2022-06-15) * NEW\u2757: Torque Lateral Control Live Tune Menu * NEW\u2757: Speed Limit Sign from openpilot 0.8.15 master (as of 2022-06-22) * NEW\u2757: Mapbox Speed Limit data will now be utilized in Speed Limit Control (SLC) * Speed limit data will be utilized in the following availability: * Mapbox (active navigation) -> OpenStreetMap -> Car Interface (Toyota's TSR) * Custom Stock Longitudinal Control * NEW\u2757: Volkswagen MQB * Honda * Hyundai/Kia/Genesis * NEW\u2757: Mapbox navigation support for non-Prime users * Visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * Hyundai/Kia/Genesis * NEW\u2757: Enhanced SCC (ESCC) Support * Requires hardware modification. Visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * NEW\u2757: Smart MDPS (SMDPS) Support - Auto-detection * Requires hardware modification and custom firmware for the SMDPS. Visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * Toyota/Lexus * NEW\u2757: Added toggle to enforce stock longitudinal control
"},{"location":"setup/changelogs/#sunnypilot-version-0812-4","title":"sunnypilot - Version 0.8.12-4","text":"develsunnypilot is a fork of comma.ai's openpilot, an open source driver assistance system. sunnypilot offers the user a unique driving experience for over 250+ supported car makes and models with modified behaviors of driving assist engagements. sunnypilot complies with comma.ai's safety rules as accurately as possible.
"},{"location":"#how-do-i-use-it","title":"How do I use it?","text":"sunnypilot is designed to be used on the comma 3/3X.
"},{"location":"#how-does-it-work","title":"How does it work?","text":"In short, sunnypilot uses the car's existing APIs for the built-in ADAS system and simply provides better acceleration, braking, and steering inputs than the stock system.
"},{"location":"CHANGELOGS/","title":"sunnypilot - 0.9.8.0 (2024-xx-xx)","text":"Visit https://bit.ly/sunnyreadme for more details * sunnypilot 0.8.14 release - based on openpilot 0.8.14 devel * \"0.8.14-prod-c3\" branch only supports comma three * If you have a comma two, EON, or other devices than a comma three, visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * Mono-branch support * Honda/Acura * Hyundai/Kia/Genesis * Toyota/Lexus * Volkswagen MQB * Modified Assistive Driving Safety (MADS) Mode * NEW\u2757: CRUISE (MAIN) now engages MADS for all supported car makes * NEW\u2757: Added toggle to disable disengaging Automatic Lane Centering (ALC) on the brake pedal * Dynamic Lane Profile (DLP) * NEW\u2757: Gap Adjust Cruise (GAC) * openpilot longitudinal cars can now adjust between the lead car's following distance gap via 3 modes: * Steering Wheel (SW) | User Interface (UI) | Steering Wheel + User Interface (SW+UI) * NEW\u2757: Custom Camera & Path Offsets * NEW\u2757: Torque Lateral Control from openpilot 0.8.15 master (as of 2022-06-15) * NEW\u2757: Torque Lateral Control Live Tune Menu * NEW\u2757: Speed Limit Sign from openpilot 0.8.15 master (as of 2022-06-22) * NEW\u2757: Mapbox Speed Limit data will now be utilized in Speed Limit Control (SLC) * Speed limit data will be utilized in the following availability: * Mapbox (active navigation) -> OpenStreetMap -> Car Interface (Toyota's TSR) * Custom Stock Longitudinal Control * NEW\u2757: Volkswagen MQB * Honda * Hyundai/Kia/Genesis * NEW\u2757: Mapbox navigation support for non-Prime users * Visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * Hyundai/Kia/Genesis * NEW\u2757: Enhanced SCC (ESCC) Support * Requires hardware modification. Visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * NEW\u2757: Smart MDPS (SMDPS) Support - Auto-detection * Requires hardware modification and custom firmware for the SMDPS. Visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * Toyota/Lexus * NEW\u2757: Added toggle to enforce stock longitudinal control
"},{"location":"CHANGELOGS/#sunnypilot-version-0812-4","title":"sunnypilot - Version 0.8.12-4","text":"developenpilot is an Adaptive Cruise Control (ACC) and Automated Lane Centering (ALC) system. Like other ACC and ALC systems, openpilot is a failsafe passive system and it requires the driver to be alert and to pay attention at all times.
In order to enforce driver alertness, openpilot includes a driver monitoring feature that alerts the driver when distracted.
However, even with an attentive driver, we must make further efforts for the system to be safe. We repeat, driver alertness is necessary, but not sufficient, for openpilot to be used safely and openpilot is provided with no warranty of fitness for any purpose.
openpilot is developed in good faith to be compliant with FMVSS requirements and to follow industry standards of safety for Level 2 Driver Assistance Systems. In particular, we observe ISO26262 guidelines, including those from pertinent documents released by NHTSA. In addition, we impose strict coding guidelines (like MISRA C : 2012) on parts of openpilot that are safety relevant. We also perform software-in-the-loop, hardware-in-the-loop and in-vehicle tests before each software release.
Following Hazard and Risk Analysis and FMEA, at a very high level, we have designed openpilot ensuring two main safety requirements.
For additional safety implementation details, refer to panda safety model. For vehicle specific implementation of the safety concept, refer to panda/board/safety/.
Extra note: comma.ai strongly discourages the use of openpilot forks with safety code either missing or not fully meeting the above requirements.
For these actuator limits we observe ISO11270 and ISO15622. Lateral limits described there translate to 0.9 seconds of maximum actuation to achieve a 1m lateral deviation.\u00a0\u21a9
release-c3 Release branch Stable release branches. After testing on staging-c3, updates are pushed here and published publicly. Ready to Use: Highly stable, recommended for most users. staging-c3 Staging branch Pre-release testing branches. Community feedback is essential to identify issues before public release. Varied Stability: Generally stable, but intended for testing before public release. dev-c3 Development branches Experimental branches with the latest features and bug fixes brought in manually. Expect bugs and braking changes. Experimental: Least stable, suitable for testers and developers. master Primary development branch All Pull Requests are merged here for future releases. CI automatically strips, minifies, and pushes changes to staging-c3. Running the master branch is suitable for development purposes but not recommended for non-development use. For Development Use: Suitable for developers, may be unstable for general use. Tip
Your feedback is invaluable. Testers, even without software development experience, are encourage to run dev-c3 or staging-c3 and report issues.
release-c3 comma 3/3X release-c3.sunnypilot.ai CHANGELOGS.md staging-c3 comma 3/3X staging-c3.sunnypilot.ai CHANGELOGS.md dev-c3 comma 3/3X dev-c3.sunnypilot.ai CHANGELOGS.md"},{"location":"community/CONTRIBUTING/","title":"How to contribute","text":"Our software is open source so you can solve your own problems without needing help from others. And if you solve a problem and are so kind, you can upstream it for the rest of the world to use. Check out our post about open-sourcing and externalization. Development activity is coordinated through our GitHub Issues, GitHub Discussions, and Discord.
"},{"location":"community/CONTRIBUTING/#getting-started","title":"Getting Started","text":"sunnypilot's priorities are safety, stability, quality, and features, in that order. Aligning with comma's ideals, part of sunnypilot's mission is to solve self-driving cars while delivering shippable intermediaries, and all development is towards that goal.
"},{"location":"community/CONTRIBUTING/#what-gets-merged","title":"What gets merged?","text":"The probability of a pull request being merged is a function of its value to the project and the effort it will take us to get it merged. If a PR offers some value but will take lots of time to get merged, it will be closed. Simple, well-tested bug fixes are the easiest to merge, and new features are the hardest to get merged.
All of these are examples of good PRs:
Check out any good first issue from commaai's openpilot to get started.
"},{"location":"community/CONTRIBUTING/#what-do-i-need-to-contribute","title":"What do I need to contribute?","text":"A lot of sunnypilot work requires only a PC, and some requires a comma device. Most car-related contributions require access to that car, plus a comma device installed in the car.
"},{"location":"community/CONTRIBUTING/#pull-requests","title":"Pull Requests","text":"Pull requests should be against the master branch. If you're unsure about a contribution, feel free to open a discussion, issue, or draft PR to discuss the problem you're trying to solve.
A good pull request has all of the following:
justification
passes the CI tests
#general Discord channel.staging-c3 branch and report issues. This branch is like master but it's built just like a release.Aside from the ML models, most tools used for sunnypilot development are in this repo.
Most development happens on normal Ubuntu workstations, and not in cars or directly on comma devices. See the setup guide for getting your PC setup for sunnypilot development.
"},{"location":"community/WORKFLOW/#quick-start","title":"Quick start","text":"# get the latest stuff\ngit pull\ngit lfs pull\ngit submodule update --init --recursive\n\n# update dependencies\ntools/ubuntu_setup.sh\n\n# build everything\nscons -j$(nproc)\n\n# build just the ui with either of these\nscons -j8 selfdrive/ui/\ncd selfdrive/ui/ && scons -u -j8\n\n# test everything\npytest\n\n# test just logging services\ncd system/loggerd && pytest .\n\n# run the linter\nop lint\n"},{"location":"community/WORKFLOW/#testing","title":"Testing","text":""},{"location":"community/WORKFLOW/#automated-testing","title":"Automated Testing","text":"All PRs and commits are automatically checked by GitHub Actions. Check out .github/workflows/ for what GitHub Actions runs. Any new tests should be added to GitHub Actions.
Code is automatically checked for style by GitHub Actions as part of the automated tests. You can also run these tests yourself by running pre-commit run --all.
sunnypilot is an actively maintained project that we constantly strive to improve. With project of this size and complexity, bugs may occur. If you think you have discovered a bug, you can help us by submitting an issue in comma's public issue tracker, sunnypilot's public issue tracker or on our Discord, following this guide.
"},{"location":"community/reporting-a-bug/#before-creating-an-issue","title":"Before creating an issue","text":"With more than 2,500 users, issues are created frequently. The maintainers of this project are trying very hard to keep the number of open issues and reports down by fixing bugs as fast as possible. By following this guide, you will know exactly what information we need to help you quickly.
But first, please do the following things before creating an issue.
"},{"location":"community/reporting-a-bug/#upgrade-to-the-latest-version","title":"Upgrade to the latest version","text":"Chances are that the bug you discovered was already fixed in a subsequent version. Thus, before reporting an issue, ensure that you're running the latest release version of sunnypilot. Please consult our installation guide to learn how to upgrade to the latest version.
Bug fixes are not backported
Please understand that only bugs that occur in the latest version of sunnypilot will be addressed. Also, to reduce duplicate efforts, fixes cannot be backported to earlier versions.
"},{"location":"community/reporting-a-bug/#remove-customizations","title":"Remove customizations","text":"If you're using customized features, such as your own tweaks of the features, please remove them from the branch you are testing from before reporting a bug. We can't offer official support for bugs that might hide in your implementations, so make sure to omit any customizations from the version being tested.
If, after removing the customizations, the bug is gone, the bug is likely caused by your customizations. A good idea is to add them back gradually to narrow down the root cause of the problem If you did a major version upgrade, make sure you adjusted all customizations you have implemented.
Tip
If you are an advanced user, you could also utilize git bisect to perform a binary search in the history to find a particular regression.
Customizations mentioned in our documentation
A handful of the features sunnypilot offers can only be implemented with customizations. if you find a bug in any of the customizations that our documentations explicitly mentioned, you are, of course, encouraged to report it.
Don't be shy to ask on our Discord for help if you run into problems.
"},{"location":"community/reporting-a-bug/#search-for-solutions","title":"Search for solutions","text":"At this stage, we know that the problem persists in the latest version and is not caused by any of your customizations. However, the problem might result from a small typo or a syntactical error in the source code, e.g., selfdrive/car/interfaces.py.
Now, before you go through the trouble of creating a bug report that is answered and closed right away with a link to the relevant documentation section or another already reported or closed issue or discussion, you can save time for us and yourself by doing some research:
Keep track of all search terms and relevant links, you'll need them in the bug report.1
At this point, when you still haven't found a solution to your problem, we encourage you to report the issue on our Discord because it's now very likely that you stumbled over something we don't know yet. Read the following section to learn how to create a complete and helpful bug report.
"},{"location":"community/reporting-a-bug/#issue-template","title":"Issue template","text":"We have created an issue template to make the bug reporting process as simple as possible, and more efficient for our community and us.
A good title is short and descriptive. It should be a one-sentence executive summary of the issue, so the impact and severity of the bug you want to report can be inferred from the title.
Example Clear Speed Limit Control (SLC) stuck inpreActive when engaged Wordy The Speed Limit Control (SLC) remains in the preActive state when longitudinal it's supposed to be engaged Unclear SLC does not work Useless Help"},{"location":"community/reporting-a-bug/#context","title":"Context optional","text":"Before describing the bug, you can provide additional context for us to understand what you were trying to achieve. Explain the circumstances in which you're using sunnypilot, and what you think might be relevant. Don't write about the bug here.
Why this might be helpful
Some errors only manifest in specific settings, environments or edge cases, for example, when the feature is not available to certain cars.
"},{"location":"community/reporting-a-bug/#bug-description","title":"Bug description","text":"Now, to the bug you want to report. Provide a clear, focused, specific, and concise summary of the bug you encountered. Explain why you think this is a bug that should be reported to sunnypilot, and not to one of its dependencies.2 Adhere to the following principles:
Explain the what, not the how \u2013 don't explain how to reproduce the bug here, we're getting there. Focus on articulating the problem and its impact as clearly as possible.
Keep it short and concise \u2013 if the bug can be precisely explained in one or two sentences, perfect. Don't inflate it \u2013 maintainers and future users will be grateful for having to read less.
One bug at a time \u2013 if you encounter several unrelated bugs, please create separate issues for them. Don't report them in the same issue, as this makes attribution difficult.
Stretch goal \u2013 if you found a workaround or a way to fix the bug, you can help other users temporarily mitigate the problem before we maintainers can fix the bug in our code base.
Why we need this
In order for us to understand the problem, we need a clear description of it and quantify its impact, which is essential for triage and prioritization.
"},{"location":"community/reporting-a-bug/#related-links","title":"Related links","text":"Of course, prior to reporting a bug, you have read our documentation and could not find a working solution. Please share links to all sections of our documentation that might be relevant to the bug, as it helps us gradually improve it.
Additionally, since you have searched comma's issue tracker, sunnypilot's issue tracker or Discord before reporting an issue, and have possibly found several issues or discussions, include those as well. Every link to an issue or discussion creates a backlink, guiding us maintainers and other users in the future.
Stretch goal \u2013 if you also include the search terms you used when searching for a solution to your problem, you make it easier for us maintainers to improve the documentation.
"},{"location":"community/reporting-a-bug/#reproduction","title":"Reproduction","text":"A minimal reproduction is at the heart of every well-written bug report, as it allows us maintainers to instantly recreate the necessary conditions to inspect the bug to quickly find its root cause. It's a proven fact that issues with concise and small reproductions can be fixed much faster.
After you have created the reproduction, take note of your comma Dongle ID. It will be used during the bug report.
Why we need this
If an issue contains no minimal reproduction or just a link to a repository with thousands of files, the maintainers would need to invest a lot of time into trying to recreate the right conditions to even inspect the bug, let alone fix it.
Don't share links to repositories
While we know that it is a good practice among developers to include a link to a repository with the bug report, we currently don't support those in our process. The reason is that the reproduction, which is automatically produced by the route ID contains all the necessary environment information that is often forgotten to be included.
Additionally, there are many non-technical users of sunnypilot that have trouble creating repositories.
"},{"location":"community/reporting-a-bug/#steps-to-reproduce","title":"Steps to reproduce","text":"At this point, you provided us with enough information to understand the bug and provided us with a reproduction that we could run and inspect. However, when we check your reproduction, it might not be immediately apparent how we can see the bug in action.
Thus, please list the specific steps we should follow when running your reproduction to observe the bug. Keep the steps short and concise, and make sure not to leave anything out. Use simple language as you would explain it to a five-year-old, and focus on continuity.
Why we need this
We must know how to navigate your reproduction in order to observe the bug, as some bugs only occur at certain viewports or in specific conditions.
"},{"location":"community/reporting-a-bug/#uploading-logs-and-preserving-routes","title":"Uploading logs and preserving routes","text":"After reproducing the bug, please follow these steps to upload the necessary logs and preserve the routes.
Ensure the route is fully uploaded at comma Connect. We cannot look into issues without routes, or at least a comma Dongle ID.
Note
Sometimes when the qlogs of the route are still being uploaded, some raw logs may not be available to request for upload. Refresh the page a few times once you have confirmed all qlogs have been uploaded, then try to upload all raw logs again if available.
Share your Dongle ID with sunnypilot on comma Connect.
support@sunnypilot.ai.Once all raw logs are uploaded, click \"More info\" and enable the \"Preserved\" option to preserve the route.
Thanks for following the guide and creating a high-quality and complete bug report \u2013 you are almost done. The checklist ensures that you have read this guide and have worked to your best knowledge to provide us with everything we need to know to help you.
support@sunnypilot.ai.We'll take it from here.
We might be using terminology in our documentation different from yours, but we mean the same. When you include the search terms and related links in your bug report, you help us to adjust and improve the documentation.\u00a0\u21a9
Sometimes, users report bugs on our sunnypilot's issue tracker or Discord that are caused by one of our upstream dependencies, including comma's openpilot, comma's panda, or other openpilot forks' dependencies. A good rule of thumb is to reproduce the issue with stock openpilot in the same conditions and check if the problem persists. If it does, the problem is likely not related to sunnypilot and should be reported upstream. When in doubt, use our Discord to ask for help.\u00a0\u21a9
Our documentation is composed of many pages and includes extensive information on features, configurations, customizations, and much more. If you have found an inconsistency or see room for improvement, please follow this guide to submit an issue on our issue tracker.
"},{"location":"community/reporting-a-docs-issue/#issue-template","title":"Issue template","text":"Reporting a documentation issue is usually less involved than reporting a bug. Please thoroughly read this guide before creating a new documentation issue, and provide the following information as part of the issue:
A good title should be a short, one-sentence description of the issue, contain all relevant information and, in particular, keywords to simplify the search in our issue tracker.
Example Clear Clarify Speed Limit Control engagement Unclear Missing information in the docs Useless Help"},{"location":"community/reporting-a-docs-issue/#description","title":"Description","text":"Provide a clear and concise summary of the inconsistency or issue you encountered in the documentation or the documentation section that needs improvement. Explain why you think the documentation should be adjusted and describe the severity of the issue:
Keep it short and concise \u2013 if the inconsistency or issue can be precisely explained in one or two sentences, perfect. Maintainers and future users will be grateful for having to read less.
One issue at a time \u2013 if you encounter several unrelated inconsistencies, please create separate issues for them. Don't report them in the same issue \u2013 it makes attribution difficult.
Why we need this
Describing the problem clearly and concisely is a prerequisite for improving our documentation \u2013 we need to understand what's wrong, so we can fix it.
"},{"location":"community/reporting-a-docs-issue/#related-links","title":"Related links","text":"After you described the documentation section that needs to be adjusted above, we now ask you to share the link to this specific documentation section and other possibly related sections. Make sure to use anchor links (permanent links) where possible, as it simplifies discovery.
Why we need this
Providing the links to the documentation help us understand which sections of our documentation need to be adjusted, extended, or overhauled.
"},{"location":"community/reporting-a-docs-issue/#proposed-change","title":"Proposed change optional","text":"Now that you have provided us with the description and links to the documentation sections, you can help us, maintainers, and the community by proposing an improvement. You can sketch out rough ideas or write a concrete proposal. This field is optional but very helpful.
Why we need this
An improvement proposal can be beneficial for other users who encounter the same issue, as they offer solutions before we maintainers can update the documentation.
"},{"location":"community/reporting-a-docs-issue/#checklist","title":"Checklist","text":"Thanks for following the guide and providing valuable feedback for our documentation \u2013 you are almost done. The checklist ensures that you have read this guide and have worked to your best knowledge to provide us with every piece of information we need to improve it.
We'll take it from here.
"},{"location":"features/","title":"Features","text":"WIP
"},{"location":"features/dynamic-lane-profile/","title":"Dynamic Lane Profile (DLP)","text":"Dynamic Lane Profile (DLP) aims to provide the best driving experience by confidently keeping the vehicle within a lane. It allows sunnypilot to dynamically switch between lane profiles based on the lane recognition confidence level on the road.
Note
Due to the removal of lateral planner in newer Driving Models, Dynamic Lane Profile is only available with the following selected Driving Models:
Laneline or Laneless model.Settings
sunnypilot Panel
Select the desired mode
Modified Assistive Driving Safety (MADS) aims to elevate the user's driving experience by modifying the behaviors of driving assist engagements.
Note
This feature aligns closely with comma.ai's safety rules.
"},{"location":"features/modified-assistive-driving-safety/#independent-engagement","title":"Independent Engagement","text":"MADS allows users to engage sunnypilot Automatic Lane Centering (ALC) for lateral control and Adaptive Cruise Control (ACC) or Smart Cruise Control (SCC) for longitudinal control independently.
Why This Feature ExistsWhile newer car models allow for independent engagement of lateral (steering) and longitudinal (speed) control, many older models and stock openpilot enforce engaging both controls together. MADS introduces this modern convenience to older models, effectively backporting a feature found in newer cars and providing users more flexibility.
"},{"location":"features/modified-assistive-driving-safety/#dedicated-buttons","title":"Dedicated Buttons","text":""},{"location":"features/modified-assistive-driving-safety/#toggle-for-sunnypilot-alc","title":"Toggle for sunnypilot ALC","text":"CRUISE (MAIN) button: Available on all supported cars on sunnypilot.LFA button: Available on newer HKG cars.LKAS button: Available on Honda, Toyota, and Global Subaru.SET- button: Enables ACC/SCC.CANCEL button: Disables ACC/SCC only.CRUISE (MAIN) must be ON to use ACC/SCC.Info
The CRUISE (MAIN) button disables sunnypilot completely when OFF. This is strictly enforced in the panda safety code.
Dedicated toggle to handle Lateral state on brake pedal press and release:
BRAKE pedal will pause Automatic Lane Centering.sunnypilot is a fork of commaai's openpilot, developed by sunnypilot and by users like you. We welcome both pull requests and issues on GitHub.
To use sunnypilot in a car, you need four things:
Supported Device: a comma 3/3X, available at comma.ai/shop.
Software: The setup procedure for the comma 3/3X allows users to enter a URL for custom software. Use the URL release-c3.sunnypilot.ai to install the release version.
Supported Car: Ensure that you have one of the 275+ supported cars.
Car Harness: You will also need a car harness to connect your comma 3/3X to your car.
comma.ai have detailed instructions for how to install the harness and device in a car.
Note
It's possible to run sunnypilot on other hardware, although it's not plug-and-play.
"},{"location":"getting-started/what-is-sunnypilot/","title":"What is sunnypilot?","text":"sunnypilot is a fork of comma.ai's openpilot, an open source driver assistance system. sunnypilot offers the user a unique driving experience for over 250+ supported car makes and models with modified behaviors of driving assist engagements. sunnypilot complies with comma.ai's safety rules as accurately as possible.
"},{"location":"getting-started/what-is-sunnypilot/#how-do-i-use-it","title":"How do I use it?","text":"sunnypilot is designed to be used on the comma 3/3X.
"},{"location":"getting-started/what-is-sunnypilot/#how-does-it-work","title":"How does it work?","text":"In short, sunnypilot uses the car's existing APIs for the built-in ADAS system and simply provides better acceleration, braking, and steering inputs than the stock system.
"},{"location":"how-to/enabling-mapbox-navigation/","title":"Enabling Mapbox navigation","text":"Enabling Mapbox Navigation on sunnypilot enhances your driving experience by providing accurate maps and directions.
Following the instructions below, you will set up a free Mapbox account, generating your own access token, and configuring on your comma 3/3X. Next:
"},{"location":"how-to/enabling-mapbox-navigation/#1-create-a-free-mapbox-account","title":"1. Create a free Mapbox account","text":"Sign up for a free Mapbox account. Although a credit card is required for verification, you will not be charged for the free tier.
"},{"location":"how-to/enabling-mapbox-navigation/#2-generate-access-token","title":"2. Generate access token","text":"Warning
You won't be able to access the secret key after this window.
On the Dashboard, find the Access Tokens section and click Create a Token. Name it as you like and set the scopes to allow everything for both Public and Secret. Copy both keys.
Once rebooted, connect your comma 3/3X to a network with internet access and note the comma 3/3X\u2019s IP address.
"},{"location":"how-to/enabling-mapbox-navigation/#4-configure-keys","title":"4. Configure keys","text":"In a browser, navigate to C3_IP:8082 (e.g., 192.168.1.69:8082). You should see the comma logo and an input field. Paste your Public token (pk.xx), press enter, paste your Secret key (sk.xx), and press enter again. This page lets you search for destinations.
To set Home and Work addresses, search for a place, select Home/Work from the dropdown, and click Navigate. For other destinations, select Recent Places.
Warning
Your comma 3/3X requires an active internet connection to download map data, generate directions, and update ETA. Once data is downloaded, offline use is possible, but updates (like new directions after a missed turn) won't occur.
Info
At this time, it is not possible to search directly on the comma 3/3X.
Info
Mapbox does not support alphanumeric addresses (e.g., W123N1234 Main St). There is currently no known workaround for this.
Tip
If your comma 3/3X shows a \"Map Loading\" screen, a reboot via the UI should fix it. Connect the comma 3/3X to a network (i.e. your phone's hotspot) and use your phone browser to search for places.
In the Navigation panel on the comma 3/3X, select Home, Work, and Recent Places without needing a browser (assuming internet connection).
"},{"location":"how-to/turn-the-speed-blue/","title":"Turn the speed blue","text":"A getting started guide for openpilot development
In 30 minutes, we'll get an openpilot development environment setup on your computer and make some changes to openpilot's UI.
And if you have a comma 3/3X, we'll deploy the change to your device for testing.
"},{"location":"how-to/turn-the-speed-blue/#1-setup-your-development-environment","title":"1. Setup your development environment","text":"Run this to clone openpilot and install all the dependencies:
curl -fsSL openpilot.comma.ai | bash\n Navigate to openpilot folder & activate a Python virtual environment
cd openpilot\nsource .venv/bin/activate\n Then, compile openpilot:
scons -j8\n"},{"location":"how-to/turn-the-speed-blue/#2-run-replay","title":"2. Run replay","text":"We'll run the replay tool with the demo route to get data streaming for testing our UI changes.
# in terminal 1\ntools/replay/replay --demo\n\n# in terminal 2\nselfdrive/ui/ui\n The openpilot UI should launch and show a replay of the demo route.
If you have your own comma device, you can replace --demo with one of your own routes from comma connect.
Search for \u201cmph\u201d with git grep in the ui folder.
$ git grep \"mph\" selfdrive/ui/\npaint.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\");\n The line right above contains the actual speed. Unfortunately, COLOR_BLUE isn\u2019t defined, but a git grep of COLOR_WHITE shows it\u2019s nvgRGBA(255, 255, 255, 255). Personally, I like a lighter blue, so I went with #8080FF.
$ git diff\ndiff --git a/selfdrive/ui/paint.cc b/selfdrive/ui/paint.cc\nindex 821d95115..cc996eaa1 100644\n--- a/selfdrive/ui/paint.cc\n+++ b/selfdrive/ui/paint.cc\n@@ -175,8 +175,8 @@ static void ui_draw_vision_speed(UIState *s) {\n const float speed = std::max(0.0, (*s->sm)[\"carState\"].getCarState().getVEgo() * (s->scene.is_metric ? 3.6 : 2.2369363));\n const std::string speed_str = std::to_string((int)std::nearbyint(speed));\n nvgTextAlign(s->vg, NVG_ALIGN_CENTER | NVG_ALIGN_BASELINE);\n- ui_draw_text(s, s->fb_w/2, 210, speed_str.c_str(), 96 * 2.5, COLOR_WHITE, \"sans-bold\");\n- 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\");\n+ ui_draw_text(s, s->fb_w/2, 210, speed_str.c_str(), 96 * 2.5, nvgRGBA(128, 128, 255, 255), \"sans-bold\");\n+ 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\");\n }\n\n static void ui_draw_vision_event(UIState *s) {\n"},{"location":"how-to/turn-the-speed-blue/#4-rebuild-ui-and-admire-your-work","title":"4. Rebuild UI, and admire your work","text":"scons -j8 && selfdrive/ui/ui\n"},{"location":"how-to/turn-the-speed-blue/#5-push-your-fork-to-github","title":"5. Push your fork to GitHub","text":"Click fork on GitHub. Then, push with:
git remote rm origin\ngit remote add origin git@github.com:<your-github-username>/openpilot.git\ngit add .\ngit commit -m \"Make the speed blue.\"\ngit push --set-upstream origin master\n"},{"location":"how-to/turn-the-speed-blue/#6-run-your-fork-on-device-in-your-car","title":"6. Run your fork on device in your car!","text":"Uninstall openpilot from your device through the settings. Then, enter the URL for your very own installer:
installer.comma.ai/<your-github-username>/master\n"},{"location":"how-to/turn-the-speed-blue/#7-admire-your-work-irl","title":"7. Admire your work IRL","text":""},{"location":"how-to/hyundai/enabling-radar-tracks/","title":"Radar Tracks","text":"Unlock the potential of sunnypilot by enabling radar tracks manually on applicable Hyundai/Kia/Genesis cars. Thanks to @greghogan and @pd0wm, this feature is now accessible via SSH.
How Radar Points Can Be Used Along With Vision
Current openpilot policy is to identify with vision first and match it to a radar point. If vision sees nothing, you get a false negative and no lead car detection. (Source: Hubblesphere#7894 from comma.ai community Discord)
Caution
USE AT YOUR OWN RISK! Stock system safety features, such as AEB and FCW, may be affected by these changes.
"},{"location":"how-to/hyundai/enabling-radar-tracks/#1-prerequisites","title":"1. Prerequisites","text":"Ensure the car is in the OFF ignition position and connect your comma 3/3X to the car.
Connect to your comma 3/3X via SSH.
"},{"location":"how-to/hyundai/enabling-radar-tracks/#3-execute-commands","title":"3. Execute commands","text":"In the SSH terminal, execute the following commands:
pkill -f openpilot\npython /data/openpilot/selfdrive/debug/hyundai_enable_radar_points.py\n Follow the script instructions and ensure no faults appear."},{"location":"how-to/hyundai/enabling-radar-tracks/#4-reboot","title":"4. Reboot","text":"Reboot your comma 3/3X. Once rebotoed, start your car and ensure there is no fault caused by enabling the radar tracks.
"},{"location":"how-to/hyundai/enabling-radar-tracks/#5-test-drive","title":"5. Test drive","text":"Go for a quick drive, drive behind a lead car, and allow the drive to upload its raw logs in comma Connect.
"},{"location":"how-to/hyundai/enabling-radar-tracks/#6-verify-in-cabana","title":"6. Verify in Cabana","text":"Load the test route in Cabana, load hyundai_kia_mando_front_radar.dbc, search RADAR_TRACK_50x, and check LONG_DIST.
If the radar tracks data is relevant, you've successfully enabled radar tracks.
Tip
Having issues or need assistance? Reach out to the community in the hyundai-kia-genesis channel in sunnypilot Discord or commaai community Discord.
All official sunnypilot branches strictly adhere to comma.ai's safety policy. Any changes that go against this policy will result in your fork and your device being banned from both comma.ai and sunnypilot channels.
The following changes are VIOLATIONS of the safety policy and ARE NOT supported in any official sunnypilot branches:
Driver Monitoring
Panda Safety
CRUISE MAIN in OFF state.It is recommended to read the entire documentation before proceeding. This will ensure that you fully understand each added feature in sunnypilot. This also ensures that you are choosing the correct settings and branch for your car to have the best driving experience.
Warning
By installing this software, you accept all responsibility for anything that might occur while you use it. sunnypilot and all contributors to sunnypilot are not liable.
Use at your own risk.
"},{"location":"setup/read-before-installing/#installation","title":"Installation","text":"Please refer to the Recommended Branches to find your preferred/supported branch. This guide will assume you want to install the latest release-c3 branch.
You can install sunnypilot on your comma 3/3X using one of the following methods:
"},{"location":"setup/read-before-installing/#url-method-directly-on-device","title":"URL Method (Directly on Device)","text":"This method allows you to install sunnypilot directly from your device's screen using a provided URL. It's simple and user-friendly, requiring no additional tools or external devices.
"},{"location":"setup/read-before-installing/#ssh-method-command-line","title":"SSH Method (Command Line)","text":"This method is for advanced users who prefer to use SSH to clone the sunnypilot repository and install it manually via the command line. It offeres greater control over the installation process.
"},{"location":"setup/ssh-method/","title":"SSH Method","text":"If you are looking to install sunnypilot via SSH, run the following commands in an SSH terminal after connecting to your comma 3/3X:
Navigate to data directory
cd /data\n Clone sunnypilot
release-c3 branch is used in this step as an example.
git clone release-c3 --recurse-submodules https://github.com/sunnyhaibin/openpilot.git \n Git LFS
git lfs pull\n Reboot
sudo reboot\n The URL installation method can be done in two ways, depending on your current setup and version of sunnypilot on your device.
sunnypilot not installed, or sunnypilot < 0.8.17sunnypilot already installed, or sunnypilot \u2265 0.8.17Custom Software when given the option.Recommended Branches
Branch Installation URLrelease-c3 release-c3.sunnypilot.ai staging-c3 staging-c3.sunnypilot.ai dev-c3 dev-c3.sunnypilot.ai Example of Installation URL
release-c3.sunnypilot.ai1
Settings \u2192 Software.Download option, press CHECK. This will fetch the list of latest branches from the sunnypilot repository on GitHub.Target Branch option, press SELECT to open the Target Branch selector.Recommended Branches
Branch Installation URLrelease-c3 release-c3.sunnypilot.ai staging-c3 staging-c3.sunnypilot.ai dev-c3 dev-c3.sunnypilot.ai Example of Desired Branch
release-c3
Shortened URL for convenience. Full URL is smiskol.com/fork/sunnyhaibin/release-c3.\u00a0\u21a9
Visit https://bit.ly/sunnyreadme for more details * sunnypilot 0.8.14 release - based on openpilot 0.8.14 devel * \"0.8.14-prod-c3\" branch only supports comma three * If you have a comma two, EON, or other devices than a comma three, visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * Mono-branch support * Honda/Acura * Hyundai/Kia/Genesis * Toyota/Lexus * Volkswagen MQB * Modified Assistive Driving Safety (MADS) Mode * NEW\u2757: CRUISE (MAIN) now engages MADS for all supported car makes * NEW\u2757: Added toggle to disable disengaging Automatic Lane Centering (ALC) on the brake pedal * Dynamic Lane Profile (DLP) * NEW\u2757: Gap Adjust Cruise (GAC) * openpilot longitudinal cars can now adjust between the lead car's following distance gap via 3 modes: * Steering Wheel (SW) | User Interface (UI) | Steering Wheel + User Interface (SW+UI) * NEW\u2757: Custom Camera & Path Offsets * NEW\u2757: Torque Lateral Control from openpilot 0.8.15 master (as of 2022-06-15) * NEW\u2757: Torque Lateral Control Live Tune Menu * NEW\u2757: Speed Limit Sign from openpilot 0.8.15 master (as of 2022-06-22) * NEW\u2757: Mapbox Speed Limit data will now be utilized in Speed Limit Control (SLC) * Speed limit data will be utilized in the following availability: * Mapbox (active navigation) -> OpenStreetMap -> Car Interface (Toyota's TSR) * Custom Stock Longitudinal Control * NEW\u2757: Volkswagen MQB * Honda * Hyundai/Kia/Genesis * NEW\u2757: Mapbox navigation support for non-Prime users * Visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * Hyundai/Kia/Genesis * NEW\u2757: Enhanced SCC (ESCC) Support * Requires hardware modification. Visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * NEW\u2757: Smart MDPS (SMDPS) Support - Auto-detection * Requires hardware modification and custom firmware for the SMDPS. Visit sunnyhaibin's discord server for more details: https://discord.gg/wRW3meAgtx * Toyota/Lexus * NEW\u2757: Added toggle to enforce stock longitudinal control
"},{"location":"setup/changelogs/#sunnypilot-version-0812-4","title":"sunnypilot - Version 0.8.12-4","text":"devel