Skip to content

To future devs

Anemnox edited this page Jul 13, 2022 · 2 revisions

A Note from one of the Previous Leads

Heyo! An informal letter to everyone that will be working on this in the future. We shall see if this system is used or if it will be scrapped but either way, I'll be putting down some notes, thoughts, and advice for those developing future systems. For those that are experienced in programming, many of these concepts may be a review but since many of us are students with no experience (including me) I will be outlining as much as I can. Though, as I've indicated I don't know any of the answers and some of my observations may be questionable so take everything here with a grain of salt.

I hope that this information will be helpful!


Where do I start with all of this?

I think the best place to start is with: what is our overall system, what goes into this system, how do I interpret the system, and what is our goal. Starting from the most basic ideas to advanced ideas towards the bottom.

Our System

In a general sense, our system is composed of 3 main parts: the interface, a central robot management system, and our onboard drivers. An ideal solution to this model would be to make sure that there is a distinct API between each part which allows us to swap drivers, UIs, and control systems slowly and update them when needed. Although more complicated than a single system, the interface system is a decision made thinking of longevity and code reusability.

A quick explanation of information flow:

  • {User} --controller--> {UI} --socketio--> {python server} --robot_module--> {ROSCore} --rostopic--> {robot drivers} --> {hardware}
  • {hardware} --> {robot drivers} --rostopic--> {ROSCore} --robot_module--> {python server} --socketio--> {UI} --> {User}

Items within {} can be seen as a node where information is observed/changed/used and the item within the --> indicate the the method of the information flow and direction of the information flow.

In reality, this actual flow of information is a bit more complex but the general idea will follow this pattern. All of the "nodes" should be listed here for manual control. Autonomous control will just replace the "{User} --controller--> {UI} --socketio--> {python server}" with "{autonomous script}". I will be going through each of these nodes eventually but at a base level this is what exists.

Interface

"{User} --controller--> {UI} --socketio--> {python server}" The interface was developed using Reactjs, socketio, and a python proxy server to communicate user commands to the central management system.

Robot System

Drivers