{"action":"created","comment":{"url":"https://api.github.com/repos/chalmers-revere/opendlv.core/pulls/comments/139515576","pull_request_review_id":63459140,"id":139515576,"diff_hunk":"@@ -0,0 +1,18 @@\n+# HDL-32E decoder: principles behind its CPC implementation\n+\n+proxy-velodyne32 takes the original HDL-32E (Velodyne LiDAR with 32 layers) UDP packets as the input and tranforms the payload into Shared Point Cloud (SPC) or/and Compact Point Cloud (CPC). SPC stores all points of each scan as a shared memory. A SPC includes either (1) the xyz and intensity or (2) distance, azimuth,vertical angle, and intensity of each point in the same scan. CPC is a compact form of the original 3D point cloud. More detailed explanation of SPC and CPC can be found in the paper \"Hang Yin and Christian Berger, Mastering data complexity for autonomous driving with adaptive point clouds for urban environments, 2017 IEEE Intelligent Vehicles Symposium, 2017 (https://www.researchgate.net/publication/318093493_Mastering_Data_Complexity_for_Autonomous_Driving_with_Adaptive_Point_Clouds_for_Urban_Environments)\".\n+\n+CPC is able to squeeze a complete scan of VPL-16 (Velodyne LiDAR with 16 layers) into a single UDP packet, i.e., with smaller size than 65535 bytes, assuming 10Hz rotation rate. In contrast, the number of points fired by HDL-32E per scan is more than double the size of VLP-16. Assuming 10Hz rotation rate, HDL-32E is able to fire up to 70,000 points, which cannot be all squeezed into one single UDP packet by CPC. Therefore, proxy-velodyne32 stores the data of a complete scan into three separate CPC messages, with each CPC containing a subset of the 32 layers. The first CPC contains 12 layers; the second CPC contains 11 layers; and the third CPC contains 9 layers.\n+\n+For every 32 points with the same azimuth, they are re-ordered with increasing vertical angle. The top layer has a vertical angle of -30.67 degree. The bottom layer has a vertical angle of 10.67 degree. From the top layer all the way down to the bottom layer, the vertical angle increment alternates between 1.33 and 1.34 degree. For instance, the vertical angle of the top layer, Layer 0, is -30.67 degree, while the vertical angles of Layer 1 and Layer 2 are -29.33 and -28 degree, respectively.\n+\n+The layers from different CPCs interleave with each other. The first CPC includes Layer 0, Layer 1, and every 3rd layer after Layer 1, thereby resulting in 12 layers. The second CPC includes Layer 2, Layer 3, and every 3rd layer after Layer 3, resulting in 11 layers. The third CPC includes Layer 5 and every 3rd layer after Layer 5, resulting in 9 layers. More specifically,\n+\n+- The first CPC includes layers 0, 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31.\n+- The second CPC includes layers 2, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30.\n+- The third CPC includes layers 5, 8, 11, 14, 17, 20, 23, 26, 29.\n+\n+Since these three CPCs incude unique numbers of layers, a receiver can easily distinguish them from the number of layers. For instance, a CPC with 16 layers implies a CPC from VLP-16, while a CPC with 11 layers implies the second CPC from HDL-32E.","path":"code/core/system/proxy-velodyne32/README.md","position":15,"original_position":15,"commit_id":"f805d4490719edd9249215babffccc8cadf87a47","original_commit_id":"f805d4490719edd9249215babffccc8cadf87a47","user":{"login":"chrberger","id":2297162,"avatar_url":"https://avatars0.githubusercontent.com/u/2297162?v=4","gravatar_id":"","url":"https://api.github.com/users/chrberger","html_url":"https://github.com/chrberger","followers_url":"https://api.github.com/users/chrberger/followers","following_url":"https://api.github.com/users/chrberger/following{/other_user}","gists_url":"https://api.github.com/users/chrberger/gists{/gist_id}","starred_url":"https://api.github.com/users/chrberger/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrberger/subscriptions","organizations_url":"https://api.github.com/users/chrberger/orgs","repos_url":"https://api.github.com/users/chrberger/repos","events_url":"https://api.github.com/users/chrberger/events{/privacy}","received_events_url":"https://api.github.com/users/chrberger/received_events","type":"User","site_admin":false},"body":"Very good explanation!","created_at":"2017-09-18T19:21:38Z","updated_at":"2017-09-18T19:31:54Z","html_url":"https://github.com/chalmers-revere/opendlv.core/pull/108#discussion_r139515576","pull_request_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/pulls/108","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/chalmers-revere/opendlv.core/pulls/comments/139515576"},"html":{"href":"https://github.com/chalmers-revere/opendlv.core/pull/108#discussion_r139515576"},"pull_request":{"href":"https://api.github.com/repos/chalmers-revere/opendlv.core/pulls/108"}}},"pull_request":{"url":"https://api.github.com/repos/chalmers-revere/opendlv.core/pulls/108","id":132917177,"html_url":"https://github.com/chalmers-revere/opendlv.core/pull/108","diff_url":"https://github.com/chalmers-revere/opendlv.core/pull/108.diff","patch_url":"https://github.com/chalmers-revere/opendlv.core/pull/108.patch","issue_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/issues/108","number":108,"state":"open","locked":false,"title":"2017.q2.feature.velodyne32","user":{"login":"HangYin2015","id":13238782,"avatar_url":"https://avatars0.githubusercontent.com/u/13238782?v=4","gravatar_id":"","url":"https://api.github.com/users/HangYin2015","html_url":"https://github.com/HangYin2015","followers_url":"https://api.github.com/users/HangYin2015/followers","following_url":"https://api.github.com/users/HangYin2015/following{/other_user}","gists_url":"https://api.github.com/users/HangYin2015/gists{/gist_id}","starred_url":"https://api.github.com/users/HangYin2015/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/HangYin2015/subscriptions","organizations_url":"https://api.github.com/users/HangYin2015/orgs","repos_url":"https://api.github.com/users/HangYin2015/repos","events_url":"https://api.github.com/users/HangYin2015/events{/privacy}","received_events_url":"https://api.github.com/users/HangYin2015/received_events","type":"User","site_admin":false},"body":"","created_at":"2017-07-28T08:17:13Z","updated_at":"2017-09-18T19:31:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6d93316b366d3ba62d183bbdf4f45bda8582f9b1","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/pulls/108/commits","review_comments_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/pulls/108/comments","review_comment_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/pulls/comments{/number}","comments_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/issues/108/comments","statuses_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/statuses/f805d4490719edd9249215babffccc8cadf87a47","head":{"label":"chalmers-revere:2017.Q2.feature.velodyne32","ref":"2017.Q2.feature.velodyne32","sha":"f805d4490719edd9249215babffccc8cadf87a47","user":{"login":"chalmers-revere","id":15325461,"avatar_url":"https://avatars2.githubusercontent.com/u/15325461?v=4","gravatar_id":"","url":"https://api.github.com/users/chalmers-revere","html_url":"https://github.com/chalmers-revere","followers_url":"https://api.github.com/users/chalmers-revere/followers","following_url":"https://api.github.com/users/chalmers-revere/following{/other_user}","gists_url":"https://api.github.com/users/chalmers-revere/gists{/gist_id}","starred_url":"https://api.github.com/users/chalmers-revere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chalmers-revere/subscriptions","organizations_url":"https://api.github.com/users/chalmers-revere/orgs","repos_url":"https://api.github.com/users/chalmers-revere/repos","events_url":"https://api.github.com/users/chalmers-revere/events{/privacy}","received_events_url":"https://api.github.com/users/chalmers-revere/received_events","type":"Organization","site_admin":false},"repo":{"id":64846989,"name":"opendlv.core","full_name":"chalmers-revere/opendlv.core","owner":{"login":"chalmers-revere","id":15325461,"avatar_url":"https://avatars2.githubusercontent.com/u/15325461?v=4","gravatar_id":"","url":"https://api.github.com/users/chalmers-revere","html_url":"https://github.com/chalmers-revere","followers_url":"https://api.github.com/users/chalmers-revere/followers","following_url":"https://api.github.com/users/chalmers-revere/following{/other_user}","gists_url":"https://api.github.com/users/chalmers-revere/gists{/gist_id}","starred_url":"https://api.github.com/users/chalmers-revere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chalmers-revere/subscriptions","organizations_url":"https://api.github.com/users/chalmers-revere/orgs","repos_url":"https://api.github.com/users/chalmers-revere/repos","events_url":"https://api.github.com/users/chalmers-revere/events{/privacy}","received_events_url":"https://api.github.com/users/chalmers-revere/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/chalmers-revere/opendlv.core","description":"HW/SW interfaces for OpenDLV","fork":false,"url":"https://api.github.com/repos/chalmers-revere/opendlv.core","forks_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/forks","keys_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/teams","hooks_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/hooks","issue_events_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/issues/events{/number}","events_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/events","assignees_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/assignees{/user}","branches_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/branches{/branch}","tags_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/tags","blobs_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/git/refs{/sha}","trees_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/statuses/{sha}","languages_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/languages","stargazers_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/stargazers","contributors_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/contributors","subscribers_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/subscribers","subscription_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/subscription","commits_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/commits{/sha}","git_commits_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/git/commits{/sha}","comments_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/comments{/number}","issue_comment_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/issues/comments{/number}","contents_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/contents/{+path}","compare_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/merges","archive_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/downloads","issues_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/issues{/number}","pulls_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/pulls{/number}","milestones_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/milestones{/number}","notifications_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/labels{/name}","releases_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/releases{/id}","deployments_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/deployments","created_at":"2016-08-03T13:11:01Z","updated_at":"2016-11-02T11:00:28Z","pushed_at":"2017-09-18T12:01:27Z","git_url":"git://github.com/chalmers-revere/opendlv.core.git","ssh_url":"git@github.com:chalmers-revere/opendlv.core.git","clone_url":"https://github.com/chalmers-revere/opendlv.core.git","svn_url":"https://github.com/chalmers-revere/opendlv.core","homepage":"","size":9647,"stargazers_count":1,"watchers_count":1,"language":"AGS Script","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":7,"forks":2,"open_issues":7,"watchers":1,"default_branch":"master"}},"base":{"label":"chalmers-revere:pre-release","ref":"pre-release","sha":"1ca35e7582e445469c662834694985d1b662fb04","user":{"login":"chalmers-revere","id":15325461,"avatar_url":"https://avatars2.githubusercontent.com/u/15325461?v=4","gravatar_id":"","url":"https://api.github.com/users/chalmers-revere","html_url":"https://github.com/chalmers-revere","followers_url":"https://api.github.com/users/chalmers-revere/followers","following_url":"https://api.github.com/users/chalmers-revere/following{/other_user}","gists_url":"https://api.github.com/users/chalmers-revere/gists{/gist_id}","starred_url":"https://api.github.com/users/chalmers-revere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chalmers-revere/subscriptions","organizations_url":"https://api.github.com/users/chalmers-revere/orgs","repos_url":"https://api.github.com/users/chalmers-revere/repos","events_url":"https://api.github.com/users/chalmers-revere/events{/privacy}","received_events_url":"https://api.github.com/users/chalmers-revere/received_events","type":"Organization","site_admin":false},"repo":{"id":64846989,"name":"opendlv.core","full_name":"chalmers-revere/opendlv.core","owner":{"login":"chalmers-revere","id":15325461,"avatar_url":"https://avatars2.githubusercontent.com/u/15325461?v=4","gravatar_id":"","url":"https://api.github.com/users/chalmers-revere","html_url":"https://github.com/chalmers-revere","followers_url":"https://api.github.com/users/chalmers-revere/followers","following_url":"https://api.github.com/users/chalmers-revere/following{/other_user}","gists_url":"https://api.github.com/users/chalmers-revere/gists{/gist_id}","starred_url":"https://api.github.com/users/chalmers-revere/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chalmers-revere/subscriptions","organizations_url":"https://api.github.com/users/chalmers-revere/orgs","repos_url":"https://api.github.com/users/chalmers-revere/repos","events_url":"https://api.github.com/users/chalmers-revere/events{/privacy}","received_events_url":"https://api.github.com/users/chalmers-revere/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/chalmers-revere/opendlv.core","description":"HW/SW interfaces for OpenDLV","fork":false,"url":"https://api.github.com/repos/chalmers-revere/opendlv.core","forks_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/forks","keys_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/keys{/key_id}","collaborators_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/teams","hooks_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/hooks","issue_events_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/issues/events{/number}","events_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/events","assignees_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/assignees{/user}","branches_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/branches{/branch}","tags_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/tags","blobs_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/git/refs{/sha}","trees_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/git/trees{/sha}","statuses_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/statuses/{sha}","languages_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/languages","stargazers_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/stargazers","contributors_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/contributors","subscribers_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/subscribers","subscription_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/subscription","commits_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/commits{/sha}","git_commits_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/git/commits{/sha}","comments_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/comments{/number}","issue_comment_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/issues/comments{/number}","contents_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/contents/{+path}","compare_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/compare/{base}...{head}","merges_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/merges","archive_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/downloads","issues_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/issues{/number}","pulls_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/pulls{/number}","milestones_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/milestones{/number}","notifications_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/labels{/name}","releases_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/releases{/id}","deployments_url":"https://api.github.com/repos/chalmers-revere/opendlv.core/deployments","created_at":"2016-08-03T13:11:01Z","updated_at":"2016-11-02T11:00:28Z","pushed_at":"2017-09-18T12:01:27Z","git_url":"git://github.com/chalmers-revere/opendlv.core.git","ssh_url":"git@github.com:chalmers-revere/opendlv.core.git","clone_url":"https://github.com/chalmers-revere/opendlv.core.git","svn_url":"https://github.com/chalmers-revere/opendlv.core","homepage":"","size":9647,"stargazers_count":1,"watchers_count":1,"language":"AGS Script","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":7,"forks":2,"open_issues":7,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/chalmers-revere/opendlv.core/pulls/108"},"html":{"href":"https://github.com/chalmers-revere/opendlv.core/pull/108"},"issue":{"href":"https://api.github.com/repos/chalmers-revere/opendlv.core/issues/108"},"comments":{"href":"https://api.github.com/repos/chalmers-revere/opendlv.core/issues/108/comments"},"review_comments":{"href":"https://api.github.com/repos/chalmers-revere/opendlv.core/pulls/108/comments"},"review_comment":{"href":"https://api.github.com/repos/chalmers-revere/opendlv.core/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/chalmers-revere/opendlv.core/pulls/108/commits"},"statuses":{"href":"https://api.github.com/repos/chalmers-revere/opendlv.core/statuses/f805d4490719edd9249215babffccc8cadf87a47"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"chrberger"}}