eurobot2022-UK

View the Project on GitHub ICRS/eurobot2022-UK

Welcome to ICRS Eurobot Wiki

The following is the summary of the work done for Eurobot 2022. Before reading further, it might be nice to look at the rules.

Eurobot Map

Eurobot Map
Here is an image of the Eurobot 2022 field, for reference. Further details can be found on Page 10 of the rules.

Eurobot 2022 Qualifiers

Robot 1 ("Sweeper Robot")

Robot 1's purpose was the task of storing "samples" (hexagons) in the Work Shed (7 on the map).

Robot 1 Strategy

  1. Identify which side of the arena it is on by comparing the distances reported by the left and right ultrasound (US) sensor.
    1. We always put the Sweeper Robot closer to the center of the field (on the right, if on Yellow side, and on the left, if on Purple side). Therefore, for this robot, the left US will have a lower reading if on the Yellow side, and vice-versa if on the Purple side.
  2. Travel to a set of pre determined waypoints depending on which side the robot is on.
    1. These waypoints correspond to where the hexagons are placed horizontally on the robot's side of the field. There are 6 such hexagons on each side: the 3 coloured hexagons placed in the Excavation Site (6 on the map) and the 3 upside-down (brown) hexagons placed above them.
  3. As the robot travels along the set of waypoints, it will catch the hexagons in its arms and push them eventually towards the Work Shed (7).
  4. At the Work Shed, the pusher is activated to give the samples a final nudge into the corner of the field, which scores us points.
  5. Finally, the robot moves back to the Excavation Site (6) to end its run.

Run Demo

IMAGE ALT TEXT link redirects to Youtube

Sensors

Sensor Purpose Processor Responsible Remark
USB Camera Provides vision to allow robot to localise with respect to an ARUCO code
placed on a Fixed Beacon Support (11) on the central axis of the field.
Jetson Nano
Gyro/Compass Gives the robot an absolute heading without needing to see the ARUCO code One of the STM32s @Joshua can give more documentation details on this
Ultrasound Sensors The side-mounted US sensors let the robot know which side of the field it starts on
(see Strategy section 1).
The front sensor is used to detect other robots/obstacles ahead of the robot,
so that the robot doesn't collide with them.
3 sensors connected to one of the STM32s Robot obstacle detection is currently unimplemented
Motor Encoders Gives odometry information to the robot, allowing it to move set distances. Arduino Mega

Processors

Motors

Dependency Graph

Jetson Nano
└── USB Ports (4x)
    ├── USB Camera
    ├── USB Wifi Adapter
    ├── Arduino Mega
    │   ├── I2C
    │   │    ├── STM32 : Gyro/Compass
    │   │    ├── STM32 : 3x Ultrasound Sensor
    │   │    └── TCA9485 I2C Multiplexer
    │   │        └── 2x AS5600 Magnetic Motor Encoder
    │   └── GPIO
    │       ├── 2x Limit Switches for Pusher Mechanism
    │       ├── 2x ULN20003 Stepper Motor Driver
    │       ├── 1x L298N Motor Driver
    │       └── 1x GPIO for Starter Mechanism
    └── Arduino Nano (Turntable)
        ├── I2C
        │    └── AS5600 Magnetic Motor Encoder
        └── GPIO
             └── ULN20003 Stepper Motor Driver

Vision

Pusher Mechanism

Arduino Mega Driver Code

Command Structure:

Reading from the wheel encoders

For some reason, the AS5600 encoder breakout board does not support I2C address reassignment. The TCA9485 I2C multiplexer is used to read from both left and right encoders.

The tutorial from Adafruit was followed and implemented in the code.

For a better understanding of the exact implementation of the code, I encourage you to take a look at the source code (it's not doing anything fancy). Feel free to ask me if you have any questions.


Robot 2 ("Grabber Robot")

Robot 2's purpose was to grab the Statuette from the Pedestal (9 on the map) and place the Replica onto it. It would then put the Statuette onto the Display Cabinet (5 on the map).

Robot 2 Strategy

  1. Identify which side of the arena it is on by comparing the distances reported by the left and right ultrasound (US) sensor.
    1. The distance comparisons are swapped around compared to Robot 1 Strategy - the left US will have a higher reading if on the Yellow side, and vice-versa if on the Purple side.
  2. As per the rules the robot has the Replica already in one of its claws.
  3. The robot moves straight until one of its light sensors detects a line. It then turns towards the Pedestal (9) and drives until it reaches it, which is sensed using the front-facing US sensor.
  4. Using the empty grabber arm, the robot grabs the Statuette from the Pedestal. It then turns the turntable 180 degrees for the Replica grabber arm to deposit the Replica onto the Pedestal.
  5. The robot then drives backwards, line tracking using its backwards light sensors, to reach the Display Cabinet (5). Note that on the map, there is a curved line that connects the two. Using the rear-facing US sensor, the robot is able to detect when it has reached the Display Cabinet.
  6. The robot deposits the Statuette onto the Display Cabinet.
  7. The robot drives back to the starting position using odometry / dead reckoning.

Sensors

Sensor Purpose Processor Responsible Remark
Light Sensors Line Tracking Arduino Mega We picked up two random sensors from RobotShop link. These output individual analog voltages for line tracking.
Motor Encoders Gives odometry information to the robot, allowing it to move set distances. Arduino Mega
Herculex Smart Servo Convenient way to accurately set the positions of the robots' claws. Arduino Mega
Ultrasound Sensors The side-mounted US sensors let the robot know which side of the field it starts on
(see Strategy section 1).
The front and rear sensors are used to detect other robots/obstacles ahead of the robot,
so that the robot doesn't collide with them.
They also allow the robot to detect if it is currently approaching a shelf, so it can deposit items.
4 sensors connected to one of the STM32s Robot obstacle detection is currently unimplemented

Processors

Motors

Dependency Graph

Arduino Mega
├── Serial1(Tx/Rx)
│   └── Arduino Nano (Turntable)
│        ├── I2C
│        │    └── AS5600 Magnetic Motor Encoder
│        ├── SoftwareSerial
│        │    └── 2x Herculex DRS-0101 smart servos for claws
│        └── GPIO
│             └── ULN20003 Stepper Motor Driver
├── I2C
│   ├── STM32 : 4x Ultrasound Sensor
│   └── TCA9485 I2C Multiplexer
│         └── 2x AS5600 Magnetic Motor Encoder (not put on final bot)
└── GPIO
    ├── 2x Light sensor module
    ├── 1x L298N Motor Driver
    └── 1x GPIO for Starter Mechanism

Line Following

Grabber


Turntable Module

Arduino Nano Driver Code


STM32 I2C Slaves