Implements Phase 3 ride-once-replay-forever route system. saltybot_routes package: - route_recorder_node: samples GPS+odom+heading at 1Hz during follow-me rides; 2m waypoint spacing; JSON-Lines .jsonl on NVMe /data/routes/; services start_recording/stop_recording/save/discard - route_replayer_node: loads .jsonl, GPS->ENU flat-earth conversion, heading->quaternion, 3m subsampling for Nav2 navigate_through_poses; 2m GPS tolerance (SIM7600X +-2.5m); pause/resume/stop services - route_manager_node: list/info/delete services for saved routes - route_system.launch.py: all three nodes with shared params - route_params.yaml: waypoint_spacing_m=2.0, replay_spacing_m=3.0 GPS: /gps/fix from SIM7600X (PR #65) UWB: /uwb/target from follow-me (PR #66) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
import os
|
|
from glob import glob
|
|
from setuptools import find_packages, setup
|
|
|
|
package_name = 'saltybot_routes'
|
|
|
|
setup(
|
|
name=package_name,
|
|
version='0.1.0',
|
|
packages=find_packages(exclude=['test']),
|
|
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'],
|
|
zip_safe=True,
|
|
maintainer='seb',
|
|
maintainer_email='seb@saltylab.io',
|
|
description='Route recording and autonomous replay — ride once, replay forever.',
|
|
license='MIT',
|
|
tests_require=['pytest'],
|
|
entry_points={
|
|
'console_scripts': [
|
|
'route_recorder_node = saltybot_routes.route_recorder_node:main',
|
|
'route_replayer_node = saltybot_routes.route_replayer_node:main',
|
|
'route_manager_node = saltybot_routes.route_manager_node:main',
|
|
],
|
|
},
|
|
)
|