ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

AMCL Time-based updating

asked 2019-03-08 15:31:08 -0500


I am using an Rover Robotics OpenRover to run AMCL on a robot and I see that AMCL updates once it has moved a certain distance. When the robot is not moving it doesn't update. I want to configure it to update while not moving. Is it possible to set a time based update interval instead of distance, that way the robot tries to improve is position while not moving?

Higher-level question, why don't I see people doing this in any tutorial. It seems like an obvious thing to do.

Regards, Nick Fragale

edit retag flag offensive close merge delete

3 Answers

Sort by ยป oldest newest most voted

answered 2022-06-19 10:20:39 -0500

Mike Scheutzow gravatar image

For it to work most effectively, AMCL requires new information from each lidar scan it ingests. If the robot is not moving, feeding AMCL the same scan over and over will make the algorithm perform much worse.

AMCL is designed to handle Global Localization for difficult cases: imagine multiple identical rooms, each with a doorway to a shared hallway. If the robot is inside one of the rooms, there is no way to determine which room it's in from just the lidar scans - the robot will have to move into the hallway to determine a single solution. This is why AMCL wants "new" scans.

edit flag offensive delete link more

answered 2019-03-13 20:38:07 -0500

billy gravatar image

AMCL has a service for updating on command.

request_nomotion_update (std_srvs/Empty)

Service to manually perform update and publish updated particles.

So setup a timer and request the service periodically.

edit flag offensive delete link more


That's not what services are meant for and a pretty heavy operation to build and tear down the XMLRPC at any rate > 1hz

stevemacenski gravatar image stevemacenski  ( 2019-03-14 12:30:37 -0500 )edit

Easy way to call the service every second:

watch -n 1 rosservice call /request_nomotion_update
chadi gravatar image chadi  ( 2021-05-07 04:12:41 -0500 )edit

answered 2019-03-08 20:18:08 -0500

Not out of the box, but if you read the AMCL code, I think you'll find it pretty simple to change those criteria.

Why _not_ do it? Imagine your robot is just hanging out for a few hours, scan matcher and the lasers aren't perfect, you'll end up drifiting in place while staying still I imagine. Also, if you're running a robot at let's say conservatively 0.5m/s, you're probably going to trigger your AMCL config once a second typically (more or less, I'm just looking at defaults). Do you really want to run this more than once a second?

edit flag offensive delete link more

Question Tools



Asked: 2019-03-08 15:31:08 -0500

Seen: 805 times

Last updated: Jun 19 '22