Skip to main content

Posts

Showing posts with the label ROS

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

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.