{"id":19795608,"url":"https://github.com/dkogan/mine-rover","last_synced_at":"2026-06-09T02:08:07.208Z","repository":{"id":136714520,"uuid":"186093693","full_name":"dkogan/mine-rover","owner":"dkogan","description":null,"archived":false,"fork":false,"pushed_at":"2021-01-23T09:03:55.000Z","size":1614,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-28T16:09:19.911Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","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/dkogan.png","metadata":{"files":{"readme":"README.org","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}},"created_at":"2019-05-11T05:52:44.000Z","updated_at":"2021-01-23T09:03:57.000Z","dependencies_parsed_at":"2023-07-03T09:01:08.275Z","dependency_job_id":null,"html_url":"https://github.com/dkogan/mine-rover","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dkogan/mine-rover","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkogan%2Fmine-rover","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkogan%2Fmine-rover/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkogan%2Fmine-rover/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkogan%2Fmine-rover/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dkogan","download_url":"https://codeload.github.com/dkogan/mine-rover/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkogan%2Fmine-rover/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":285889733,"owners_count":27248884,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-23T02:00:06.149Z","response_time":135,"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":[],"created_at":"2024-11-12T07:16:49.171Z","updated_at":"2025-11-23T02:02:38.290Z","avatar_url":"https://github.com/dkogan.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"* Overview\n\nThis is a set of tools to drive the mine rover. There's a generic single-board\ncomputer (a Raspberry Pi 3b+ currently). I'm talking via I2C to a PCA9685-based\n16-Channel 12-bit PWM board. The first 4 PWM channels each talk to a motor via\nan XY-160D motor controller.\n\nVarious datasheets are in docs/\n\n* Tools\n\nThis repo has a few tools\n\n** Basic test\n\nFor the most basic testing you can run =pwm-init.sh= and then =pwm-set.sh= to\nwrite arbitrary values to the motor controllers. First run =pwm-init.sh= to set\nup the port, and =pwm-set.sh= to write out the i2c values. This is needed only\nfor testing.\n\n** Full system\nWhen running the full system we run =motors-from-udp= on the board talking to\nthe motors (to read UDP commands and to command the motors). And we run\n=motors-gui-to-udp= on a GUI-enabled computer talking to the board via the\nnetwork (to run a GUI to send commands to the network). The IPs and ports are\nhard-coded.\n\n*** =motors.py=\n=motors.py= reads commands from STDIN, and commands the motors.\n\nIf --maxcmdinterval T is given on the commandline, then we send a motor-stop\ncommand if T seconds elapses before receiving a command. This is intended as a\nsafety stop in case the network connection goes down.\n\nEach line of text on STDIN is a command. Each command is a list of\nwhitespace-separated integers. The number of integers defines a different type\nof command.\n\n0 integers:\n\n  If an empty line is received, we release all the motors\n\n\n1 integer:\n\n  0. Value in [0,3]: the motor index\n\n  We release the requested motor\n\n\n2 integers:\n\n  0. Value in [0,3]: the motor index\n  1. Value in [-4095,4095]: the velocity.\n\n  Velocity 0 means \"power hold\".\n\n\n4 integers:\n\n  0. Value in [-4095,4095]: the velocity of motor 0\n  1. Value in [-4095,4095]: the velocity of motor 1\n  2. Value in [-4095,4095]: the velocity of motor 2\n  3. Value in [-4095,4095]: the velocity of motor 3\n\n  Velocity 0 means \"power hold\".\n\n*** =motors-from-udp=\n\nA tiny script to read a UDP socket (via =socat=), and to connect it to\n=motors.py=\n\n*** =motors-gui-to-udp=\n\nA fltk GUI application to send motor commands to a (hard-coded) UDP socket. This\napplication is meant to be controlled via a keyboard. Keys:\n\n- Up/down: throttle. How fast the motors are spinning. This can be commanded\n  positive to drive forwards or negative to drive backwards. A value of 0 means\n  \"stop\"\n\n- Left/right: turn. By default we drive straight: the left and right wheels\n  rotate evenly. If we want to turn, we rotate the left wheels faster or slower\n  than the right wheels. This imbalance is controlled with the left/right\n  buttons\n\n- Space: go. At startup, the motors aren't engaged. We can plan a motion with\n  left/right/up/down, but the motors will not move until enabled by pressing\n  space. Similarly, while the motors are engaged, pressing space will stop them,\n  regardless of what they're doing\n\n- Backspace: reset. At any point this will stop the motors, and reset the\n  steering to \"straight\" and the throttle to 0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdkogan%2Fmine-rover","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdkogan%2Fmine-rover","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdkogan%2Fmine-rover/lists"}