Add WiFi mesh handoff infrastructure: WiFiState.msg interface: - SSID, signal strength (dBm), connection status - AP address, frequency, link quality - TX/RX rates, roaming flag - Available APs for handoff decision WiFi Monitor Node: - Signal monitoring via iwconfig/nmcli - Auto-roam at -70dBm threshold - Seamless wpa_supplicant roaming - Gateway ping (8.8.8.8) every 5s - USB tethering fallback if offline >30s - TTS warnings for connectivity issues - Coverage logging with AP transitions Features: - Configurable roaming threshold (-70dBm default) - Gateway connectivity verification - Offline detection with configurable timeout - USB tethering auto-activation/deactivation - Signal strength change logging (>5dBm) - AP transition logging - Manual rescan/tether control commands Topics: - /saltybot/wifi_state (String) - /saltybot/speech_text (String warnings) - /saltybot/wifi_cmd (String commands) Configuration: - interface: wlan0 - roam_threshold_dbm: -70 - offline_warning_timeout: 30.0 - target_ssid: SaltyLab - fallback_tether: true - coverage_log_file: /tmp/wifi_coverage.log Roaming Behavior: - Monitors signal continuously - When signal < -70dBm, scans for stronger AP - wpa_supplicant performs seamless handoff - Logs all AP transitions to coverage file Fallback Behavior: - Pings gateway every 5 seconds - If unreachable for >30s, activates USB tether - TTS alert: 'Warning: Lost WiFi connectivity...' - Auto-deactivates when WiFi restored Coverage Mapping: - Logs timestamp, SSID, signal, connected status - Tracks roaming events - Useful for mesh network optimization 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',
|
|
],
|
|
},
|
|
)
|