Chapter 1: Fundamentals of Robotics
Activity 1: Robot Positioning Using Odometry with Python
Solution
from math import pi def wheel_distance(diameter, encoder, encoder_time, wheel, movement_time): time = movement_time / encoder_time wheel_encoder = wheel * time wheel_distance = (wheel_encoder * diameter * pi) / encoder return wheel_distance from math import cos,sin def final_position(initial_pos,wheel_axis,angle): final_x=initial_pos[0]+(wheel_axis*cos(angle)) final_y=initial_pos[1]+(wheel_axis*sin(angle)) final_angle=initial_pos[2]+angle return(final_x,final_y,final_angle) def position(diameter,base,encoder,encoder_time,left,right,initial_pos,movement_time): #First step: Wheels completed distance left_wheel=wheel_distance(diameter,encoder,encoder_time,left,movement_time) right_wheel=wheel_distance(diameter,encoder,encoder_time,right,movement_time) #Second step: Wheel's central axis completed distance wheel_axis=(left_wheel+right_wheel)/2 #Third step: Robot's rotation angle angle=(right_wheel-left_wheel)/base #Final step: Final position calculus final_pos=final_position(initial_pos,wheel_axis,angle) returnfinal_pos position(10,80,76,5,600,900,(0,0,0),5)
Note
For further observations, you can change the wheels' diameter to 15 cm and check the difference in the output. Similarly, you can change other input values and check the difference in the output.