View Full Version : [Question(s)] Static and dynamic object detection

02-17-2013, 08:46 AM

My task is to build a autonomous robot. Robot has access to a fixed static map (main map)of the environment. That map represent the obstacles which will not change for a long period of time like walls etc...

when the robot is moving, it will scan (using a sonar network) the area around it and create a local map at time 'T'. in that map there will be static objects like chairs or people who are standing at a one particular place (while talking), tables etc. and also there will be dynamic object like moving people.

I'm using grid mapping. If there is an object, then i will color the particular squares on the map. What i want to know is, that which squares represent static objects and which represent dynamic objects.

can some one suggest me an algorithm for that??

(i hope this is the correct thread for this question)

02-17-2013, 02:14 PM
What you're suggesting is one approach to the general group of SLAM algorithms (simultaneous locating and mapping.)

Using a grid is simple -- either declare an array of sufficient size/resolution, or use a hash table with the x/y coordinates of the cells as coordinates.

Figuring out what the dynamic readings correspond to compared to the static map is much harder, especially since you don't know which responses are static and which responses are dynamic.

If you can make sure that the robot starts out knowing where it is (so, no cold start discovery,) then it's easier, as the robot can do dead reckoning on how it moves, and sync up any drift to what it actually reads from the environment. This pretty much requires reasonably accurate encoders on your motors or wheels. Some other kind of triangulation fix (GPS, etc) would also help, assuming it's accurate enough to be useful.

So, assuming you already know how to store and query the map, and you already know how to dead reckon the movement of the robot, and you already know how to read the sensors, and you already know how to store a grid -- what do you actually need help with? Interpreting sensor readings and matching up against the map?

02-17-2013, 02:47 PM
You could compare the local maps created in the last few time steps to check if any of the detected objects have moved more than some threshold distance between the time steps. If any objects have moved more than some distance within some number of time steps, then you could classify them as dynamic, while the rest of the objects could be classified as static. You would have to be sure that the robot's sensors (sonar and motor encoders/imu) are sufficiently accurate to correctly align the local map within the global map (localization), so that you do not falsely detect static objects as dynamic objects because the robot was turning or otherwise moving relative to the static objects.

Localization and mapping are actively researched problems in robotics, so a google scholar search might be useful for more detailed discussions. Some of the more interesting methods of localization and odometry correction that I've seen involve using common elements of building design (orthogonality of walls and standard size/presence of ceiling and/or floor tiles). One of my (too numerous) little side projects (getting a tiny amount of work) is actually a ceiling tile tracking program to help correct for Darsha's poor odometry (omni-wheels and mecanum wheels both slip quite a bit depending on floor surface).

02-18-2013, 01:24 AM
@ jwatte,

Thanks for getting back to me.

As i said before, first i plan a path only considering the main map.. it will not contains things like chairs tables etc. while robot is moving on that path, lets assume at time "T sensor input shows that there is a obstacle on the path.

If that obstacle is a static object like a chairs, then i will have to plan the global path again. If it is a dynamic object, then it is not wise to plan the global path again (at least that is what i think).

So what i want to know is a way of categorizing a obstacle on the local map (probably a obstacle which will be on the path) is static or dynamic??

02-18-2013, 03:12 AM
What I would do is build a spatial representation of the obstacle(s) within the static map. Each time step I see an obstacle, I update the position of it to my best guess. If it seems to move in a specific direction over time (say, over a period of several seconds) then it's probably dynamic; if it doesn't move more than the localization jitter would account for, then it's probably static.

The robot could always play a simple "please move" phrase and see if the "obstacle" moves or not, too :-)

Even more advanced would be to use a camera, and do image recognition. Is it a person or pet, or something else that moves, or is it not? How good you can get with this depends on how big a corpus you need to train on, and how diverse the environment will be once "out in the wild" (if your robot will ever be in the wild.)