This is the first self-balancing robot that I built that actually worked well. More info about it here. My absolute first self-balancing robot was the “Equaipose bot”, link the page about it here.
This video has gained some attention on youtube, and I think that is why I get at least one email every other week from people asking about the code and schematics for this robot. I have not shared the code of any details about this robot since it is very poorly made and coded. The robot uses multiple Arduinos just to keep the balance and drive the motors, later I also added another Arduino to manage the Ultrasonic sensors and some other stuff. There was also a Raspberry Pi that I planned to use for computer vision experiments, I never came around to doing that using this robot.
Now when I know a lot more about self-balancing robots, and Arduino programming and DIY robots in general, I decided to make a new version of this robot. I new complete rebuild of it. My intention is to make the robot less complicated and also better. I stripped down almost everything in the robot and started over. Still using the same old wooden chassis. The new version is based on a single Arduino MEGA R3 controlling everything in the robot. It reads the MPU6050 IMU, makes all the filtering and balancing calculations, and drives the motors using hardware timers for maximum precision. The new code for this robot is heavily based on the code for my “mini balancing robot”, with some improvements, more info about that robot here. I still use the same old stepper motors, model airplane wheels, and “Big Easy Driver” -stepper motor driver boards. The Arduino MEGA also controls and reads four HC-SR04 ultrasonic sensors using Interrupts. Those sensors are used for obstacle avoidance.
The new version of the robot works now. It balances and drives around avoiding obstacles, but I still have a few things to fix with the code. I want to add a pushbutton for control and a buzzer for feedback, I should also add battery measuring and implement a low voltage cut off to prevent damage to the battery.
I hope to release I video of the robot together with the code and schematic in a couple of weeks.
The servo seen in the pictures is not and will not be implemented in the first version of the code, but the intention is that the servo should be used to make it possible for the robot to raise itself up and start balancing on its own. Maybe I will also ad some sort of remote control since it is a frequently requested feature, But that will be in a later version.
It has been some time since a worked on this robot. This is a video of me building and installing the main PCB on the robot. The video was actually recorded several months ago, but now I recently found the inspiration to continue to work on this project.
The main board has an Arduino Due that controls the two stepper motors that drive the wheels. The PCB also has a lot of other features including servo outputs/inputs, MOSFET outputs, bumper sensor inputs, 6 DOF IMU (gyro and accelerometer), a few buttons and LEDs, and a couple of other things. In the video, I connect an RC receiver the servo inputs on the board and drive the robot abound using remote control.
The future plans for this robot are to implement a serial interface in the Arduino Due, and then connect it the Rasberry Pi. That way the Rasberry Pi will be able the drive the stepper motors and also read data from the IMU and other sensors. Then I can make a python script or something running on the Pi that gives the robot some interesting behaviors.
I also plan a replacing the Time Of Flight LIDAR sensor mounted on the stepper motor seen in the video with a rotating Laser sensor instead. The problem with the Time Of Flight sensor is that it has a very limited range and sampling time. I recently found out about the rotating Laser Distance Sensor (LDS) used on Xiaomi robot vacuum cleaner robots. It is available for cheap as a replacement part the vacuum robots. There is also an open source project to control the spinning of the sensor an read data from it, which should make it relatively easy to connect to the Rasberry Pi in my robot.
This video shows a robot I have built that is driving between two waypoints using GPS.
I built this robot last summer, about a year ago. Back then, I never really managed to the software part of the robot working. The weather became worse outside as the fall came, and a lost interest in this project and started working on other things instead.
I wave written all the code myself, apart from the functions used to calculate course and distance between GPS waypoints. I used functions from the TinyGPS library for that. The code runs on an Arduino Due, the robot is using PID control to steer towards the waypoints. The robot uses a combination of GPS-course and integrating the signal from a yaw-gyro to determine its current course. The robot also has a compass, but it does not seem to work very reliably, therefore I do not use it. The robot also has sonar and other sensors, but they are not used in this video. Expect more videos and info about this robot in the near future.
This is a new long-term robot project I have been working on for the past couple of months. It is a general purpose indoor robot, that will work as a platform for experimentation. When designing this robot, I have tried to think about and improve everything I have learned from previous robot projects I have made. But this robot will also feature some new stuff I have not tried before. Some of the key features if the robot includes:
Stepper motor based four-wheel-drive skid-steering drive system
Big Li-Ion battery
A lot of custom 3D printed parts
Heavy duty bumpers, large ground clearance and large foam wheels
Raspberry Pi main computer
Arduino Due for controlling low-level peripherals
Scanning Lidar sensor
Probably a Raspberry Pi camera module mounted on a pan/tilt system
So far, only the majority of the mechanical work is done. Here are a few images, click on them to make them larger:
Made a video of my indoor robot, reading and reacting to different sings using Raspberry Pi, camera and OpenCV. The Raspberry Pi sends data about which sign it is detecting using serial, then the Arduino controlling the robot reacts and performs different pre-programmed manoeuvres.
Made a new video of my mini balancing robot. I am now using TMC2100 stepper motor drivers, which makes the robot very silent and also steadier. I have also returned the PID values and increased the loop speed slightly in the software. A new version of the code is available on the Mini balancing robot page.
This is my attempt at building a really good obstacle avoidance robot. The robot is built to drive around a normal indoor environment without getting stuck on stuff. The robot uses an Arduino Maga 2560 and several sonar sensors to detect obstacles.
This robot also has a Raspberry Pi and camera module, that will be used for computer vision experiments in the future.
I have created a small and simple balancing robot. It uses a single Arduino, an MPU-6050 and stepper motors. All the design files, code and schematic are available for download. Read more here: Mini balancing robot page
I have built an obstacle avoidance robot I built to test a few ideas I had and learn more about what it takes to make robot robot that can navigate around an indoor environment without getting stuck on things. I will also use this robot to experiment with line following and maybe line-maze solving in the future.