A sample model that implements light following and bump detection algorithms on a 4-wheel autonomous vehicle with an Arduino Mega 2560 onboard. The light following algorithm is based on two light sensors mounted in the front of the vehicle that when a difference is sensed, the vehicle turns towards the brighter side. Also implemented is that the vehicle drives faster when the light is dim (proxy for ‘far’), and slower when it is bright (proxy for ‘close’). Bump logic is done with left/right bump sensors, and the vehicle backs up and then turns away from the object it struck.
The model is created in a way to allow for simulation and code generation. Numerous test scenerios are implemented with a Signal Builder block to test aspects of algorithms prior to trying on the final platform.
External mode can be toggled to allow for monitoring of signals and tuning of parameters, and the model currently implements the back_time parameter as tunable when an object is struck.
The ZIP file includes the listing of hardware used, wiring schematics. It is encouraged to continue to expand on more complicated and robust algorithms, new sensors/actuators, etc.
For more information, please refer to:
- Simulink Targets: http://www.mathworks.com/discovery/simulink-embedded-hardware.html
- Arduino Support from Simulink: http://www.mathworks.com/hardware-support/arduino-simulink.html
- Support Package for Arduino Mega: http://www.mathworks.com/matlabcentral/fileexchange/35641
Facecast was on June 7, recorded video can be located here - http://www.facebook.com/MATLAB/app_142371818162 (Arduino Support from Simulink video)
Dan Lluch (2020). Autonomous 4-Wheel Robot Light Tracker - Arduino Mega 2560 (https://www.mathworks.com/matlabcentral/fileexchange/36938-autonomous-4-wheel-robot-light-tracker-arduino-mega-2560), MATLAB Central File Exchange. Retrieved .
@ IceCube - yes this is possible. I think the first step would be to offset sensors vertically, such that you can sense brightness differences in that axis as well. you can then move to design a controller that takes this information appropriately and generates commands (and adjust the plant itself to be able to actuate something in that axis as appropriate). I will leave the community to continue to explore this. Maybe consider posting to MATLAB Answers to see if a group would like to explore this topic further?
This is one axis tracker, can you make a two axis tracker with closed-loop controller?
adding Support Packages for Arduino as acknowledgements on this entry.
added link to recorded facecast in description
- updated picture for file view of model, and included Simulink Web View files
update ZIP file
Inspired by: Simulink Support Package for Arduino Hardware