Automation can held much bennefits in household, and one of those is cleaning, generic cleaning robots can adress this issue in a suboptimal way, in which their plannig algorithms lead to suboptimal path planing, also, mapping is done making the robot collide with the enviroment, the third suboptimal factor is that the robot is not programed to cooperate in a swarm, this means that the group of robots can clean an already cleaned portion, those issues grow when you have pets, which often make their needs inside of the house...
Jose, the particle robot is here to help with those issues, although is still in development, one of the complexities that arrise is non-linear feedback control, also the need of higher order controls in order to make the robot able to plan a path and also know the enviroment, in this proyect the non-linear feedback control and odometry algorithm will be presented for control of diferential robot, all programed in an PICO-PI-IMX6UL (thanks Hackster :D).
The main steps in mobile robot control can be described as:
- Planning
- Location
- Mapping
- Control
For this proyect we will use volumetric mapping, in which a matrix represents free or occupied spaces, and each cell represents a portion of space ( like 10x10 centimeters), a probabilistic filter may be implemented for this, but we will assume that our sensors are not noisy, basically, the set of ecuations for knowing where an obstacle are:
X_obs=Measured_distance*sin(robot_angle + sensor_angle);
Y_obs=Measured_distance*cos(robot_angle + sensor_angle);
From that we will know where our obstacle are, Volumetric mapping is as simple as dropping a 1 when there's an obstacle in the map-like matrix where X_obs = matrix_column and Y_obs = matrix_row, and don't do anything where there is not, resolution of each cell may be considered, a simple way to tackle that is dividing our measurment between the resolution and rounding it:
matrix_column=round(X_obs/res);
matrix_row=round(Y_obs/res);
And after describing that, is where the real fun begins, because of that we now need a discrete path finding algorithm, such as dijkstra, dfs or A-star (which I implemented in matlab, didn't had time to make it in c# and upload it in google cloud, I want to implement it with some other heuristics and optimal controllers in order to make web based MPC or system identification), the only addition that I did to A-star is that a integral of cost is added to heuristic function to allow the algorithm to scape local minima, the rest of the code is explained by itself.
Another algorithm such as PSO can be combined to make coverage path planning in the presence of multiple robot, and that is the other heuristic algorithm i want to implement in google cloud to make the coverage.
I dont want to make the story to long, so for having location of the robot, the kinematic model is used to make it aware of its position in space (that is what we call odometry), velocity control can be done solving the equation
ref_vel=sqrt((x_odometry-x_objective)+(y_odometry-y_objective))
and direction can be computed as:
dir_ref= atan2((y_odometry-y_objective),(x_odometry-x_objective));
and
x_odometry=x_odometry+(robot_velocity*(sin(robot_angle))
y_odometry=y_odometry+(robot_velocity*(cos(robot_angle))
robot_angle=robot_angle+(diference_in_wheels)
also:
robot_velocity=(rigth_wheel+left_wheel)/2
diference_in_wheels= (rigth_wheel-left_wheel)/distance_between_wheels
and I think thats all for this mobile robot control proyect, I want to say that distance readings and speed readings where to noisy in pico-pi, for that I implemented and alpha-beta filter, with which i won't bother you with details and just provide a wikipedia link to anyone interesed:
https://en.wikipedia.org/wiki/Alpha_beta_filter
Well, I think thats all, I want to thank hackster for shipping a PICO-PI-IMX6UL, the board is awesome and i fell in love with Android things platform, I will use it for higher order controls (vision, system identification, plannig and all sort of stuff) and industrial control of machines, It will be obvious in java code that I'm a contol engineer and not a mobile developer (It have benefits as I'm not library dependant), anyway, so much thanks Hackster :D
Btw, it's called particle robot because in swarm intelligence the members of a swarm are called particles.
Comments