mirror of
https://github.com/introlab/rtabmap_ros.git
synced 2026-10-04 16:57:46 +08:00
rtabmap_sync tests and doc (#1454)
* rtabmap_sync tests and doc * Added some diagrams * cleanup some diagrams * fixing running tests in parallels
This commit is contained in:
@@ -44,6 +44,26 @@ Node(
|
||||
('odom', 'icp_odom')]),
|
||||
```
|
||||
|
||||
The deskewing and `icp_odometry` both measure motion against the `odom` frame, while the assembler takes the pose from the `icp_odom` topic instead; the assembled cloud, not the raw sweep, is what `rtabmap` stores:
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
LIDAR["lidar driver"]
|
||||
DESKEW["lidar_deskewing<br>fixed_frame_id: odom"]
|
||||
ICP["icp_odometry<br>guess_frame_id: odom"]
|
||||
ASM["point_cloud_assembler<br>fixed_frame_id: ''"]
|
||||
MAP["rtabmap"]
|
||||
DESKEWED(["deskewed cloud"])
|
||||
ICPODOM(["icp_odom"])
|
||||
LIDAR -->|points| DESKEW
|
||||
DESKEW --> DESKEWED
|
||||
DESKEWED -->|scan_cloud| ICP
|
||||
DESKEWED -->|cloud| ASM
|
||||
ICP --> ICPODOM
|
||||
ICPODOM -->|odom| ASM & MAP
|
||||
ASM -->|assembled_cloud| MAP
|
||||
```
|
||||
|
||||
Note `fixed_frame_id: ''`. Clearing it switches the node from TF to the `odom` topic, pairing each cloud with the exact odometry message that goes with it rather than an interpolated TF lookup — see [Where the poses come from](#where-the-poses-come-from). Feeding the result to `rtabmap` as `scan_cloud` means the assembled cloud, not the raw sweep, is what gets stored.
|
||||
|
||||
### Widening a narrow field of view
|
||||
@@ -62,10 +82,24 @@ Node(
|
||||
remappings=[('cloud', '/camera/scan/deskewed')]),
|
||||
```
|
||||
|
||||
Here the pose comes from the robot's wheel odometry, through the `odom` frame in TF. Nothing is being deskewed — `lidar_deskewing` is in the chain purely because this node takes `PointCloud2` and `depthimage_to_laserscan` emits a `LaserScan`:
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
D2S["depthimage_to_laserscan"]
|
||||
CONV["lidar_deskewing<br>LaserScan → PointCloud2"]
|
||||
ASM["point_cloud_assembler<br>circular_buffer<br>max_clouds: 20<br>frame_id: base_link<br>fixed_frame_id: odom"]
|
||||
MAP["rtabmap"]
|
||||
D2S -->|input_scan| CONV
|
||||
CONV -->|cloud| ASM
|
||||
ASM -->|assembled_cloud| MAP
|
||||
```
|
||||
|
||||
`circular_buffer` is what makes this work as a live input: the window rolls, so every incoming scan produces a full assembled cloud rather than one per twenty. `linear_update` and `angular_update` stop a stationary robot from filling the buffer with twenty copies of the same view, which would leave it with nothing but the current scan the moment it moved off again.
|
||||
|
||||
The cloud goes to `rtabmap` as `scan_cloud`, with `scan_cloud_is_2d` set since the points all came from one row of pixels.
|
||||
|
||||
|
||||
## Subscribed Topics
|
||||
|
||||
| Topic | Type | Description |
|
||||
|
||||
Reference in New Issue
Block a user