{"id":49151651,"url":"https://github.com/badgerloop-software/sc2-driver-io","last_synced_at":"2026-04-22T06:11:37.265Z","repository":{"id":317913647,"uuid":"1066031933","full_name":"badgerloop-software/sc2-driver-io","owner":"badgerloop-software","description":"Solar Car 2 Driver IO Program - Firmware, Networking, and Dashboard","archived":false,"fork":false,"pushed_at":"2026-03-19T04:30:02.000Z","size":4774,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-19T21:10:05.898Z","etag":null,"topics":["c","cpp","python","raspberry-pi"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"badgerloop-software/sc1-driver-io","license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/badgerloop-software.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-28T22:58:57.000Z","updated_at":"2026-03-05T04:51:47.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/badgerloop-software/sc2-driver-io","commit_stats":null,"previous_names":["badgerloop-software/sc2-driver-io"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/badgerloop-software/sc2-driver-io","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badgerloop-software%2Fsc2-driver-io","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badgerloop-software%2Fsc2-driver-io/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badgerloop-software%2Fsc2-driver-io/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badgerloop-software%2Fsc2-driver-io/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/badgerloop-software","download_url":"https://codeload.github.com/badgerloop-software/sc2-driver-io/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/badgerloop-software%2Fsc2-driver-io/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32123674,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-22T00:31:26.853Z","status":"online","status_checked_at":"2026-04-22T02:00:05.693Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","cpp","python","raspberry-pi"],"created_at":"2026-04-22T06:11:35.740Z","updated_at":"2026-04-22T06:11:37.254Z","avatar_url":"https://github.com/badgerloop-software.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SC2 Driver IO Program\n\n**Solar Car 2 Real-Time Telemetry and Control System**\n\nA headless driver IO system for Solar Car 2, featuring CAN bus communication, real-time telemetry transmission, GPS-based lap counting, and an optional lightweight terminal dashboard.\n\n---\n\n## Work in Progress\n\nThis project is currently a work in progress. The architecture has been restructured to remove Qt dependencies and implement a clean multi-process design with Python/C++ hybrid architecture.\n\n**Current Status:**\n- 🔄 Qt removal in progress\n- 🔄 CAN bus integration ongoing\n\nSee [`docs/ARCHITECTURE_REVIEW.md`](docs/ARCHITECTURE_REVIEW.md) for detailed architecture information.\n\n---\n\n## System Overview\n\n### Architecture\n\n```\nCAN Bus → Python Coordinator → ┬→ CSV Logger (USB)\n                                ├→ Lap Counter (GPS)\n                                ├→ C++ Telemetry (Radio/LTE)\n                                └→ Textual Dashboard (Terminal UI)\n```\n\n### Key Components\n\n- **CAN Bus Reader** (`can_bus/`) - Single-reader architecture distributing to multiple consumers\n- **Telemetry System** (`telemetry/`) - C++ transmission over RFD900A radio and EG25-G LTE\n- **Lap Counter** (`lap_counter/`) - GPS-based section and lap timing\n- **Terminal Dashboard** (`textual_frontend/`) - Lightweight Terminal-based UI\n- **Data Logger** (`can_bus/csv_logger.py`) - Buffered CSV writing to USB drive\n\n---\n\n## Hardware Requirements\n\n- **Raspberry Pi 4** (or newer)\n- **Waveshare RS485 CAN HAT** for CAN bus communication\n- **EG25-G Mini PCIe LTE Module** for cloud telemetry and GNSS\n- **RFD900A Radio Module** for chase car communication\n- **USB Flash Drive** for data logging\n\n---\n\n## Quick Start\n\n### 1. Clone Repository\n\n```bash\n# Clone with SSH (recommended)\ngit clone git@github.com:badgerloop-software/sc2-driver-io.git\ncd sc2-driver-io\n\n# Initialize submodules\ngit submodule update --init --recursive\n```\n\n### 2. Install Dependencies\n\n#### On Raspberry Pi / Linux:\n\n```bash\n# System packages\nsudo apt update\nsudo apt install -y build-essential cmake python3 python3-pip git\n\n# Python packages\npip3 install -r textual_frontend/textual_requirements.txt\npip3 install python-can\n\n# CAN bus tools\nsudo apt install -y can-utils\n```\n\n#### On macOS (development):\n\n```bash\n# Install Homebrew if needed\n/bin/bash -c \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\"\n\n# Install dependencies\nbrew install cmake python3\n\n# Python packages\npip3 install -r textual_frontend/textual_requirements.txt\npip3 install python-can\n```\n\n### 3. Build C++ Components\n\n```bash\nmkdir -p build\ncd build\ncmake ..\nmake\ncd ..\n```\n\n### 4. Configure CAN Interface (Linux only)\n\n```bash\n# Set up CAN interface\nsudo ip link set can0 type can bitrate 500000\nsudo ip link set can0 up\n\n# Verify CAN interface\nip link show can0\n```\n\n### 5. Run the System\n\n#### Option A: Full System (Production)\n\n```bash\n# Terminal 1: C++ Telemetry\nsudo ./build/sc2-driver-io\n\n# Terminal 2: Python Coordinator\npython3 services/coordinator.py\n\n# Terminal 3: Dashboard (optional)\npython3 textual_frontend/textual_dashboard.py\n```\n\n#### Option B: Dashboard Only (Development)\n\n```bash\n# Run standalone dashboard with simulated data\npython3 textual_frontend/dashboard_launcher.py\n```\n\n#### Option C: Systemd Services (Raspberry Pi)\n\n```bash\n# Install services\nsudo cp services/systemd/*.service /etc/systemd/system/\nsudo systemctl daemon-reload\n\n# Enable and start\nsudo systemctl enable sc2-telemetry sc2-coordinator sc2-dashboard\nsudo systemctl start sc2-telemetry sc2-coordinator sc2-dashboard\n\n# Check status\nsudo systemctl status sc2-*\n```\n\n---\n\n## Development\n\n### Project Structure\n\n```\nsc2-driver-io/\n├── can_bus/              # CAN communication (Python)\n├── telemetry/            # Radio/LTE transmission (C++)\n├── data_processor/       # Data validation (C++)\n├── lap_counter/          # GPS-based lap counting (Python)\n├── core/ipc/             # Inter-process communication\n├── services/             # System coordination\n├── textual_frontend/     # Terminal dashboard UI\n├── neural_network/       # AI integration (next sprint)\n└── docs/                 # Architecture documentation\n```\n\n### Key Files\n\n- **`services/coordinator.py`** - Main Python orchestrator\n- **`main.cpp`** - C++ telemetry entry point\n- **`can_bus/can_reader.py`** - Single CAN reader with fan-out\n- **`core/ipc/shared_data.py`** - Shared memory for dashboard\n- **`core/ipc/telemetry_bridge.py`** - Unix socket to C++\n\n### Testing\n\n```bash\n# Test CAN reader (requires CAN interface)\npython3 can_bus/can_reader.py\n\n# Test shared memory IPC\npython3 core/ipc/shared_data.py\n\n# Test telemetry bridge\npython3 core/ipc/telemetry_bridge.py\n\n# Test neural network interface\npython3 neural_network/interface.py\n```\n\n### Contributing\n\n1. Create a feature branch: `git checkout -b feature/your-feature`\n2. Make your changes\n3. Update submodules if needed: `git submodule update --remote`\n4. Test your changes\n5. Commit with descriptive messages\n6. Push and open a pull request\n\n---\n\n## Raspberry Pi Deployment\n\n### Hardware Setup\n\n1. **Install Raspberry Pi OS Lite** (no desktop environment)\n2. **Configure CAN interface** in `/etc/network/interfaces`:\n   ```\n   auto can0\n   iface can0 inet manual\n       pre-up /sbin/ip link set can0 type can bitrate 500000\n       up /sbin/ip link set can0 up\n   ```\n3. **Mount USB drive** for data logging (e.g., `/mnt/usb`)\n4. **Configure serial ports** for RFD900A and EG25-G\n\n### Production Deployment\n\n```bash\n# Build on Pi\nmkdir build \u0026\u0026 cd build\ncmake -DCMAKE_BUILD_TYPE=Release ..\nmake -j4\ncd ..\n\n# Install systemd services\nsudo cp services/systemd/*.service /etc/systemd/system/\nsudo systemctl daemon-reload\nsudo systemctl enable sc2-telemetry sc2-coordinator\n\n# Optional: Enable dashboard\nsudo systemctl enable sc2-dashboard\n\n# Start services\nsudo systemctl start sc2-telemetry\nsudo systemctl start sc2-coordinator\nsudo systemctl start sc2-dashboard\n```\n\n### Monitoring\n\n```bash\n# Check service status\nsudo systemctl status sc2-*\n\n# View logs\nsudo journalctl -u sc2-coordinator -f\nsudo journalctl -u sc2-telemetry -f\n\n# Check CAN bus\ncandump can0\n```\n\n---\n\n## Configuration\n\nEdit `config.json` for system settings:\n\n```json\n{\n  \"udp_chasecar_ip\": \"192.168.1.100\",\n  \"udp_chasecar_port\": 8888,\n  \"EthernetPort\": 9999,\n  \"csv_log_path\": \"/mnt/usb/logs\"\n}\n```\n\n---\n\n## Troubleshooting\n\n### CAN Bus Not Working\n\n```bash\n# Check interface status\nip link show can0\n\n# Restart interface\nsudo ip link set can0 down\nsudo ip link set can0 up type can bitrate 500000\n\n# Monitor for errors\ndmesg | grep -i can\n```\n\n### Telemetry Not Transmitting\n\n```bash\n# Check serial ports\nls -la /dev/ttyUSB* /dev/ttyS*\n\n# Test RFD900A\nsudo screen /dev/ttyS0 115200\n\n# Monitor LTE module\nsudo minicom -D /dev/ttyUSB2\n```\n\n### Dashboard Not Updating\n\n```bash\n# Check shared memory\nls -la /tmp/sc2_telemetry_shm\n\n# Test shared memory\npython3 core/ipc/shared_data.py\n\n# Restart dashboard\nsudo systemctl restart sc2-dashboard\n```\n\n---\n\n## Documentation\n\n- **[Architecture Review](docs/ARCHITECTURE_REVIEW.md)** - Comprehensive system design\n- **[Evolution Plan](docs/EVOLUTION_PLAN.md)** - Migration strategy and roadmap\n- **[Restructure Summary](docs/RESTRUCTURE_SUMMARY.md)** - Recent changes and status\n- **[Neural Network Interface](neural_network/README.md)** - AI integration spec\n\n---\n\n## Libraries and Frameworks\n\n- **[python-can](https://python-can.readthedocs.io/)** - CAN bus communication\n- **[Textual](https://github.com/Textualize/textual)** - Terminal UI framework\n- **[RapidJSON](https://rapidjson.org/)** - Fast JSON parsing (C++)\n- **[serialib](3rdparty/serial/)** - Cross-platform serial communication\n\n---","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbadgerloop-software%2Fsc2-driver-io","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbadgerloop-software%2Fsc2-driver-io","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbadgerloop-software%2Fsc2-driver-io/lists"}