Difference between revisions of "Tesla Bosch Radar"

From Tinkla: Tinkering with Tesla
m
m (Installing the radar kit)
 
(57 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[File:Giraffe rev B Radar Diagram.png|thumb]] [[File:Giraffe rev A.png|thumb]]
+
If you need instructions for the Tesla Bosch Radar to use with EON or other (non Tesla) cars, the information can be found [[Tesla_Bosch_Radar_EON|here]].
[[File:The Giraffe rev A board. Use CAN1 for radar..png|thumb]]
+
[[File:Tesla Radar Wiring Harness for Tesla Unity and Tinkla OBD-C Adapter.png|thumb|Tesla Bosch Radar Wiring Harness for Tesla Unity and Tinkla OBD-C Adapter]]
 
The Bosch radar made for Tesla (Bosch MRRevo14, and with few different part numbers like 1038224-00-A/B or 1057551-00-B) have been used on Tesla Model S cars from October 2014 (AP1) until they have been replaced by the Continental radar with AP2.5). The main difference between 1038224-00-B and 1038224-00-A is that the A version does not have the heater element for winter weather (to melt snow and ice).  
 
The Bosch radar made for Tesla (Bosch MRRevo14, and with few different part numbers like 1038224-00-A/B or 1057551-00-B) have been used on Tesla Model S cars from October 2014 (AP1) until they have been replaced by the Continental radar with AP2.5). The main difference between 1038224-00-B and 1038224-00-A is that the A version does not have the heater element for winter weather (to melt snow and ice).  
  
Line 9: Line 9:
 
Many other car manufacturers use the same radar hardware, including Honda, Nissan, VW, Audi, etc. But Tesla (AFAIK) is the only one that reads and processes raw data from the radar instead of letting the radar make the decision about longitudinal control action needed (acceleration or deceleration).  
 
Many other car manufacturers use the same radar hardware, including Honda, Nissan, VW, Audi, etc. But Tesla (AFAIK) is the only one that reads and processes raw data from the radar instead of letting the radar make the decision about longitudinal control action needed (acceleration or deceleration).  
  
  This radar can ben used on any OP supported car. To insall the radar for a non-Tesla car please find a branch that has the code already done or modify your branch and add the code needed to make the radar talk to the Panda code for your car.
+
  This radar can ben used on any OP supported car. To insall the radar for a non-Tesla car please find a branch that has the code already done or modify your branch and add the code needed to make the radar talk to the Panda code for your car. More info available [[Tesla_Bosch_Radar_EON|here]].
  
=== Deconding the radar ===
+
=== Decoding the radar ===
  
 
With a little help from a group of enthusiasts, we were able to reverse engineer all the messages that AP sends to the radar in order to make it "talk". Then we identified the structure of the CAN messages that describe each of the 32 objects this radar can detect. Signals like longitudinal distance, lateral distance (vs radar), longitudinal relative speed, lateral relative speed, longitudinal acceleration, certainty of detection, etc are all now processed and sent to the radar daemon of OpenPilot, improving longitudinal control for the car.
 
With a little help from a group of enthusiasts, we were able to reverse engineer all the messages that AP sends to the radar in order to make it "talk". Then we identified the structure of the CAN messages that describe each of the 32 objects this radar can detect. Signals like longitudinal distance, lateral distance (vs radar), longitudinal relative speed, lateral relative speed, longitudinal acceleration, certainty of detection, etc are all now processed and sent to the radar daemon of OpenPilot, improving longitudinal control for the car.
Line 17: Line 17:
 
=== What you need ===
 
=== What you need ===
  
