# map_converter ## 役割 `map_converter` は `rogi_msgs/msg/Map` を `nav_msgs/msg/OccupancyGrid` に rasterize します。`emcl2` はこの grid から尤度場を作ります。 ## Interface | 種別 | 名前 | 型 / 内容 | | --- | --- | --- | | subscribe | `map` remap 後 `/raw_map` | `rogi_msgs/msg/Map` | | publish | `occupancy_grid` remap 後 `/map` | `nav_msgs/msg/OccupancyGrid` | | parameter | `resolution` | grid 解像度 {math}`\Delta` [m/cell] | ## Grid 定義 入力 map の bounding box を {math}`[x_{\min},x_{\max}]\times[y_{\min},y_{\max}]` とします。 ```{math} W=\left\lfloor\frac{x_{\max}-x_{\min}}{\Delta}\right\rfloor+1,\qquad H=\left\lfloor\frac{y_{\max}-y_{\min}}{\Delta}\right\rfloor+1 ``` world 座標から grid index への変換は次式です。 ```{math} i=\left\lfloor\frac{x-x_{\min}}{\Delta}\right\rfloor,\qquad j=\left\lfloor\frac{y-y_{\min}}{\Delta}\right\rfloor ``` 初期 cell 値は `0`、占有 cell は `100` です。 ## 線分 rasterize grid 上の始点を {math}`(i_0,j_0)`、終点を {math}`(i_1,j_1)` とします。 ```{math} d_i=|i_1-i_0|,\quad d_j=|j_1-j_0|,\quad s_i=\operatorname{sign}(i_1-i_0),\quad s_j=\operatorname{sign}(j_1-j_0) ``` Bresenham 型に誤差 {math}`e=d_i-d_j` を更新します。 ```{math} 2e>-d_j \Rightarrow e\leftarrow e-d_j,\ i\leftarrow i+s_i ``` ```{math} 2e