This commit is contained in:
2026-07-24 10:27:56 +07:00
parent c6868282a9
commit dcfc5809cc
9 changed files with 176 additions and 20 deletions

View File

@@ -35,10 +35,11 @@ source devel/setup.bash
roslaunch depth_local_costmap_noetic_test depth_local_costmap_test.launch
```
Launch mặc định mở RViz với config sẵn. Nếu chỉ muốn chạy node không mở GUI:
Launch mặc định chạy headless để số CPU phản ánh pipeline, không tính RViz.
Muốn mở GUI:
```bash
roslaunch depth_local_costmap_noetic_test depth_local_costmap_test.launch rviz:=false
roslaunch depth_local_costmap_noetic_test depth_local_costmap_test.launch rviz:=true
```
Nếu robot dùng `base_footprint`:
@@ -57,10 +58,10 @@ Không bật `publish_odom_tf` nếu đã có node khác publish TF này.
Point cloud marking `/camera/depth/points_proc` được downsample bằng PCL
`VoxelGrid` trước khi feed vào `robot_costmap_2d`, giống hướng trong
`amr_control/src/sensor_converter.cpp`. Mặc định leaf size là `0.10 m`:
`amr_control/src/sensor_converter.cpp`. Mặc định leaf size là `0.05 m`:
```bash
roslaunch depth_local_costmap_noetic_test depth_local_costmap_test.launch depth_cloud_voxel_leaf_size:=0.10
roslaunch depth_local_costmap_noetic_test depth_local_costmap_test.launch depth_cloud_voxel_leaf_size:=0.05
```
Nếu muốn so sánh full cloud:
@@ -94,6 +95,68 @@ Các topic RViz giống hướng `amr_control::AmrPublisher`:
- `/local_costmap/costmap` kiểu `nav_msgs/OccupancyGrid`
- `/local_costmap/costmap/footprint` kiểu `geometry_msgs/PolygonStamped`
## Cấu hình CPU/10 Hz mặc định
Các mặc định dùng cho một Intel D435i:
- `robot_depth_image_proc`: chỉ một camera, xử lý tối đa `15 Hz`, RViz tắt.
- marking cloud: `filter_decimation=4`, sau đó PCL `VoxelGrid=0.05 m`.
- clearing depth: xử lý tối đa `15 Hz`.
- local costmap: update `10 Hz`, publish OccupancyGrid `5 Hz`.
- frustum clearing: `pixel_step=2`, `column_cover_distance=0.2 m`.
Chạy hai pipeline headless:
```bash
roslaunch robot_depth_image_proc depth_image_proc_gazebo.launch \
multi_cam:=false processing_rate:=15.0 rviz:=false
roslaunch depth_local_costmap_noetic_test depth_local_costmap_test.launch \
local_costmap_update_frequency:=10.0 \
depth_clearing_processing_rate:=15.0 \
depth_cloud_voxel_leaf_size:=0.05 \
frustum_clearing_pixel_step:=2 \
column_cover_distance:=0.2 \
rviz:=false
```
`processing_rate<=0` hoặc `depth_clearing_processing_rate<=0` sẽ tắt rate
limit để A/B test. Camera vẫn có thể publish depth raw ở 30 Hz; chỉ các hot
path copy/filter/project/clearing được giới hạn.
Mỗi 5 giây, log `depth performance``Depth clearing performance` báo
input Hz, processed Hz, số frame bỏ qua, thời gian trung bình và max. Log
`Costmap performance``avg/p95/p99_cycle_ms`.
Đo trên NUC trong ít nhất 60 giây sau warm-up:
```bash
rostopic hz /camera/depth/image_raw
rostopic hz /camera/depth/points_proc
rostopic hz /local_costmap/costmap
pidstat -p "$(pgrep -d, -f 'depth_image_proc_node|depth_local_costmap_noetic_test_node')" 1
```
Mục tiêu:
- `/camera/depth/points_proc`: `14-16 Hz`.
- costmap update thực tế: ít nhất `9.5 Hz`, tính từ `cycles` trong log
`Costmap performance` chia cho cửa sổ 5 giây.
- `/local_costmap/costmap`: khoảng `5 Hz` vì OccupancyGrid được publish riêng.
- `p95 < 80 ms`, `p99 < 100 ms`.
- chạy headless: từng node không quá khoảng `30% CPU`, tổng không quá khoảng
`60%` theo thang `htop``100%` là một logical CPU.
`column_cover_distance=0.2 m` là giá trị clearing mạnh đã giải quyết ghost
trong bài test hiện tại. Nó không phải giá trị suy ra an toàn từ vertical FOV;
phải test lại với vật cản thật cao đến `1.0 m` trước khi đưa lên robot chạy.
Nếu cần baseline hình học bảo thủ, dùng `column_cover_distance:=-1.0`.
Chỉ chuyển sang pha chia sẻ ảnh depth đã edge-filter giữa hai node nếu
`depth_image_proc_node` vẫn vượt mục tiêu CPU. Chỉ thay PCL `VoxelGrid` bằng
downsampler trực tiếp `PointCloud2` nếu profiler xác nhận PCL còn là hotspot;
hai thay đổi đó cần benchmark NUC sau bước hiện tại để giữ nguyên semantics.
Config local chính của package này dùng cùng kiểu tách file với
`pnkx_nav_core/config`: