teenybot

(WIP) Small Wireless enable robot to mess around with!!

https://github.com/robert-stevenson-1/teenybot

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

arduino bluetooth cpp dart esp32 esp32-arduino flutter platformio robot robotics wifi wireless
Last synced: 6 months ago · JSON representation ·

Repository

(WIP) Small Wireless enable robot to mess around with!!

Basic Info
  • Host: GitHub
  • Owner: robert-stevenson-1
  • License: mit
  • Language: C++
  • Default Branch: main
  • Homepage:
  • Size: 2.12 MB
Statistics
  • Stars: 1
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 0
Topics
arduino bluetooth cpp dart esp32 esp32-arduino flutter platformio robot robotics wifi wireless
Created almost 3 years ago · Last pushed over 1 year ago
Metadata Files
Readme License Citation

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 -->

TeensyBot Img

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

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

CONTROLLER PICTURE TO COME

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.

PICTURE OF DISPLAY GUI

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

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

Control App/TeenyBot_Control_App/android/app/build.gradle maven
  • androidx.swiperefreshlayout:swiperefreshlayout 1.0.0 implementation
  • com.facebook.react:hermes-android * implementation
  • com.facebook.react:react-android * implementation
Control App/TeenyBot_Control_App/package-lock.json npm
  • 907 dependencies
Control App/TeenyBot_Control_App/package.json npm
  • @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
Control App/TeenyBot_Control_App/Gemfile rubygems
  • cocoapods >= 1.11.3