Comments (8)
The limiting factor will be memory consumption. In the case of a 2D ESDF output (i.e. the ground robot navigation case), the dominating consumer of memory is the 3D TSDF which is 2 bytes/voxel. At 5cm voxels this is 64Kb/m3. The Orin can have 64Gb memory, but you probably don't want to use all of that for the map... Let's say you want to use 16Gb for the map. That's 250000m3. Let's say with ~3m high ceilings that's ~80000m2 floor area. I guess that's a small warehouse? Would you agree? This analysis ignores that we only allocate memory in observed space, which is likely to approximately double that number.
With all of that said, at the moment, we're intending for nvblox to be used for local mapping. In our forthcoming release, a combination of voxel decay and cropping the map outside of a radius will be turned on by default and will limit map growth beyond the robot's vicinity.
from isaac_ros_nvblox.
Because of how we do the updates, the compute requirements do not scale with the size of the map. Each update only affects the parts of the map in view (plus a bit extra because the ESDF propagates outwards from these areas). You're right though that we should collect experimental evidence to back this claim up. However, like I said our intent at present is that nvblox is used for local mapping, because that's how we're using it.
The main reason that would stop one from using nvblox for online global mapping, is that there's no mechanism in nvblox to account for updates to past poses, like what happens in a loop closure, a global localization, or a bundle adjustment etc. Ironically, I've spent a fair amount of time working on that problem (see for example voxgraph ) but we haven't incorporated that approach here. Our approach thus far has been to have an offline global map, and then do real-time perception locally.
from isaac_ros_nvblox.
Yes there is params to enabling clearing the map, except a sphere in the nvblox map about a frame using the parameters:
map_clearing_radius_m
map_clearing_frame_id
clear_outside_radius_rate_hz
Details are here: https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_nvblox/isaac_ros_nvblox/api/parameters.html
Code is here: https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nvblox/blob/main/nvblox_ros/src/lib/nvblox_node.cpp#L969
Note: As of this post the clearing is disabled by default
from isaac_ros_nvblox.
But any idea of what the cap of size is to remain retail in terms of the data size for some particular example?
from isaac_ros_nvblox.
We cannot directly cap the memory usage by number of bytes. But @alexmillane or @remostei can elaborate on how to estimate the memory usage based on the nvblox configuration.
from isaac_ros_nvblox.
Sorry, I meant map / spatial size (ballpark: a hotel room, a hotel ballroom, an office floor, a warehouse, an airport), but I suppose I could back that out from bytes.
from isaac_ros_nvblox.
Got it. 16gb would be pretty extreme, I'd say less than half of that would be still bordering on unreasonable. I doubt we could actually populate and maintain that much data in a real-time update basis separate of the data storage requirements. I'm a little surprised that no one has a general ballpark based on testing (but I appreciate the ballpark on memory!) - might be something worth trying out in the lab / NV floor to see when the performance sputters out of real-time as something to communicate to users for their reference. Might be a nice friday afternoon task
from isaac_ros_nvblox.
However, like I said our intent at present is that nvblox is used for local mapping, because that's how we're using it.
Sure, but that size still is relevent to local mapping. If I have a roomba in my apartment, its unlikely to hit that limit. If I have a tractor moving in a field, that's alot of space to update in its open field view. If I have a robot moving at 10m/s in some high speed application, it could be seeing alot of stuff.
Understanding the window size limitations on the Orin is relevant information for alot of application designers. Not just for trying to push the bounds for 'typical' warehouse applications :-)
A global approach would obviously be quite ideal - to have something global of this quality, but I think that update and managing that much information would cause some problems, but maybe/hopefully/possibly solvable or solved! That would be worth investing in, I think, which could be used to generate 2D occupancy grids, 3D meshes for manipulation and many others
from isaac_ros_nvblox.
Related Issues (20)
- Which Sensors, Compute are used? HOT 2
- Can we crop the mesh generated throgh nvblox? HOT 1
- Stereo Image pointcloud Possibility? HOT 1
- No result from Realsense live data HOT 1
- realsense_splitter_node fails to load on Jetson Xavier NX HOT 2
- How could the robot localize after loading a saved map? HOT 3
- ToF camera integration with Nvblox HOT 8
- Publishing full TSDF/ESDF maps HOT 3
- Caught exception in launch (see debug for traceback): __init__() got an unexpected keyword argument 'condition' HOT 3
- No colored mesh and costmap output HOT 1
- isaac sim example crashes HOT 3
- Realsense Firmware for vslam and nvblox HOT 2
- colcon build --symlink-install failed, missing vpi config file (inside docker) HOT 1
- Why save_map service just give me a flat esdf file? HOT 1
- Process dies after /nvblox_node/save_ply service call HOT 1
- container condition & mapping HOT 1
- Visualize nav2 costmaps HOT 1
- colcon build --symlink-install failed (Native Installation Ros2) HOT 2
- realsense_splitter error HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from isaac_ros_nvblox.