Robotic Snake - A Robot For Navigation.


For a country like India where 50% of its population is engaged in agricultural activities, inefficient agricultural practices and inadequate storage facilities can lead to high wastage and quality deterioration of food grains. Thus, being one of the leading countries in agricultural production, India still faces problem of scarcity of food grains. Rats, mice and other rodents have long been a problem on farms where food and nesting sites are plentiful. They are carriers of a number of diseases and are responsible for contaminating farm feed and water supplies causing diseases that are harmful to both livestock and humans.


Consider a scenario where grains are stored in silos after harvest. There are congested and uneven tracks between the silos that are difficult for humans to monitor. This may lead to a rise in rodent attacks and infestation. A biomorphic robot resembling a Snake that is capable of traversing such tracks may be a solution for regular scanning of the warehouse.


Through this we can build a biomorphic hyper-redundant snake robot that is capable of traversing the prevailing terrain on the arena and also sense different types of rodents and insects. We divide the theme into a number of tasks to build the robot in a step by-step manner making the process easier and more interesting for you.


After building the robot, you need to navigate it in an arena. This versatile reptile is made with off-the-shelf parts and is capable of several different modes of locomotion, including slithering, inch worm, side winding and rolling. (The rolling configuration involves the snake curling itself into a vertical loop and rolling like a wheel. See the last section in the video above.) The snake contains 12 segments actuated by servo motors and joined with metal brackets. The servos are controlled by an Arduino Mega and powered by a 7.4 volt battery pack. A four button key fob transmitter provides remote control for the snake. The snake is also capable of autonomous movement.


Serpentine Motion :


On a real snake, the scales on the snake’s skin are configured so that there is less friction in the direction parallel to the snake’s body than there is in the direction perpendicular to the snake’s body. This is achieved on the robot snake by attaching passive wheels to each segment that roll in the direction along the length of the snake. The result is that the snake can be propelled forward just by sending a sine or cosine wave down its body.

The servo motors take commands that set their angle. If all servos are set to 90 degrees, then the snake's position is a straight line. An angle less than or greater than 90 will then tell the servo to bend left or right.


Each of the servo motors is controlled by a command of this form and all twelve of these commands are put into a for loop where the variable counter runs from 0 to 360 degrees. This commands the snake to perform one forward undulation and ends with the snake back in its original position. In the loop there is also a command delay. Since servos do not respond instantaneously, the code has to pause to give the servos time to move.


If the wave responsible for the motion of the snake is centred at 90 degrees, the snake's centre of mass will move in a straight line. If the wave is centred at an angle less than 90 degrees, the snake will turn left, and for more than 90 degrees, the snake will turn right. This is controlled in the code by the variables left offset and right offset. Thus, to turn the snake it is a simple matter of adding one of these offsets to the write commands in the forward motion loop. However, since this will result in a somewhat jerky motion as the snake moves suddenly to the turn starting position, so the robot in the turn loops slowly ramps up the offset at the beginning of the turn loop, and slowly ramps down the offset at the end of the turn loop. This results in a smoother motion.Each of four motion commands will complete one undulation of the desired movement and return the snake to the exact same position at the end of the loop.


0



  0