Skip to main content

Posts

Showing posts with the label Robotics

Featured Post

Product Design of a 4 wheel differential drive robot

Product Design of a 4 wheel differential drive robot

I have been thinking of creating a small mobile robot from scratch. From scratch means, go through all the steps of a product development. Design the overall architecture, design the circuits, make 3D model of the parts, 3D print the parts and finally integrate with ROS. The methods I followed may not be the best practice. The only aim is to reach from idea to actual product (prototype). Features: 4 Wheel Differential Drive Camera WiFi IMU GPS(optional) Overview A 4 wheeled differential mobile robot with wheel encoders, camera, WiFi, IMU and GPS(optional). The first thing I did was to come up with an overall architecture. Raspberry pi 3 will be the heart of the robot. Pi Zero was considered in the beginning, but eventually had to  change because of the lack of support for ROS. Even though able to compile ROS from scratch, it became so hard to compile other packages needed for the project. Since I do not want to use pi to directly control motors, I had to desig...

ROS simulating a 3 axis robot in Rviz

In this tutorial, we will create an urdf model of a 3 axis robot and simulate it in Rviz. Create a package inside your workspace (create it if u haven't any). Create a folder named urdf to store urdf models. Now create a new file called my_robot.urdf with these data. This link will give you a list of all possible tag tags and informations. (Read this before going further. link ) There are 4 links and three joints in this robot. Each joint has one parent and one child. There are different types of joints. Here we used continuous and fixed type. Joint 0 is fixed and the rest of them are continuous. The origin tag inside the <joint> <origin rpy="0 0 0" xyz="0 0 3"/> represents the amount of offset required from the parent link. This can be clearly understood from the following figure. There is also an another origin tag inside link tag. This represent the base frame of the link itself. We need to shift it by 1.5 (half of the link...

MAV with two propeller

In order to counter the rotating torque from the previous single rotor version, one more propeller is added. The second propeller rotates counter clockwise and both torques will cancel each other (Only if both propellers are rotating at same speed). This the video of it flying with restriction. I have attached a a small weight to its bottom. Even though the counter torque is cancelled, it can't be controlled. Very small variation in alignment will drive the MAV crazy. This is an attempt to control the drone remotely with a joystick. Had changed the body from plastic (from plastic IC tube) to general purpose PCB board. The individual propellers are controlled from a joystick (logitech f710). The controller is an esp8266 es-11 WiFi chip. The telemetry data are send using a python program that run on my computer. Both the WiFi chip and my computer are on the same network.

My single rotor MAV :)

This is a small MAV (Micro Areal Vehicle) I created out of simple household stuffs. Though this one can't be controlled, it is fun to watch it fly. :) :) :) I have loosely connected the power supply so that once it start flying, the counter rotating torque forces the whole MAV to rotate. So after a few sec the wire connecting power supply (battery) will automatically get removed and I can catch the MAV before it crash into walls. :) This one is a slow motion video of it flying. It is hard to video it while flying. Since it is not stable it will crash itself into walls after a few seconds. I am trying to get it fly vertically upwards without any deviation. See this instructable ( https://www.instructables.com/id/Home-Made-Micro-Aerial-Vehicle-MAV-in-5-Min/ ) for more videos/photos.

Self Balancing Robot

I am working on a small self balancing robot for couple of days. It is not completed yet. To minimise the cost I used breadboard itself as a frame instead of a wooden or an acrylic one. 1 x Breadboard (small) 1 x Arduino pro mini 1 x IMU MPU 6050 1 x Motor driver 1x Powerbank (TP Link) 2 x DC Motor Things done Get raw data of IMU Get pitch,roll and yaw Control DC Motors from arduino Thing that need to be done Implement PID Tune Kp,Ki, and Kd.

Warehouse Management System using Drones

This is a project I had completed while doing internship at EY. The idea is to automate inventory and the stock checking process without any human intervention. Today these are all done using human resource. This is a really tiresome work because it involves manually inspecting each pallet (box) and read the QR/Bar code associated with it.  Instead consider a swarm of drones (a dozen or a hundred drones) go and check each pallet and complete the whole inventory and stock checking process in just a few minutes. This is a proof of concept design in which a drone uses a blueprint to travel a particular path and then reads and analyse each stock item and update it in the warehouse management system. All these things are done in real time. The drone used here is Parrot bebop and is implemented in ROS. Instead of actual boxes, QR code is fixed to symbolise each palette. The ROS implementation makes the project scalable. The video of the project is shown below.

