{"id":18624622,"url":"https://github.com/kumarrobotics/ouster_decoder","last_synced_at":"2026-03-07T12:02:18.053Z","repository":{"id":40316056,"uuid":"322394891","full_name":"KumarRobotics/ouster_decoder","owner":"KumarRobotics","description":"A low latency decoder for Ouster Lidars","archived":false,"fork":false,"pushed_at":"2024-10-24T19:22:27.000Z","size":219,"stargazers_count":18,"open_issues_count":6,"forks_count":9,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-11T13:13:26.437Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KumarRobotics.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2020-12-17T19:38:24.000Z","updated_at":"2024-12-11T10:12:22.000Z","dependencies_parsed_at":"2024-02-02T21:26:49.999Z","dependency_job_id":"54232fdb-f966-4e63-9521-7b72b8b4793b","html_url":"https://github.com/KumarRobotics/ouster_decoder","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/KumarRobotics/ouster_decoder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KumarRobotics%2Fouster_decoder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KumarRobotics%2Fouster_decoder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KumarRobotics%2Fouster_decoder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KumarRobotics%2Fouster_decoder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KumarRobotics","download_url":"https://codeload.github.com/KumarRobotics/ouster_decoder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KumarRobotics%2Fouster_decoder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30212485,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T09:02:10.694Z","status":"ssl_error","status_checked_at":"2026-03-07T09:02:08.429Z","response_time":53,"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":[],"created_at":"2024-11-07T04:29:45.625Z","updated_at":"2026-03-07T12:02:13.041Z","avatar_url":"https://github.com/KumarRobotics.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ouster_decoder\n\nThis decoder is intended to extend the ouster_ros package from https://github.com/ouster-lidar/ouster_example\n\nIt has very low latency (\u003c0.2ms) compared to ouster_example (\u003e3ms), tested on Intel i7 11th gen cpu.\n\nThe decoder only supports LEGACY and single return profile. Currently there's no plan for dual return profile.\n\n## Important\n\nThe timestamp of both the cloud and image message is the time of the last column, not the first column.\nThis is different from the official driver, which uses timestamp of the first column. \n\n## Usage\n\nRun the ouster driver \n```\nroslaunch ouster_decoder driver.launch replay:=true/false\n```\n\nThen run the decoder\n```\nroslaunch ouster_decoder decoder.launch\n```\n\nThe driver node is the same as the one from `ouster_example` except that it publishes a string message to topic `/os_node/metadata` that you should also record. When in replay mode, there's no need to specify a metadata file. The metadata file will still be saved in case one forgot to record the metadata message.\n\n## Decoder\n\nThe decoder allocates storge for a range image and a point cloud on startup.\nWhen receiving a packet, it fills the range image and the point cloud instead of doing all computations at the end of a sweep. This drastically redueces latency when publishing the cloud/image.\n\nEach pixel in the range image has the following fields:\n```\nstruct Data {\n    float x;\n    float y;\n    float z;\n    uint16_t r16u; // range\n    uint16_t s16u; // signal\n};\n```\n\nThe corresponding point cloud has point type XYZI.\n\nDuring each callback, we process the incoming packet and immediately decode and convert to 3d points. When we reach the end of a sweep, the data is directly published without any extra computations.\n\nTherefore, the publish latency of our decoder is typically less than 0.2ms, while the ouster `os_cloud_node` takes more than 3ms to publish a point cloud.\n\n## Data Drops\n\nOur decoder also checks for missing data. This is very useful for debugging purposes. The decoder tracks the frame and column id of each packet and reports any jumps (both forward and backward) if detected.\nThe decoder then makes sure that missing data is zeroed out in the message. \n\nTherefore, one can safely stop and replay a recorded rosbag without restarting the driver and decoder.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkumarrobotics%2Fouster_decoder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkumarrobotics%2Fouster_decoder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkumarrobotics%2Fouster_decoder/lists"}