Hello all,
tldr; What are some high-level strategies to handle mapping and path-finding in an ever-changing lived-in home? I'm very much a beginner to ROS & RTAB-Map and SLAM & autonomous robotics in general. Given that I'm brand new, my question itself may be under-informed, in which case a "before you worry about this, you need to better understand X" that gives me a direction to Google search is absolutely acceptable and appreciated if that is the case. Here are the details of what I've been trying to figure out: I'm working a floor-roving companion-bot project where the end goal is to have an easy-to-build open-source robot that independently explores your home and interacts with your family. A quick way to describe it is a Roomba that simulates the endearing basic behaviors of 1-year-olds and puppies. I've had a change to begin learning ROS and experimenting with RTAB-Map using binocular vision so I have some concept of the challenges ahead. With that in mind though, I've seen several low-level and domain-specific examples of using ROS & RTAB-MAP for slam, but I still have a question about high-level strategies that would solve the following problem: How do I manage mapping, localization, and path-finding in a lived-in environment where obstacles are always changing? - Example: In an 1,000 sqft space filled with permanent walls, semi-permanent furniture, and miscellaneous temporary obstructions (amazon packages, children's toys, people and pets moving around) what strategies can I use to have the robot automatically update its map--noticing when things have changed without starting over from scratch. - The typical task I've been imagining to deal with this problem is calling-the-puppy: Puppy-analogI call the puppy from across the room. It looks up and sees me and runs over, navigating around a couch, kitchen island, and the day's Amazon delivery to run over to me.Robot versionAssume the robot has sufficient 3d & 2d mapping & odometry capabilities, basic object and face-detection, and also can identify the direction of sounds (similar to Amazon echo).- I call the robot, it identifies it was called and the direction it was called in - It turns in the direction and uses visual object detection and depth sensor to identify me ~7m away from it's current location. - Between me and the robot is -- semi permanent & previously mapped: couch and kitchen island -- new and temporary: Amazon box. -- changes since last mapped: the chairs around the kitchen island are in slightly different positions than when the robot last mapped, resulting in more room to navigate around the kitchen island. Given that typical scenario, what are typical strategies (if any) to update the map on the fly with changing features, particularly identifying new obstacles and removing obstacles that no longer exist? Thanks in advance! If anyone wants to see details on my project goals I have a 4-part TikTok explaining the project here: RO-BUD Part 1: https://www.tiktok.com/@scottsrobots/video/6951999336200867078 RO-BUD Part 2: https://www.tiktok.com/@scottsrobots/video/6952000579883306245 RO-BUD Part 3: https://www.tiktok.com/@scottsrobots/video/6952001228733811974 RO-BUD Part 4: https://www.tiktok.com/@scottsrobots/video/6952007893747109126 |
Administrator
|
Hi,
To deal with general robot navigation in dynamic environments, see navigation stack of ROS (which is compatible with rtabmap), in particular the attached paper. All concepts about local and global costmaps, local and global planners still hold up today. The general way to to navigation is to first do a mapping of the static environment (without obstacles), then relaunch navigation in localization mode in that static map. The local cost map of navigation stack should take care to avoid dynamic obstacles without having to modify the static map. This first approach would use less computation power and fixed memory when navigating. A second approach is to do SLAM during navigation, and always updating the global map. This approach would use more CPU and more memory over time. For sound localization, approaches like ODAS could be used. cheers, Mathieu |
Thank you!
|
In reply to this post by matlabbe
I just read through the paper you shared and it's EXACTLY what I was looking for.
Thanks again! |
In reply to this post by matlabbe
HI Mathieu,
May I know how do i go about using SPLAM? I have a static global map already and I'd like to continue mapping during navigation |
Administrator
|
Hi, If you restart in SLAM mode without deleting the database, a new session is created. When a loop closure is found with the previous map, they will be merged together. For the navigation part, if you send goals through goal interface of rtabmap instead of move_base (search "Planning" on this page), you are doing SPLAM. rtabmap navigation adds a layer over move_base nagivation to handle the case of when the map is optimized. See the referred paper. cheers, Mathieu |
Free forum by Nabble | Edit this page |