Controlling Parrot Bebop using ROS Kinetic

Parrot Bebop drone is much stable while comparing with the most widely used AR Drone. Due to ROS support  and its open API AR Drone was widely used in the research community. Autonomy Lab had released the Bebop driver for ROS support and am planning to do some fun projects with it. This video is showing bebop taking off and landing where the commands are send from ROS. Bebop is fun to work with but flight time of just 10 min is really annoying (Bebop 2 has twice the battery life but doesn't have one to try out).

Searching and Precision Landing of AR Drone 2.0 using Neural Network | Gazebo | ROS

The drone is able to search and find the landing platform. Once it finds the landing platform it will try to orient itself and land in the platform. Both of these are implemented using Neural Network. The tag used in the landing platform is from the ros package ar_track_alvar.

Precision Landing of AR Drone 2.0 using Neural Network | Gazebo | ROS

This is the initial results of the AR Drone autonomous landing procedure using Neural Network. The video is playing at 2X. NB: These are not the final result. Need further optimization.

Visual servoing of AR Drone 2.0 using Neural Network | Gazebo | ROS

This video is a part of an AR Drone autonomous landing project. Here the AR Drone is controlling itself so that the landing platform is exactly in the middle so that it can  initiate a proper landing. Here AR Drone is also tracking the Tag embedded on the landing platform (Not using the inbuilt tag detection. The tag that is being used here is from the ar_track_alvar package.). This is implemented using Neural Network. The video is not a part of a completed project. (The video is playing at a slightly faster rate.) [NB: As you can see the drone is not orienting itself as it is trying to reach just above the tag. This is only because I didn't train it to do so.] Packages used: ardrone_autonomy, tum_simulator, ar_track_alvar, custom packages (some packages I created for collecting data for training, republishing twist cmd_vel with time stamp, implementation of NN, custom launch files and worlds.)

Simulation & Controlling AR Drone 2.0 using Gamepad | Gazebo | ROS

This is a demonstration of AR Drone 2.0 simulation under gazebo using tum_simulator on ROS Indigo. This video is a part of an autonomous landing of AR Drone project.  Packages used: ardrone_autonomy, tum_simulator, ardrone_tutorials

A Multilayer Neural Network Based Obstacle Avoiding Robot | ROS | Simulation

This is an obstacle avoiding robot which I and Sooraj Krishna built in ROS using STDR simulator. The robot is making decision based on a 3 layer Neural Network. The learning algorithm used is back-propagation (which we wrote in python). The network design is shown below. The 4 inputs are distances from sonar sensors placed on the Robot. The two outputs are linear velocity on x -axis and angular velocity on z-axis. The Neural Network is first trained using the data captured from joystick controlling the simulated Robot. Then the  trained weights are used in the NN for controlling the Robot. This is the first version that is trained with small training set. The video is showing the Robot avoiding obstacles on its own. This is after a bit more training. NB: The video is playing a bit more faster than the actual simulation as you can see from the time showing in simulator. NB: Among two outputs one is for angular velocity. For turning right the value will be posit...

Controlling turtlesim using a Gamepad | ROS

This is a sample program I wrote to learn ROS. I have used linux joystick api to directly capture values of the analog stick of my joystick (F710 Wireless Gamepad). These data are then directly send to the turtlesim/cmd_velocity as a geometry_msgs/Twist type. NB: There are ready to use ROS packages available to capture joystick key events (which are easy to implement). This is to just start coding with ROS.

Vision Based Line Follower using opencv

The robot is powered by beagleboneblack using a 1500mAh Li Ion Battery with a differential drive mechanism.

Mobile Robot controlling using BeagleBone Black

Finally start working properly. Need a better voltage regulator and a better battery pack! Voltage spikes when BeagleBoneBlack starts. After a while the BBB will shutdown due to voltage fluctuations... :-( WiFi module in BBB is drawing so much current . Now the robot can be controlled wireless and can move forward, backward, left and right using keyboard. Need much more work... :-) NB: Voltage issue resolved using LM2596 DC-DC Buck Converter. I have included a camera and a light source for the robot. But its not connected in the video. A laptop battery is placed at the rear end of the robot. It's not the power source. It is just added for giving enough weight to avoid skidding. Otherwise it will drift a lot. NB: There was a problem with wireless connection. It will drop at odd times. Solved using a script that will reconnect if connection is lost.

Controlling a differential drive motor with Beaglebone black