BeagleBoard/GSoC/2021 Proposal/DhruvaGole

=Proposal for Librobotcontrol Lib support for Beagleboard AI =

About Student: Dhruva Gole Mentors: Jason Kridner Code: gsoc-application Wiki: http://elinux.org/BeagleBoard/GSoC/ProposalTemplate GSoC: GSoC entry

=Status= This project is currently just a proposal.

=Proposal= Completed all the requirements listed on the ideas page. The code for the cross-compilation task can be found here submitted through the pull request #149.

About you
IRC: dhruvag2000 Github: https://github.com/DhruvaG2000 School: Veermata Jijabai Technological Inst. Country: India Primary language : English, Marathi, Hindi Typical work hours: 10AM - 7PM Indian Standard Time Previous GSoC participation: I find embedded and IOT pretty interesting, given I have experience with ESP32, SIMCOM, ESP8266, Arduino UNO I think I will be able to excel in this project. This is the first time i am participating in GSoC.

About your project
Project name: librobotcontrol support for BeagleBone AI

Description
BeagleBone gets used a lot in automation tasks, be they in industrial, building, home or otherwise. Software that helps enable individual hobbyists, but can bridge into professional automation tasks, is strongly desired. The Robot Control Library package contains the C library and example/testing programs for the Robot Control project. This project began as a hardware interface for the Robotics Cape and later the BeagleBone Blue and was originally called Robotics_Cape_Installer. It grew to include an extensive math library for discrete time feedback control, as well as a plethora of POSIX-compliant functions for timing, threads, program flow, and lots more, all aimed at developing robot control software on embedded computers.
 * Introduction
 * This project will enable the control of the Beaglebone's PRUs using remoteproc and rpmsg driver rather than using uio drivers. The PRU is a dual core micro-controller system present on the AM335x SoC which powers the BeagleBone. It is meant to be used for high speed jitter free IO control. Being independent from the linux scheduler and having direct access to the IO pins of the BeagleBone Black, the PRU is ideal for offloading IO intensive tasks.

The library and example programs are primarily written in C, and has been well tested on the BeagleBone Blue.


 * Why to port it to the BeagleBone AI?
 * Built on the proven BeagleBoard.org® open source Linux approach, BeagleBone® AI fills the gap between small SBCs and more powerful industrial computers. Based on the Texas Instruments AM5729, developers have access to the powerful SoC with the ease of BeagleBone® Black header and mechanical compatibility. BeagleBone® AI makes it easy to explore how artificial intelligence (AI) can be used in everyday life via the TI C66x digital-signal-processor (DSP) cores and embedded-vision-engine (EVE) cores supported through an optimized TIDL machine learning OpenCL API with pre-installed tools. Focused on everyday automation in industrial, commercial and home applications.
 * It uses the Dual Arm® Cortex®-A15 microprocessor subsystem and further specs can be found on the official website

What I like most about librobotcontrol, is that it allows new users to get a very intuitive hardware interface for the board it is being used on. Currently it only supports Robotics Cape and the BeagleBone Blue and Black. But with the evolution of AI on the edge, porting this library to be used onboard the BeagleBone® AI will prove to be very useful to a lot of hardware enthusiasts, AI/ML developers and hobbyists to deploy edge computing solutions along with easy to program hardware.


 * Features to be implemented:
 * 1) Port this package to support the BeagleBone® AI.
 * 2) Port all the existing examples to run on BeagleBone® AI.
 * 3) Fill out the TODOs on the official System Reference Manual of the beaglebone AI
 * 4) Add the necessary docs on librobotcontrol website.

Details of implementation

 * Implement this library to support the BeagleBone® AI with robot cape.

The Robotics Cape brings the power of the BeagleBone Black to your robotics project with almost no setup time. Built by engineers for engineers, the Robotics Cape is loaded with innovative features and a library designed to effortlessly take your robotics concepts from design to reality. (source) It has the following Technical Specifications :-
 * The Robotics Cape
 * 1) 2 Cell Lipo Charging, Balancing, and Protection
 * 2) Battery Charge Inidcator LEDs
 * 3) 4 H-Bridge DC Motors Controllers 1.2A each
 * 4) 8-Channel Servo/ESC Output Enabled by PRU
 * 5) 6V 4A Regulated Power Supply to Protect Servos
 * 6) 9-Axis IMU: Invensense MPU-9250, and many more on-board peripherals that any robotic enthusiast or developer can want!
 * The above cape needs the Robot Control Library (ref documentation) too function. Currently, this is only available for the BeagleBone Blue and Black.
 * However, the BeagleBone® Blue lacks TI C66x digital-signal-processor (DSP) cores and embedded-vision-engine (EVE) cores which the AI board has. This enables machine learning tools to be integrted with a device capable of programmable hardware IOs. However it still lacks a proper hardware interface which is where the need to provide librobotcontrol support comes in.
 * The beaglebone AI has many programmable PRU General-Purpose Output and Input pins as give on https://github.com/beagleboard/beaglebone-ai/wiki/System-Reference-Manual#detailed-hardware-design device docs page]


 * Implement a library to simplify tasks like writing to a pin, reading from a pin, delay, accessing memory.


 * Port all the existing examples to work on beagle AI.


 * Reimplement stock examples in librobotcontrol repository
 * bare_minimum
 * blink
 * read and write operation of UART buses
 * test_adc
 * I intend to port as many examples as the board can support using it's hardware to the examples directory.

Experience and approach
I have used C++, C and Python programming languages over the past 3 years in a variety of projects involving embedded systems using the ESP32, Arduino UNO, ESP8266 and am also well-versed with freeRTOS. I have an aptitude for writing good reports and blogs, and have written a small blog on how to use a debugger. I recently did a project using ESP32, in which I used the DHT11 sensor to display humidity and temperature on a local HTML server. Other than that I have developed firmware for a 3 DOF arm based on an ESP32 custom board. I also interned at an embedded device startup where I I actively contribute to open source and do a lot of mini projects throughout the year, you can find my several more interesting projects at my github page
 * 1) Interfaced ADS1115 ADC with the ESP32 and used it to read battery voltage.
 * 2) Used UART for ESP32 and SIMCOM SIM 7600IE communication to gain LTE support.
 * 3) Published local sensor data to the cloud via LTE.

Contingency
I believe that if I get stuck on my project and my mentor isn’t around, I will use the resources that are available to me. this includes looking on online forums for support, trying approaches that have worked from previous experience and also getting in touch with professionals via IRC/other media for support.

Benefit

 * Complete implementation of librobotcontrol on BeagleBone AI is necessary.
 * -Jason Kridner