Introduction
Today mobile robots continue to pique the curiosity of many researchers and industrialists. Wheeled robots, legged robots, and other movement mediums are examples of mobile robots. These robots have advantages and disadvantages depending on the sort of locomotion they use, for example, wheel-based robots are efficient on most surfaces but fail to handle last-mile hurdles. In the realm of robotics, there is a lot of work being done to create and implement a unique style of locomotion that is best suited for any environment. This gave rise to the concept of hybrid locomotion, which combines two or more separate locomotion mechanisms to provide greater efficiency and mobility in any terrain.
Methodology
3D Modelling
Detail Design:
The cad file was converted to 2D Drafting once the robot was designed and completed to comprehend the robot's dimensions
Fabrication
Material Selection
To hold the robot structure we have utilized acrylic sheet due to properties. These acrylic sheets are lightweight, durable, colorless, and have excellent clarity. These sheets are also resistant to the environment. Acrylic sheets are more lightweight and shatter-resistant than glass
3D Printing
The technique of producing 3D objects from digital data, such as CAD models, is known as 3D printing. We utilized FDM (fused deposition modelling) for 3D printing in this approach. and we have selected material such as PLA, ABS and PETG for different linkage, joint and parts of the robot.
List of Material
Assembly
Due to a torque calculation error, the design went through two iterations before being corrected in the next design. It took roughly 80+ hours of 3d printing, electronic integration, and lidar integration before the hardware part was finished.
Control System
Software Integration
Gait Algorithm:
Gait refers to a series of distinct foot placements carried out in a precise order. The quadruped robots walk in two different ways. Static gaits for instance crawl, wave, occur when the upward translation of the Centre of Mass kept static inside the polygonal produced by the order to provide a framework
The reasons are as shown below:
1) The trot is a dynamic gait that is beneficial for speed and agility.
2) Whether or not the two diagonal support legs have flipped. The opposing two transfer diagonal legs can also avoid this by immediately hitting the bottom.
3) The trotting gait evolved from the immobile creeping motion, and moving from trot to crawl is simple and in the opposite direction. The trotting gait is ideal for challenging conditions.
4) These diagonal legs have the same motion phase. They should, in theory, both hit the bottom at the matching time. They both emerge from the bottom at the matching time and swing forward at the same time. Therefore, the parity trotting gait may carry out the robot's parallelism motion while preserving self-stability & reducing attitude management complexity.
Forward Kinematic and Inverse Kinematic
In order to move in certain Translation we have used a simple math like trigonometry to solve the problem which were facing. First we have utilized forward kinematic and later we moved to IK in order to solve stability on unequal surface.
To overcome the challenge we were encountering, we used simple arithmetic such as trigonometry to travel in a specific direction. To solve stability on unequal surfaces, we first used forward kinematics and then switched to Inverse Kinematic.
In layman's terms, we know the length and height of the robot leg, while the unknown variable is theta of each joint. Below is an example of a simple leg configuration.
Now the code are written in python3
#inverse kinematic 👉------------------->
#given data
a = 9.5 #knee
b = 9.4 #shoulder
c = 8 #height 6
shoulderAngle = (pow(b, 2) + pow(c, 2) - pow(a, 2)) / (2 * b * c)
shoulderAngle1 = math.acos(shoulderAngle)
kneeAngle = pi - (shoulderAngle1 * 2)
#convert rad to deg
shoulderAngleDeg = round(math.degrees(shoulderAngle1))
kneeAngleDeg = round(math.degrees(kneeAngle))
#leg offset
shoulderPOS = (shoulderAngleDeg + 149.5)
kneePOS = (kneeAngleDeg + 131)
#inverse Kinematic 👆
#given data
z =14.4 #cm
x = 5
shoulderAngle2 = math.tan(x / z)
shoulderAngle2Deg = math.degrees(shoulderAngle2)
kneeAngle2Deg = z/cos(shoulderAngle2Deg)
#offset angle
shoulderPOS2 = (shoulderAngle2Deg+ 149.5)
kneePOS2 = (kneeAngle2Deg + 131)
#print(shoulderAngle2Deg)
#print(kneeAngle2Deg)
Because the Dynamixel Xl430 reports shaft position in encoder count, we'll need to do some conversions to make feeding the angle easier.
def motor(ID, val):
encoder = round(val/ 0.08789)
pos = encoder
dxl = packetHandler.write4ByteTxRx(portHandler, ID, add_goal_pos, pos)
return dxl
Let's have a look at the robot in action.
Using inverse kinematics, it can walk sideways and forward in the clip above. Further walking is currently being undertaken. Right now, I'm concentrating on getting IMU and Leg to work together to overcome the barrier.
Lidar Mapping
I have created a sample Mapping of room using RP Lidar A1 it work quite well. Right now it configured at the rate 5 hz and 100 rpm of motor and the code are written in python using numpy and matplot to stream the plot.
End of experiment
Result: On Holds