This RC Car Provides Force Feedback with Dual ESP32s and a Load Cell
In order to get a more accurate driving experience, one maker combined low-latency sensing and real-time feedback into an RC system.
Why is force feedback useful?
When operating a typical vehicle, drivers are able to use more than just their eyes, as accelerations, pedal stiffness, and small forces being exerted on the steering wheel all contribute greatly to the experience. But for remote controlled (RC) cars, the wireless controller is unable to transmit the forces the car is experiencing back to the driver, which is what led YouTuber Indeterminate Design to add this valuable extra sense to his RC setup.
The controller
Because this project involves both a car and its transmitter, there were two distinct challenges that had to be overcome. The first was how to build a controller that could transmit the forces felt by the car into the operator's hand, and the second was how the car should measure and send that data quickly enough. In this case, force feedback is provided by a haptic control knob from FOC since it contains a motor, encoders, and a simple interface for integration with the Arduino ecosystem. The tuning step for the control knob involved smoothing the incoming force data and carefully adjusting the force it applies to prevent an out-of-control feedback loop.
Faster processing
In terms of sensors, the RC car is packed with them. One of its two ESP32s is connected to a GPS module, thermistors, a 9DOF IMU, dual lidar modules for sensing ride height, and an encoder on each wheel. Meanwhile, the other ESP32 processes commands from its connected RC receiver, modulates each wheel via an electronic speed controller (ESC), adjusts the steering servo, and writes data to an SD card. This large volume of data is then combined into discrete force feedback (FFB) values that are transmitted to the controller over the lightweight ESP-NOW protocol to reduce latency. One other important aspect in the fight against lag is the usage of prioritized FreeRTOS tasks that can be executed the moment new data arrives, further reducing the risk of the two sides becoming desynchronized.
Improving feedback quality
After much research, implementation, and testing of the force feedback system, Indeterminate Design discovered his approximation of the forces being experienced by the car were still too inaccurate, thus leading to incorrect behavior from the controller. To fix it, a load cell was placed between the steering rod and servo that could sense forces while being in both tension and compression. Its data is read 80 times per second and sent to the controller where it could be interpreted and utilized with far less tuning than initially expected.
To see more about how Indeterminate Design was able to greatly improve the car's feel when driving, you can watch his build log video here on YouTube.