Obstacle detection. The yellow circle marking the pillar's base is entirely calculated from the artificial vision algorithm.
PSAR is a small robot built to do many tasks. It is mounted on a 4-wheel base equipped with a small camera and a gripper. There is also a top-view camera (called the World camera) to help with pathfinding. The robot is said to be partially supervised because its decisions are greatly help by 2 external factors : a top-view camera and aruco markers.
The main goal is to take 3 pucks and place them on the corners or a square. The pucks to take, the deposit order and the corners on which to deposit the pucks are all determined by various detection tasks :
- Calculating a resistor value by analyzing the circuit's electric current and voltage
- Determining the orientation of a specific arrow from a set of 9
- Determining the letter at a specific position from a set of 9
- Determining the position of each stations on the table
Throughout the course, some obstacles (pillars) will be placed on the table. The system will have to detect them and find a path to dodge them. The overall goal is to complete as many rounds as possible in only 10 minutes. There is also a set of information to be displayed in real-time while the robot performs its tasks, like the internal state of the backend and robot, the consumption levels, the planned and real paths, etc.
Unfortunately, due to COVID-19 measures of prevention, the laboratory of experimentation was closed mid-semester, which prevented us to collect data and perform tests that were necessary for the completion of the project.
You can view the full report here.
The complete project is seperated into 4 sub-projects :
- backend (running on the main computer)
- frontend (running on any device)
- robot (running on the RaspberryPi)
- embedded (running on the micro controller)
For more general info about the project, the standards and the tools, PLEASE visit the wiki!
If your console is bash based, you can simply run the setup script.
./scripts/setup- Architecture (simplified clean architecture) in all subprojects
- Sequence system with autonaumous tasks (with failure handling and retry system)
- Obstacle and robot detection
- Pathfinding algorithm and optimization
- Socket communication
- Enforcement of SOLIDT principles
- Automatic dependency injection
- Optimizations in CI pipeline
- Frontend Vue setup and configuration (with optimized Vuetify plugin integration)
- Small part of UI design (sequence viewer and top bar)
- Assisted DODRO35 as a co-chief of the team
- Main reviewer (along with DODRO35)
- There is a ton of missing tests. With the human ressources and the time available, we decided to put more effort into maximizing the number of features requested and relied on manual testing while developing.
- The frontend only has a small portion actually connected to the backend and the design could be further simplified and better decomposed into components (instead of relying on global classes)
Interface
Pathfinding
Pathfinding : comparison between search grid creation algorithm (me) and path finding algorithm (library)
Letters detection
Robot (upside-down)
Robot in action






