teenybot
(WIP) Small Wireless enable robot to mess around with!!
Science Score: 44.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (9.1%) to scientific vocabulary
Keywords
Repository
(WIP) Small Wireless enable robot to mess around with!!
Basic Info
Statistics
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Topics
Metadata Files
README.md
DISCLAIMER: W.I.P AND STILL NEEDS A LOT OF WORK BEFORE BEING AT A MINIMUM OPERATING LEVEL <!-- omit from toc -->
TeenyBot - A Small Wireless enable robot to mess around with!! <!-- omit from toc -->

Overview
Not to special about the project (for now). The current aim of the project is to just create a small, simple robot that can be talked to wirelessly and to do whatever I want to do with it.
The whole idea is that I can develop this robot and can add any extra feature that want to experiment with. Essentially this robot (and this repo itself) serves as a small prototyping platform which I can use to scale to a larger robot platform, if i wanted to .
Table of Contents <!-- omit from toc -->
TODO List
Firmware
- [ ] Communication
- [X] Serial CMD (Debug and Dev ONLY)
- [ ] ~~Send Data~~
- [X] Receive Data
- [ ] Wi-Fi Communication
- [X] ESP32-Based Controller (ESPNow)
- [ ] ESP32-Based Controller (Web Client/Server)
- [ ] Local Web-server/Relay-hub
- [ ] Autonomous Web-server
- [ ] Local
- [ ] Remote
- [ ] BT Communication
- [ ] Robot Control
- [X] Forward and Backwards motor control
- [X] Half Motor Speed option
- Currently toggled via a button state on the controller
- [X] Turning
- [ ] Blended turning
- [X] Controller
- [ ] CMD/Path instructions
- [ ] Stationary/on-the-spot rotation
- Can be done via the controller with precise control but there is not way to lock the rotation to occur on-the-spot.
- [ ] Auto Stop when lost connection
- [ ] to controller
- [ ] to server
- [ ] Close-loop speed control
- [ ] Motor RPM Reading
- [ ] PID Motor Speed Controller
- Speed is a measurement in RPM
- [ ] Orientation of the robot (Hardware Dependant)
- [ ] ICM-20948 IMU
- [ ] robot position (Hardware Dependant)
- [ ] Vision (Hardware Dependant)
- [ ] LIDAR(Hardware Dependant)
- [ ] Video (MASSIVE Hardware Revision needed)
Controller
- [X] Robot Communication
- [X] Wi-Fi (ESPNow) Connection to robot
- [X] Send Controller Data to the robot
- [X] Receive data from the robot
- [X] Robot Control via joystick
- [X] Drive robot Forward/Backwards
- [X] Rotate the robot
- [X] Blended Turning of the robot
- Happens on the robot's firmware
- [ ] Live Feedback
- [X] Status Monitor
- [X] Connection state to Robot
- [X] Robot Speed
- [X] Left Motor
- [X] Right Motor
- [ ] (BONUS) Velocity Vector(?)
- [ ] Direction (Hardware Dependant)
- [ ] Position (Hardware Dependant)
Web-Server App
Potentially have two versions of the (Local Network) Web-Server, one running on an ESP32, another that runs on a standard computer/OS (I am currently thinking of a RPi Zero W currently, but it could change)
- TBD <!-- - [ ] -->
Control App
(Still need to designed on the framework and language)
- [ ] Robot Communication
- [ ] Wi-Fi Connection to robot
- [ ] BT Connection to robot
- [ ] Send commands
- [ ] Receive data from the robot
- [ ] Robot Control
- [ ] Drive robot Forward/Backwards
- [ ] Rotate the robot
- [ ] Live Feedback
- [ ] Status Monitor
- [ ] Robot Speed
- [ ] Direction (Hardware Dependant)
- [ ] Position (Hardware Dependant)
- [ ] LIDAR(Hardware Dependant)
- [ ] Video (MASSIVE Hardware Revision needed)
Hardware
Robot
- Chassis
- Motors
- ESP32 Dev board
- Motor Driver Boards - DRV8833
- Power management:
- Power Switch
- The one is used was just some random one I had spare
- Battery: Currently just 4xAA Batteries that the chassis holds
- Plans to swap this with a rechargeable solution
- Charger: TBD
- Voltage Regulator: The once I use are no longer listed but these ones should be fine for now
- I Plan to change this for smaller (and hopefully better) option when I get to redesigning the rest of the power management of the robot.
Controller
- ESP32 Dev board
- Joystick
- 3 Tactile Switches
- 0.96-inch SSD1306 OLED Display (128x64)
- Power management:
- Battery: Portable battery bank
- Plans to swap this with a dedicated, rechargeable solution
Software
The project has several software tools/programs, Starting from the Microcontroller firmware running on te robot itself, a custom EPS32-based remote control, a web-server application, and a Mobile Controller app.
Robot's Microcontroller Firmware
The Microcontroller is the main brain of the robot and handles the communication with the Controller/Server/App communication(s) received wirelessly connection.
The code is written using platformIO in VSCode use the platformIO Extention and project files can be found here
ESP32-based Controller
The Controller is based around an ESP32. This way we can make use of the ESPNow communication protocol to directly connect our controller and robot together and send data back and forth between them.
The Controller IO includes:
- A 2-axis (analog) joystick
- 3 programmable buttons
- 128x64 OLED Display
The programmable button are available to do whatever we want, whether that is a custom menus on the controller and we want to navigate them, or if we want to assign a specific function to them. Or (as I like to do for most projects) toggle state variable which are transmitted and handled elsewhere.
The OLED screen used is mounted vertically and is used to display the controller and received robot data. You can either display it as basic text, or (as I prefer) on a simple GUI window. In the GUI it currently display:
- Joystick analog readings
- Buttons toggle states
- MOCK/FAKE IMU data
- Bearing/Heading angle
- Accel OR Gryo
X, Y, Z
- Left and Right Motor Current Speed
- Connection Status to robot
The Controller also implements a deadzone filtering effect, as the analog joystick doesn't accurately center itself back between movements and the values jitter around creating noisy readings. The filter used doesn't really classify as a filter (at least to me) and just check if the readings of the joystick axis's are between the center value (2048) +/- a THRESHOLD values that we can change. If it is, then we just say that the joystick is centred and it reads 2048, else we send the actual reading form the Joystick.
Web-Server App
TODO: Write overview and features once development starts
Control App
TODO: Write overview and features once development starts
Libraries/Packages used <!-- omit from toc -->
- TO ADD LATER
Owner
- Name: Robert Stevenson
- Login: robert-stevenson-1
- Kind: user
- Location: UK
- Company: University of Lincoln
- Website: https://agriforwards-cdt.blogs.lincoln.ac.uk/cdt-personal/robert-stevenson/
- Twitter: Rob_Stevenson_1
- Repositories: 25
- Profile: https://github.com/robert-stevenson-1
MSc RAS + Agri-FoRwArdS Student @ UoL || MComp - Computer Science Graduate @ UEA || Interested in Robotics and Electronics
Citation (CITATION.cff)
cff-version: 1.2.0
message: "If you use any part of this software, please cite it as below."
title: "TeenyBot"
authors:
- family-names: "Stevenson"
given-names: "Robert"
orcid: "https://orcid.org/0009-0009-7981-0850"
date-released: "2023-04-27"
version: "0.0.1"
repository-code: "https://github.com/robert-stevenson-1/TeenyBot"
license: "MIT"
keywords: ["arduino", "robot", "cpp", "robotics", "esp32", "wifi", "bluetooth", "platformio", "wireless", "differential drive", "esp32-arduino"]
abstract: >
(WIP) Small Wireless enable robot to mess around with!!
references: []
GitHub Events
Total
Last Year
Issues and Pull Requests
Last synced: almost 2 years ago
All Time
- Total issues: 0
- Total pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Total issue authors: 0
- Total pull request authors: 0
- Average comments per issue: 0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 0
- Pull requests: 0
- Average time to close issues: N/A
- Average time to close pull requests: N/A
- Issue authors: 0
- Pull request authors: 0
- Average comments per issue: 0
- Average comments per pull request: 0
- Merged pull requests: 0
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
Pull Request Authors
Top Labels
Issue Labels
Pull Request Labels
Dependencies
- androidx.swiperefreshlayout:swiperefreshlayout 1.0.0 implementation
- com.facebook.react:hermes-android * implementation
- com.facebook.react:react-android * implementation
- 907 dependencies
- @babel/core ^7.20.0 development
- @babel/preset-env ^7.20.0 development
- @babel/runtime ^7.20.0 development
- @react-native-community/eslint-config ^3.2.0 development
- @tsconfig/react-native ^2.0.2 development
- @types/jest ^29.2.1 development
- @types/react ^18.0.24 development
- @types/react-test-renderer ^18.0.0 development
- babel-jest ^29.2.1 development
- eslint ^8.19.0 development
- jest ^29.2.1 development
- metro-react-native-babel-preset 0.73.9 development
- prettier ^2.4.1 development
- react-test-renderer 18.2.0 development
- typescript 4.8.4 development
- react 18.2.0
- react-native 0.71.8
- cocoapods >= 1.11.3