{"id":23658485,"url":"https://github.com/enheragu/husky_test_utils","last_synced_at":"2026-05-02T01:34:59.071Z","repository":{"id":41191849,"uuid":"508689987","full_name":"enheragu/husky_test_utils","owner":"enheragu","description":"Set of scripts to configure Husky robot custom environment and perform different operations ","archived":false,"fork":false,"pushed_at":"2026-03-10T16:10:20.000Z","size":1677,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-10T20:50:41.980Z","etag":null,"topics":["bash","gps","python","urdf"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/enheragu.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":"2022-06-29T12:51:45.000Z","updated_at":"2026-03-10T16:10:49.000Z","dependencies_parsed_at":"2024-12-29T00:16:42.613Z","dependency_job_id":"bfcf6a3e-cd31-470d-84ab-2c8a538a51ae","html_url":"https://github.com/enheragu/husky_test_utils","commit_stats":null,"previous_names":["enheragu/husky_test_utils"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/enheragu/husky_test_utils","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enheragu%2Fhusky_test_utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enheragu%2Fhusky_test_utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enheragu%2Fhusky_test_utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enheragu%2Fhusky_test_utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/enheragu","download_url":"https://codeload.github.com/enheragu/husky_test_utils/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/enheragu%2Fhusky_test_utils/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32520156,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-02T01:12:54.858Z","status":"ssl_error","status_checked_at":"2026-05-02T01:12:54.261Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["bash","gps","python","urdf"],"created_at":"2024-12-29T00:16:55.663Z","updated_at":"2026-05-02T01:34:59.063Z","avatar_url":"https://github.com/enheragu.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Husky Test Utils\n\nOperational infrastructure for the Clearpath Husky UGV: shell environment setup, desktop monitoring (Conky), systemd service definitions, GPS tools, and URDF extras.\n\n## Overview\n\n| Directory | Description |\n|-----------|-------------|\n| [scripts/](scripts/) | Shell functions: ROS workspace setup, hardware IP exports, F-key shortcuts, Conky launcher |\n| [monitor/](monitor/) | 3 Conky desktop widgets: process status, sensor data, network traffic |\n| [systemctl_services/](systemctl_services/) | 12 systemd service files managing the full robot software stack |\n| [python/](python/) | GPS trajectory parser/visualizer and Harxon antenna serial configuration GUI |\n| [urdf/](urdf/) | Extra URDF frames (LIDAR + GPS) for the Husky description |\n| [rviz/](rviz/) | Preconfigured RViz layout for map visualization |\n\n## Shell Environment\n\nThe entry point is `husky_setup.sh`, sourced from `~/.bashrc`. It sets up the full ROS environment and provides user-facing functions:\n\n| Function | Action |\n|----------|--------|\n| `husky_ros_setup` | Source catkin workspace, export `ROS_MASTER_URI`, mount data disk, set hardware IPs |\n| `husky_launch_base` | Restart `husky_base.service` (motors/teleop/odom) |\n| `husky_launch_sensors` | Sync LIDAR PTP, restart `sensors.service` (LIDAR + GPS + IMU + DHT22) |\n| `husky_launch_localization` | Restart `localization.service` (dual EKF + NavSat) |\n| `husky_launch_multiespectral_camera` | Launch multiespectral cameras |\n| `husky_launch_fisheye_cameras` | Launch fisheye cameras |\n| `husky_check_sensors` | Run `check_sensors.py` — live frequency table |\n| `husky_multiespectral_start_store` | Enable recording via ROS topic |\n| `husky_multiespectral_stop_store` | Disable recording |\n\n**F-key shortcuts** (bound in terminal): F5=base, F6=sensors, F7=localization, F8=multiespectral, F9=fisheye, F10=sensor check.\n\n## Conky Desktop Monitor\n\nThree desktop widgets providing at-a-glance system status:\n\n| Widget | File | Position | Content |\n|--------|------|----------|---------|\n| **Main** | `monitor/conkyrc` | Top-right (full height) | ARVC logo, process status (5 services), sensor readings, camera status, hardware IPs, PTP offsets |\n| **Shortcuts** | `monitor/conkyrc_command` | Bottom-left column | F-key reference card |\n| **Network** | `monitor/conkyrc_network` | Bottom-left column | Per-interface (enp1s0/enp2s0/wlp3s0) upload/download speed with graphs |\n\nProcess status and sensor readings are generated by Lua scripts (`main.lua` → `check_processes.lua` + `process_txt.lua`) that parse live data from `check_sensors.py` output files.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"media/concky_interface_view.png\" width=\"600\" alt=\"Conky desktop monitor\" title=\"Conky desktop widgets showing process status, sensor data, network traffic and F-key shortcuts\"/\u003e\n\u003c/p\u003e\n\n## Systemd Services\n\nBoot order and dependencies:\n\n```\nptp_cameras_lidar → ptp_phc2sys → roscore → husky_base\n                                          → sensors → localization\n                                          → husky_web_manager → multiespectral_gui\n                                                               → fisheye_gui\n                                          → conky\n```\n\n| Service | Description |\n|---------|-------------|\n| `ptp_cameras_lidar` | IEEE 1588 PTP master (`ptp4l`) |\n| `ptp_phc2sys` | Sync NIC PHCs to CLOCK_REALTIME (`phc2sys` for enp1s0 + enp2s0) |\n| `roscore` | ROS Master |\n| `husky_base` | Husky drivers (motors, teleop, wheel odometry) |\n| `sensors` | LIDAR + GPS + IMU + DHT22 via `sensors_manager.launch` |\n| `localization` | Dual EKF + NavSat via `localization_manager.launch` |\n| `multiespectral_cameras` | Visible + LWIR cameras (manual start) |\n| `fisheye_cameras` | Front + rear fisheye Baslers (manual start) |\n| `husky_web_manager` | Flask monitoring dashboard on port 5050 |\n| `multiespectral_gui` | Multiespectral camera GUI on port 5051 |\n| `fisheye_gui` | Fisheye camera GUI on port 5052 |\n| `conky` | Desktop monitoring widgets |\n\nSee [systemctl_services/README.md](systemctl_services/README.md) for symlink and enable commands.\n\n## Python Utilities\n\n| Script | Description |\n|--------|-------------|\n| `gps_parser_map.py` | Parse `rostopic echo /gnss/fix` dumps, compute haversine distances, project GPS trajectories with error ellipses onto a map image |\n| `gui_antena_config_qt.py` | PyQt6 serial GUI for Harxon TS100 Smart Antenna — send $CFG commands, configure NMEA rates, set base station position |\n| `gui_antena_config.py` | Tkinter version of the antenna config GUI |\n\nSee [python/README.md](python/README.md) for usage.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"media/serial_port_GPS_antenna_interface.png\" width=\"350\" alt=\"Tkinter antenna configuration GUI\" title=\"Tkinter version of the Harxon TS100 antenna configuration interface\"/\u003e\n  \u003cimg src=\"media/serial_port_GPS_antenna_interface_qt.png\" width=\"350\" alt=\"PyQt6 antenna configuration GUI\" title=\"PyQt6 version of the Harxon TS100 antenna configuration interface\"/\u003e\n\u003c/p\u003e\n\n## URDF\n\n`husky_extras.urdf.xacro` — adds fixed-joint sensor frames to the Husky TF tree:\n- `os_sensor` (Ouster LIDAR) at `[-0.075, 0, 0.58]` relative to `top_plate_link`\n- `gps_link` (GPS antenna) at `[0.08, 0, 0.245]` relative to `top_plate_front_link`\n\n## Related Repositories\n\n| Repository | Relation |\n|------------|----------|\n| [husky_manager](https://github.com/enheragu/husky_manager) | Launch files, web dashboard (port 5050), sensor checker — managed by the systemd services defined here |\n| [multiespectral_acquire](https://github.com/enheragu/multiespectral_acquire) | Camera drivers, buffer sync pipeline, and camera GUIs — launched by `multiespectral_cameras` and `fisheye_cameras` services |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenheragu%2Fhusky_test_utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenheragu%2Fhusky_test_utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenheragu%2Fhusky_test_utils/lists"}