Problem Statement: To develop central monitoring/navigation system (such as a camera or multiple cameras) should be used to understand the arena and the position of the robots and instruct robots on actions to be taken.
- Each bot is to fit within 6x6 inch square
- Each bot has a tray on top to carry 20x20x20 mm cube (approximate size)
- Tray has the ability to flip to drop items in chute
- No sensors for navigation/object detection to be mounted on the robot
The robot can only be touched by the operator when it is in the Induction zone
- Each robot has a package on top
- Start positions are S1, S2, S3 & S4
- Bot from S1 is expected to go to D1, Bot from S2 is expected to go to D2 and so on...
- On start - Bot in the S1 location is expected to go to D1
- On reaching D1 it should drop the item beyond the wall
- Once the bot comes back to S1 (Completely inside S1 square), only then Bot from S2 can start
- Race is over when S4 robot comes back to its square after dropping the parcel
- A list of packages will be given as part of the competition (Sample Sheet)
- The list will have a randomized list of Induct Station - Package ID - Destinations
- Packages to the same destination must be colored with the same color4. Only one package to be loaded on the Robot at a time
- You must decide which destinations are mapped to which chutes
- Two operators are needed - One at each induct zone
- You can decide the number of robots you plan to use
- Packages can be loaded onto bots only once bots are within the induct zones
- Bots need to move and drop off packages inside the chutes
- Competition is over when all packages are delivered or when 10 mins are up
Package Id | Induct Station | Destination |
---|---|---|
FKMP0001 | 1 | Destination 1 |
FKMP0002 | 2 | Destination 2 |
FKMP0003 | 3 | Destination 3 |
FKMP0004 | 4 | Destination 4 |
There would be a random distribution of
- Packages to destinations
- Packages to induct stations
Bot was designed on solid works. CNC machine was used to cut acrylic sheets which were used to create chassis. Parcel holding tray, tray stand and cover hood were 3D printed.
- Micro-controller: NodeMCU ESP8266: Used this specific micro-controller because has integrated WIFI module.
- LiPo Battery: Rechargable long lasting battery.
- Motor Driver L298N: Standard Motor Driver being used.
- Servo Motor: Tower Pro SG90: To throw parcel in chute.
- N20 Moters with Encoders: Encoders are used to make moton of bot straight.
- Tyres: Tyres compitable with N20 motors.
Moter Driver -- Battery: Power Moter driver (Moter driver powers other components). N20 Motor -- Motor Driver: For power and speed of rotation of motors. N20 Motor -- NodeMCU: For reading output of encoder. Moter Driver -- NodeMCU: Supply power and recieve speed for motors. Servo Motor -- NodeMCU: To throw parcels.
Using python, a socket server was created to perticular port(which can be changed while running). This server was created on hotspot of the hosting device. Each of 4 NodeMCUs were a client trying to connect at different ports. Once a connection is created, messages can be transfered from client to server and server to client till the connection closes. We have used server to client message only.
The message sent from server to client is a string consisting of 11 letters(Numbers). For Eg. "10101231231". To decrept the message let's break the message into 5 parts i.e. "10", "10", "123", "123", and "1". The first and second part tells about the direction of rotation of left and right side motors respectively. "10" means forward, "01" means reverse and "11"/"00" means stop. The "1" is high-voltage/1 to the specific terminal and "0" is low-voltage/0 to other terminal of motor. The third and forth parts tells about the speed of left and right motors respectively. "000" is zero speed and "255" is higest speed. The last part tells about the servo positioin. "1" is down and "0" is up.
{File path: /MicroController/MicroController.ion}
- Recieves message from server and decrepts it.
- Gets the rotation of both sides of motors and calculates difference.
- Using the speed from message and difference from encoder, it comes up with final speeds for both motors.
- The final speeds are the sent to motor driver.
- Waits for next message.
- Goto 1.
{File path: /Round 1/winner1.py and /Round 2/main.py}
- Recieves input from camera using OpenCV.
- Detects the position and direction of motion of all the bots (bots have aruco markers on top). {implementation: /Round 2/utils.py}
- According to position and destination, the speed of both sides of motor are determined using a function.
- This speed is then sent to the client (bot) over the socket server.
- Bot moves.
- GoTo 1.
Control Diagram of our Solution