In order to get the radar working on your car, you need to buy a radar, a mounting bracket (few options here), a connector and then to create a harness and run the cable back to the [[Tesla Giraffe|Giraffe]]. As a first temporary setup for my research, I used an Audi bracket which I installed on my car's nose cone. Then I created the harness and connected it for both CAN and power to my Giraffe rev B using a car relay. Please also make sure you add the 120Ω resistor between CAN+ and CAN-.
+
In order to get the radar working on your car, you need to buy [https://shop.tinkla.us/Tinkla-Radar-for-use-with-OpenPilot-on-PreAP-Tesla-Model-S-p521235662 a radar], a [https://shop.tinkla.us/Tinkla-Radar-Bracket-for-Tesla-Model-S-Behind-Nosecone-p521235665 mounting bracket], and a [https://shop.tinkla.us/Tinkla-Radar-Harness-p514922906 radar harness] and run the cable back to the [https://tinkla.us/t/tinkla_obdc Tinkla OBD-C Adapter].  
  
  If you have a [[Tesla Giraffe|Giraffe]] rev A, you will have to solder the CAN wires from the radar directly to the Giraffe. We are using the middle CAN of the Panda (CAN2 when you think of them as CAN1-CH, CAN3-EPAS) and the pins where you should solder your connector are marked in this diagrams.  
+
  DIY people can also follow the old method using a 3D printed mount and a home-made harness. Keep in mind these mounts stay farther back, are influenced by the harness and 12V post that are close to them AND are not adjustable, aka can not be calibrated. But, if you like a challenge [https://docs.google.com/document/d/1rgxl7S7u-taUV4iiAu5chDT_CyEHzuKbsMeVpKdeSaw/mobilebasic David has a very nice set of instructions].
Also, you will have to add the same 120Ω resistor between CAN+ and CAN-.
 
  
As for power for the radar, if you don't feel like doing my relay setup from the [[Tesla Giraffe|Giraffe rev B]], I recommend tapping into Pin 6 of the [[EPAS harness]] (which is "ignition" power) and drive a relay the same way i drove it from the Giraffe, but in this case add a 5 Amp fuse on the power from battery to the relay.
+
=== Installing the radar kit ===
  
For other cars that want to use the Tesla Bosch Radar, please find an unused CAN in your Panda safety implementation and use that CAN to communicate with the radar. The radar has to be on its own specific CAN because any message outside of the ones that it is supposed to receive will make it stop working.
+
Start by taking out the nose cone and disassembling the frunk completely (needed to connect the ground of the harness only).
  
=== Panda code changes ===
+
The radar mount uses the mounting point for the 12V post (which is then relocated on the radar mount). Start by taking out the two screws that hold the 12V post. Make sure the rubber cap on the 12V post remains on at all times.
  
If you are on one of my Tesla OP branches (0.5.10 and above), the [[The Panda|Panda]] code already has all you need to get the Tesla Bosch Radar working.
+
[[File:12V post .jpg|frameless]]
  
If you want to implement the code for another car, you will have to modify the code as follow:
 
* find an existing CAN message on your car that is generated at 100Hz. We will use this message as a clock to trigger all the other messages needed by radar.
 
* take a look at my [https://github.com/BogGyver/openpilot/tree/test_teslaradar test_teslaradar] branch which uses the fake message code in [https://github.com/BogGyver/openpilot/blob/test_teslaradar/panda/board/safety/safety_teslaradar.h safety_teslaradar.h]
 
* edit '''safety_yourcar.h''' (specific for your car) and add the following:
 
:- add the include for safety_teslaradar.h at the top
 
#include "safety_teslaradar.h"
 
:- in the rx_hook function, call the radar rx hook
 
teslaradar_rx_hook(to_push);
 
:- in the rx_hook function, find the CAN message that provides the speed and parse it (this is a Honda example) saving the value in the ''actual_speed_kph'' variable
 
  //speed for radar
 
  if ((to_push->RIR>>21) == 0x309) {
 
    // first 2 bytes
 
    actual_speed_kph = (int)((((to_push->RDLR & 0xFF) << 8) + ((to_push->RDLR >>8) & 0xFF))*0.01);
 
  }
 
:- in the fwd_hook function, make sure you do not forward any of the radar messages to any other CAN bus (in this example, the radar is on CAN bus 2)
 
  if(bus_num == 2) {
 
    return -1;
 
  }
 
:- in the tx_hook function add interceptor for the message used to send info to the radar; in this example we use 0x560 as the CAN message ID; it this does not work for your car (already in use) you will have to change it to another ID that is not in use
 
  //check if this is a teslaradar vin message
 
  //capture message for radarVIN and settings
 
  if ((to_send->RIR >> 21) == 0x560) {
 
    int id = (to_send->RDLR & 0xFF);
 
    int radarVin_b1 = ((to_send->RDLR >> 8) & 0xFF);
 
    int radarVin_b2 = ((to_send->RDLR >> 16) & 0xFF);
 
    int radarVin_b3 = ((to_send->RDLR >> 24) & 0xFF);
 
    int radarVin_b4 = (to_send->RDHR & 0xFF);
 
    int radarVin_b5 = ((to_send->RDHR >> 8) & 0xFF);
 
    int radarVin_b6 = ((to_send->RDHR >> 16) & 0xFF);
 
    int radarVin_b7 = ((to_send->RDHR >> 24) & 0xFF);
 
    if (id == 0) {
 
      tesla_radar_should_send = (radarVin_b2 & 0x01);
 
      radarPosition =  ((radarVin_b2 >> 1) & 0x03);
 
      radarEpasType = ((radarVin_b2 >> 3) & 0x07);
 
      tesla_radar_trigger_message_id = (radarVin_b3 << 8) + radarVin_b4;
 
      tesla_radar_can = radarVin_b1;
 
      radar_VIN[0] = radarVin_b5;
 
      radar_VIN[1] = radarVin_b6;
 
      radar_VIN[2] = radarVin_b7;
 
      tesla_radar_vin_complete = tesla_radar_vin_complete | 1;
 
    }
 
    if (id == 1) {
 
      radar_VIN[3] = radarVin_b1;
 
      radar_VIN[4] = radarVin_b2;
 
      radar_VIN[5] = radarVin_b3;
 
      radar_VIN[6] = radarVin_b4;
 
      radar_VIN[7] = radarVin_b5;
 
      radar_VIN[8] = radarVin_b6;
 
      radar_VIN[9] = radarVin_b7;
 
      tesla_radar_vin_complete = tesla_radar_vin_complete | 2;
 
    }
 
    if (id == 2) {
 
      radar_VIN[10] = radarVin_b1;
 
      radar_VIN[11] = radarVin_b2;
 
      radar_VIN[12] = radarVin_b3;
 
      radar_VIN[13] = radarVin_b4;
 
      radar_VIN[14] = radarVin_b5;
 
      radar_VIN[15] = radarVin_b6;
 
      radar_VIN[16] = radarVin_b7;
 
      tesla_radar_vin_complete = tesla_radar_vin_complete | 4;
 
    }
 
    else {
 
      return 0;
 
    }
 
  }
 
  
=== OP Code Changes ===
 
  
If you are on one of my Tesla OP branches (0.5.10 and above), the OP code already has all you need to get the Tesla Bosch Radar working.  
+
Once you remove the two screws, save them somewhere in case you want later to remove the bracket and install the 12V post back. We will not need them for this install. Set the 12V post aside.
  
If you want to implement the code for another car, you will have to modify the code as follow:
+
[[File:12V post removed.jpg|frameless]]
* go to /data/openpilot/selfdrive/car/yourcar (of course, yourcar matches one of the supported OP cars like honda/toyota/etc.)
+
 
* edit '''yourcarcan.py''' and add the code needed to send the VIN and other info to the Panda
+
Attach the radar bracket to the front bumper using the provided 5mm black screws and 5mm split lock washers. Ensure the bracket is well secured. Remove the provided 6mm lock nuts and washers from the two posts on the bracket and mount the 12V post. Add the flat washers and tighten the 6mm lock nuts.
def create_radar_VIN_msg(id,radarVIN,radarCAN,radarTriggerMessage,useRadar,radarPosition,radarEpasType):
+
 
  msg_id = 0x560
+
Carefully install the radar. The connector for the harness will go up. once the top part is inserted and locked in position push in the bottom until it clicks.
  msg_len = 8
+
 
  msg = create_string_buffer(msg_len)
+
[[File:Bracket installed.jpg|frameless]]
  if id == 0:
+
 
    struct.pack_into('BBBBBBBB', msg, 0, id,radarCAN,useRadar + (radarPosition << 1) + (radarEpasType << 3), ((radarTriggerMessage >> 8) & 0xFF),(radarTriggerMessage & 0xFF),ord(radarVIN[0]),ord(radarVIN[1]),ord(radarVIN[2]))
+
Make sure the harness that runs along the bumper (which goes to the front lights and the park sensors) goes over the radar harness connector in the back. Otherwise the metal in the harness will affect the radar.
  if id == 1:
+
 
    struct.pack_into('BBBBBBBB', msg, 0, id,ord(radarVIN[3]),ord(radarVIN[4]),ord(radarVIN[5]),ord(radarVIN[6]),ord(radarVIN[7]),ord(radarVIN[8]),ord(radarVIN[9]))
+
[[File:Harness over the radar connector.jpg|frameless]]
  if id == 2:
+
 
    struct.pack_into('BBBBBBBB', msg, 0, id,ord(radarVIN[10]),ord(radarVIN[11]),ord(radarVIN[12]),ord(radarVIN[13]),ord(radarVIN[14]),ord(radarVIN[15]),ord(radarVIN[16]))
+
Now that we are done installing the radar it is time to run the Tinkla Radar Harness. First connect the harness to the radar. Make sure it is well secured. Will require a little force as it is a water-tight harness.
  return [msg_id, 0, msg.raw, 0]
+
 
* edit '''carcontroller.py''' and add the code needed to send the VIN and other specific radar info to Panda
+
Second step is to attach the ground. The ground post is behind the radar in the frunk area, as shown in the image below. Take the nut out, insert the ground connector there, then tighten well the nut back.
:- in the __init__ portion add
+
 
self.radarVin_idx = 0
+
[[File:Ground post location.jpg|frameless]]
:- in the update portion add the below code, updating as needed the CAN bus to be used for radar (in this example 2) and the 100Hz message we will use to trigger messages (in this example 0x17c)
+
 
#if using radar, we need to send the VIN
+
Next we will connect the 12v to the fuse box on the right side of the frunk as you look at the car from the front. Remove fuse F75 from the fuse box. Plug this fuse into the remaining slot in the fuse tap that came with the harness and plug the fuse tap in the location from which you removed the fuse.
if CS.useTeslaRadar and (frame % 100 == 0):
+
 
  can_sends.append(hondacan.create_radar_VIN_msg(self.radarVin_idx, CS.radarVIN, 2, 0x17c, CS.useTeslaRadar, CS.radarPosition, CS.radarEpasType))
+
[[File:Power for the tinkla radar.jpg|frameless]] [[File:Fuse box F75.png|frameless]]
  self.radarVin_idx += 1
+
 
  self.radarVin_idx = self.radarVin_idx  % 3
+
Now for the can wires, start from the frunk area and go under the fender to the door, then through the door seal inside the car. There was already a hole in the door seal there for me. Your miles may vary.
* copy from my repo the [https://github.com/BogGyver/openpilot/blob/test_teslaradar/selfdrive/car/tesla/readconfig_min.sh readconfig_min.py] and rename it '''readconfig.py'''; once you are done with all the code changes and reboot the EON, this will create a minimal [[OpenPilot Configuration File]] at /data/bb_openpilot.cfg with the values needed for radar
+
 
* edit '''carstate.py'''
+
[[File:Radar harness from frunk.jpg|frameless][[File:Radar harness at door.jpg|frameless]]  
:- add the import for the readconfig.py
+
[[File:Radar harness in car.jpg|frameless]]
from selfdrive.car.honda.readconfig import read_config_file
+
 
:- add definition in __init__ for the variables needed by radar
+
Now just connect the JST2.5 connector at the end of the radar harness inside the OBD-C adapter in the radar port
    ### START OF MAIN CONFIG OPTIONS ###
+
[[File:Tinkla OBD-C Adapter Schematics.jpg|frameless]].
    ### Do NOT modify here, modify in /data/honda_openpilot.cfg and reboot
+
 
    self.useTeslaRadar = False
+
With the harness ran from front to back, now it's time to tidy it up a little and secure it in few places with some zip ties. Then put the frunk back together.  
    self.radarVIN = "                "
+
 
    self.radarOffset = 0.
+
In openpilot, setup the radar configuration (see below), follow the instructions to perform the VIN Learn, and then follow the process for the radar calibration. Once done you can put the nosecone back and you're done.
    self.radarPosition = 0
+
 
    self.radarEpasType = 0
+
When putting the nosecone back, please make sure the harness that goes to the park sensor does not get in front of the radar as you install the nosecone.
    #read config file
+
 
    read_config_file(self)
+
=== Modifying the configuration settings for radar ===
    ### END OF MAIN CONFIG OPTIONS ###
+
 
* copy from my repo the [https://github.com/BogGyver/openpilot/blob/test_teslaradar/selfdrive/car/tesla/radar_interface.py radar_interface.py] file and modify if needed
+
It is important now to take the time to configure the [[Tesla_Unity_Configuration|setting in Tesla Unity]] in order to activate the radar. Before moving to the next step, please turn ON the toggle for <b>Use Tesla Radar </b> and appropriately configure the <b>Radar behind nosecone</b> and <b>Radar offset</b>. When using the Tinkla Radar Bracket which mounts the radar upside down, also enable the toggle for <b>Use Radar Upside Down</b>
* copy from my repo the [https://github.com/BogGyver/openpilot/blob/test_teslaradar/selfdrive/controls/radard.py radard.py] to /data/openpilot/selfdrive/controls and modify as needed
+
 
* copy from my repo the [https://github.com/BogGyver/openpilot/blob/test_teslaradar/selfdrive/controls/lib/radar_helpers.py radar_helpers.py] to /data/openpilot/selfdrive/controls/lib and modify as needed
+
=== Programming your radar - VIN Learning ===
 +
 
 +
Chances are you bought your Tesla Bosch Radar on ebay and was previously installed and programmed in a car (so it will only respond if we send the right VIN, epas type and position). In order to make the radar work on your car you will have to go through the <b>Radar VIN Learn</b> process that can be started using the button with the same name at the bottom of the <b>Tesla preAP</b> settings page.
 +
 
 +
#Ensure your Radar is installed in your vehicle and connected to the [https://tinkla.us/t/tinkla_obdc Tinkla OBD-C Adapter] or to your specific harness.
 +
#Ensure that all the [[Tesla_Unity_Configuration#Tesla_preAP|settings are configured]] correctly for your radar, especially enabling the radar and specifying if it is behind the nose cone or not.
 +
#Using the <b>Radar VIN Learn</b> button under the <b>Tesla preAP</b> tab of [[Tesla_Unity_Configuration#Tesla_preAP|settings]] start the programming process
 +
#Before hitting the <b>VIN Lrn</b> button, ensure your car is on (in P - Park) and continue to keep your foot on the brake throughout the process.
 +
#Hit the <b>VIN Lrn</b> button and the screen will show the progress. Your car might emit warnings and sounds during this process, which is normal.
 +
#Once process is complete, allow the car to go in "CAR OFF" mode and reboot your Comma devkit.
 +
#You are now ready to use your Tesla Bosch Radar.
 +
 
 +
=== Calibrating your radar ===
 +
[[File:Determine the center of car.png|thumb|Determine the center of car]]
 +
Most likely the radar will have to be calibrated in order to ensure the correct data being fed into OpenPilot. In order to calibrate your radar you will need:
 +
* the [https://github.com/BogGyver/openpilot/blob/test_teslaradar/selfdrive/car/tesla/radar_tools/calibrateRadar.py calibrateRadar.py] script which for those running on one of my Tesla branches is located in '''/data/openpilot/selfdrive/car/tesla/radar_tools/'''
 +
* a 4ft (120 cm) metal pole that can stay vertically by itself (I personally use a microphone stand)
 +
* a [https://www.amazon.com/dp/B07DXYSC6F?ref=ppx_pop_mob_ap_share 3.5mm hex head nut driver] with a long neck that can fit through the front grille holes
 +
* tape measure
 +
* chalk
 +
* computer or phone to SSH into EON and view data
 +
 
 +
First, we need to create a straight line that is perfectly centered on the car (for this you will need another person to hold one end of the tape). Follow these steps:
 +
* start from the left front wheel well, measure 8 ft (2.5m) out towards the center of the car and draw an arch of the circle using the chalk.  
 +
* repeat the process from the right front wheel
 +
* the place where your two arches intersect will be point A. (see blue lines in diagram)
 +
* repeat the process above but measure out 16.5 ft (5 m)
 +
* the place where your two new arches intersect will be point B (see red lines in diagram)
 +
* connect points A and B with a line; this line is now along the center of the car (see green line in diagram)
 +
 
 +
Now that we have the line that marks the zero dY line, let's start the calibration script:
 +
* start OP (OP might stop when you leave the car; what i did was to leave open the driver window, put a heavy backpack on the driver seat, connect the driver seatbelt and turn the car on; this way it ensured that OP remained running)  
 +
* SSH into EON and go to the folder where the calibrateRadar.py is
 +
**<source inline>cd /data/openpilot/selfdrive/car/tesla/radar_tools/</source>
 +
* set the python environment
 +
** <source inline>export PYTHONPATH="/data/openpilot/"</source>
 +
* run the calibration script
 +
** <source inline>python calibrateRadar.py</source>
 +
The script will start showing data for objects between 8 ft (2.5 m) and 15 ft (4.5 m) in front of the car.
 +
 
 +
Now the calibration process starts:
 +
* place the metal pole (again, i used a microphne stand) in the middle of the line that connects A and B
 +
* look at the terminal window running the calibration script and check x and y values for distance:
 +
** you should see data from the script showing '''dRel''' and '''dY''' as some of the points; keep in mind the values are always in meters
 +
** measure the distance between the radar and the pole: it should match the '''dRel''' distance
 +
** '''dY''' should be 0.0
 +
* if you can not see the pole at all or '''dRel''' is greater than the real measured distance, you will need to adjust the radar vertically until they match.
 +
* if '''dY''' is not zero, adjust the radar position Left or Right until '''dY''' is 0.0
 +
* once '''dY''' is 0.0 move the pole along the line connecting A and B repeating the above process
 +
* you are done when no matter where you place the pole between A and B, '''dY''' is always 0.0
 +
 
 +
=== Troubleshooting the Tesla Bosch Radar ===
 +
 
 +
The radar sends data for the first 5 seconds no matter what we send to it. But if we are sending the wrong info (VIN, position or epas) it will stop sending changes to the data after 5 seconds. At this point we have to see what exactly is happening with the radar by looking at the alerts it generates.
 +
 
 +
In order to do so you can run the script created to get the errors from the radar.
 +
 
 +
* start OP
 +
* SSH into EON and go to the folder where the getRadarErrorCodes.py is
 +
**<source inline>cd /data/openpilot/selfdrive/car/tesla/radar_tools/</source>
 +
* set the python environment
 +
** <source inline>export PYTHONPATH="/data/openpilot/"</source>
 +
* run the calibration script
 +
** <source inline>python getRadarErrorCodes.py</source>
 +
The script will start showing errors from the radar (if present) or say <b>No Errors</b> if everything works as expected.

Latest revision as of 21:54, 4 January 2023

If you need instructions for the Tesla Bosch Radar to use with EON or other (non Tesla) cars, the information can be found here.
Tesla Bosch Radar Wiring Harness for Tesla Unity and Tinkla OBD-C Adapter

The Bosch radar made for Tesla (Bosch MRRevo14, and with few different part numbers like 1038224-00-A/B or 1057551-00-B) have been used on Tesla Model S cars from October 2014 (AP1) until they have been replaced by the Continental radar with AP2.5). The main difference between 1038224-00-B and 1038224-00-A is that the A version does not have the heater element for winter weather (to melt snow and ice).

The radar has a range of about 160m and for the short beam a cone of 45°.

Bosch radars

Many other car manufacturers use the same radar hardware, including Honda, Nissan, VW, Audi, etc. But Tesla (AFAIK) is the only one that reads and processes raw data from the radar instead of letting the radar make the decision about longitudinal control action needed (acceleration or deceleration).

This radar can ben used on any OP supported car. To insall the radar for a non-Tesla car please find a branch that has the code already done or modify your branch and add the code needed to make the radar talk to the Panda code for your car. More info available here.

Decoding the radar

With a little help from a group of enthusiasts, we were able to reverse engineer all the messages that AP sends to the radar in order to make it "talk". Then we identified the structure of the CAN messages that describe each of the 32 objects this radar can detect. Signals like longitudinal distance, lateral distance (vs radar), longitudinal relative speed, lateral relative speed, longitudinal acceleration, certainty of detection, etc are all now processed and sent to the radar daemon of OpenPilot, improving longitudinal control for the car.

What you need

In order to get the radar working on your car, you need to buy a radar, a mounting bracket, and a radar harness and run the cable back to the Tinkla OBD-C Adapter.

DIY people can also follow the old method using a 3D printed mount and a home-made harness. Keep in mind these mounts stay farther back, are influenced by the harness and 12V post that are close to them AND are not adjustable, aka can not be calibrated. But, if you like a challenge David has a very nice set of instructions.

Installing the radar kit

Start by taking out the nose cone and disassembling the frunk completely (needed to connect the ground of the harness only).

The radar mount uses the mounting point for the 12V post (which is then relocated on the radar mount). Start by taking out the two screws that hold the 12V post. Make sure the rubber cap on the 12V post remains on at all times.

12V post .jpg


Once you remove the two screws, save them somewhere in case you want later to remove the bracket and install the 12V post back. We will not need them for this install. Set the 12V post aside.

12V post removed.jpg

Attach the radar bracket to the front bumper using the provided 5mm black screws and 5mm split lock washers. Ensure the bracket is well secured. Remove the provided 6mm lock nuts and washers from the two posts on the bracket and mount the 12V post. Add the flat washers and tighten the 6mm lock nuts.

Carefully install the radar. The connector for the harness will go up. once the top part is inserted and locked in position push in the bottom until it clicks.

Bracket installed.jpg

Make sure the harness that runs along the bumper (which goes to the front lights and the park sensors) goes over the radar harness connector in the back. Otherwise the metal in the harness will affect the radar.

Harness over the radar connector.jpg

Now that we are done installing the radar it is time to run the Tinkla Radar Harness. First connect the harness to the radar. Make sure it is well secured. Will require a little force as it is a water-tight harness.

Second step is to attach the ground. The ground post is behind the radar in the frunk area, as shown in the image below. Take the nut out, insert the ground connector there, then tighten well the nut back.

Ground post location.jpg

Next we will connect the 12v to the fuse box on the right side of the frunk as you look at the car from the front. Remove fuse F75 from the fuse box. Plug this fuse into the remaining slot in the fuse tap that came with the harness and plug the fuse tap in the location from which you removed the fuse.

Power for the tinkla radar.jpg Fuse box F75.png

Now for the can wires, start from the frunk area and go under the fender to the door, then through the door seal inside the car. There was already a hole in the door seal there for me. Your miles may vary.

Radar harness from frunk.jpg Radar harness at door.jpg Radar harness in car.jpg

Now just connect the JST2.5 connector at the end of the radar harness inside the OBD-C adapter in the radar port Tinkla OBD-C Adapter Schematics.jpg.

With the harness ran from front to back, now it's time to tidy it up a little and secure it in few places with some zip ties. Then put the frunk back together.

In openpilot, setup the radar configuration (see below), follow the instructions to perform the VIN Learn, and then follow the process for the radar calibration. Once done you can put the nosecone back and you're done.

When putting the nosecone back, please make sure the harness that goes to the park sensor does not get in front of the radar as you install the nosecone.

Modifying the configuration settings for radar

It is important now to take the time to configure the setting in Tesla Unity in order to activate the radar. Before moving to the next step, please turn ON the toggle for Use Tesla Radar and appropriately configure the Radar behind nosecone and Radar offset. When using the Tinkla Radar Bracket which mounts the radar upside down, also enable the toggle for Use Radar Upside Down

Programming your radar - VIN Learning

Chances are you bought your Tesla Bosch Radar on ebay and was previously installed and programmed in a car (so it will only respond if we send the right VIN, epas type and position). In order to make the radar work on your car you will have to go through the Radar VIN Learn process that can be started using the button with the same name at the bottom of the Tesla preAP settings page.

  1. Ensure your Radar is installed in your vehicle and connected to the Tinkla OBD-C Adapter or to your specific harness.
  2. Ensure that all the settings are configured correctly for your radar, especially enabling the radar and specifying if it is behind the nose cone or not.
  3. Using the Radar VIN Learn button under the Tesla preAP tab of settings start the programming process
  4. Before hitting the VIN Lrn button, ensure your car is on (in P - Park) and continue to keep your foot on the brake throughout the process.
  5. Hit the VIN Lrn button and the screen will show the progress. Your car might emit warnings and sounds during this process, which is normal.
  6. Once process is complete, allow the car to go in "CAR OFF" mode and reboot your Comma devkit.
  7. You are now ready to use your Tesla Bosch Radar.

Calibrating your radar

Determine the center of car

Most likely the radar will have to be calibrated in order to ensure the correct data being fed into OpenPilot. In order to calibrate your radar you will need:

  • the calibrateRadar.py script which for those running on one of my Tesla branches is located in /data/openpilot/selfdrive/car/tesla/radar_tools/
  • a 4ft (120 cm) metal pole that can stay vertically by itself (I personally use a microphone stand)
  • a 3.5mm hex head nut driver with a long neck that can fit through the front grille holes
  • tape measure
  • chalk
  • computer or phone to SSH into EON and view data

First, we need to create a straight line that is perfectly centered on the car (for this you will need another person to hold one end of the tape). Follow these steps:

  • start from the left front wheel well, measure 8 ft (2.5m) out towards the center of the car and draw an arch of the circle using the chalk.
  • repeat the process from the right front wheel
  • the place where your two arches intersect will be point A. (see blue lines in diagram)
  • repeat the process above but measure out 16.5 ft (5 m)
  • the place where your two new arches intersect will be point B (see red lines in diagram)
  • connect points A and B with a line; this line is now along the center of the car (see green line in diagram)

Now that we have the line that marks the zero dY line, let's start the calibration script:

  • start OP (OP might stop when you leave the car; what i did was to leave open the driver window, put a heavy backpack on the driver seat, connect the driver seatbelt and turn the car on; this way it ensured that OP remained running)
  • SSH into EON and go to the folder where the calibrateRadar.py is
    • cd /data/openpilot/selfdrive/car/tesla/radar_tools/
  • set the python environment
    • export PYTHONPATH="/data/openpilot/"
  • run the calibration script
    • python calibrateRadar.py

The script will start showing data for objects between 8 ft (2.5 m) and 15 ft (4.5 m) in front of the car.

Now the calibration process starts:

  • place the metal pole (again, i used a microphne stand) in the middle of the line that connects A and B
  • look at the terminal window running the calibration script and check x and y values for distance:
    • you should see data from the script showing dRel and dY as some of the points; keep in mind the values are always in meters
    • measure the distance between the radar and the pole: it should match the dRel distance
    • dY should be 0.0
  • if you can not see the pole at all or dRel is greater than the real measured distance, you will need to adjust the radar vertically until they match.
  • if dY is not zero, adjust the radar position Left or Right until dY is 0.0
  • once dY is 0.0 move the pole along the line connecting A and B repeating the above process
  • you are done when no matter where you place the pole between A and B, dY is always 0.0

Troubleshooting the Tesla Bosch Radar

The radar sends data for the first 5 seconds no matter what we send to it. But if we are sending the wrong info (VIN, position or epas) it will stop sending changes to the data after 5 seconds. At this point we have to see what exactly is happening with the radar by looking at the alerts it generates.

In order to do so you can run the script created to get the errors from the radar.

  • start OP
  • SSH into EON and go to the folder where the getRadarErrorCodes.py is
    • cd /data/openpilot/selfdrive/car/tesla/radar_tools/
  • set the python environment
    • export PYTHONPATH="/data/openpilot/"
  • run the calibration script
    • python getRadarErrorCodes.py

The script will start showing errors from the radar (if present) or say No Errors if everything works as expected.