# 点云处理

容器内外传递文件：

```shell
docker cp 4d3bc3433f4e:/home/sentry_ws/test_map.png /home/scurm/Downloads/
```

```shell
docker cp /home/scurm/Downloads/test_map.png 4d3bc3433f4e:/home/sentry_ws/
```

## CloudCompare

[下载链接](https://cloudcompare-org.danielgm.net/release/
)

1. 打开文件：File -> Open （.pcd类型）
2. 鼠标左键旋转，右键平移，单击选中
3. 滤波去除离群点：Tools -> Clean -> SOR filter
    - Number of points to use for mean distance estimation ：用于估计平均距离的点数，判断一个点是否为离群点，较小时容易移除有效数据点
    - Standard deviation multiplier threshold (nSigma)：标准差乘数阈值，通常取值为1/2/3，对应不同的置信水平,较大时保留更多的点
    - 设置合适的参数 (25,1 作为参考) 然后 apply
4. 在左侧面板选中上一步处理得到的点云, 点击 tools->segmentation->Label Connected Components, 设置合适的参数然后 apply
5. 上一步会生成一系列点云，在其中选中想要的，删除不要的，合并他们
   - 感觉直接cut更好用
6. 选中合并好的点云，点击 ``tools->Other->Remove duplicate points``, 每 0.01-0.1m 保留一个点，减小点云的大小
7. 选中处理完的点云，点击 file->save as, 选择 .pcd format，保存

## 地形分析
1. 在``autonomous_exploration_development_environment/terrain_analysis_ext/launch/terrain_analysis_ext_offline.launch``中将点云路径改成处理好的点云
2. 
    ``` shell
    ros2 launch terrain_analysis_ext terrain_analysis_ext_offline.launch
    ```
3. 打开 rqt 选择 ``plugins->configuration->dynamic reconfigure``, 调整terrain_analysis节点的参数，直到坡面可以被正确分析为可通行，墙面可以被分析为不可通行(可通行区域为绿色，不可通行区域为红色)
4. 保存无残影的2D导航地图
    ```bash
    ros2 run nav2_map_server map_saver_cli -t /projected_map -f test_map --fmt png
    ```
    - 这个有问题 用ps吧

## 决策标点
1. 
    ```shell
    ros2 launch sentry_bringup navigation.launch.py
    ```
2. 
    ```shell
    ros2 topic echo /clicked_point
    ```
3. 在出现的2D地图中，用publish point选点，终端会打印对应的xyz坐标