- 2D occupancy grid (100x100 cells @ 10cm resolution, configurable) - LIDAR integration: subscribes to /scan and /odom for real-time obstacle detection - Ray-casting: marks hit points as obstacles, intermediate points as free space - Cell states: unknown/free/obstacle/hazard with confidence tracking (0.0–1.0) - Hazard classification: 3+ detections = permanent hazard (stays in memory) - Temporal decay: 95%/day for hazards (30-day half-life), 85%/day for obstacles (~21-day) - Decay interval: applied hourly, cells revert to free when confidence < 20% - Persistence: auto-saves to /home/seb/saltybot-data/obstacle_map.yaml every 5 minutes - YAML format: grid metadata + cell array with state/confidence/detection_count/timestamp - OccupancyGrid publisher: /saltybot/obstacle_map for Nav2 integration at 5 Hz - Thread-safe: all grid operations protected with locks for concurrent callbacks - Statistics: hazard/obstacle/free cell counts and coverage percentage - Dashboard overlay ready: color-coded cells (red=hazard, orange=obstacle, gray=free) - Configurable via obstacle_memory.yaml: grid size/resolution, range limits, decay rates Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
33 lines
965 B
Python
33 lines
965 B
Python
from setuptools import setup
|
|
import os
|
|
from glob import glob
|
|
|
|
package_name = 'saltybot_obstacle_memory'
|
|
|
|
setup(
|
|
name=package_name,
|
|
version='0.1.0',
|
|
packages=[package_name],
|
|
data_files=[
|
|
('share/ament_index/resource_index/packages',
|
|
['resource/' + package_name]),
|
|
('share/' + package_name, ['package.xml']),
|
|
(os.path.join('share', package_name, 'launch'),
|
|
glob('launch/*.py')),
|
|
(os.path.join('share', package_name, 'config'),
|
|
glob('config/*.yaml')),
|
|
],
|
|
install_requires=['setuptools', 'pyyaml', 'numpy'],
|
|
zip_safe=True,
|
|
maintainer='seb',
|
|
maintainer_email='seb@vayrette.com',
|
|
description='Persistent spatial memory map for obstacles and hazards from LIDAR',
|
|
license='MIT',
|
|
tests_require=['pytest'],
|
|
entry_points={
|
|
'console_scripts': [
|
|
'obstacle_memory = saltybot_obstacle_memory.obstacle_memory_node:main',
|
|
],
|
|
},
|
|
)
|