Octomap 이란?
- 많은 매핑 방법론 중 하나
- 사전 정보 없이 임의의 환경을 3차원으로 모델링할 수 있는 방법론이다. 센서 정보를 통해, 빈 공간에 대한 점유 확률을 계산하고, 점유 확률이 일정 값(threshold) 이상 커질 경우 해당 영역이 점유되었다고 보는 것이다. Octomap 의 특징은 계산량을 줄이기 위해 Octree 를 사용한 것이다. 모든 격자를 미리 나눠두지 않고, 큰 영역에서 구체화되는 것에 맞춰 격자를 추가로 나누는 방법이다. (자세한 설명은 논문을 참조하자. 여기서는 단순히 코드를 사용하는 방법만 리뷰한다.) - 링크 : https://octomap.github.io
- 단순히 pointcloud 만 갖고는 할 수 있는 것이 별로 없다. Octomap 과 같은 매핑을 통해 장애물 / 벽 등의 모델링을 수행하는 것이 필요하다.
- RotorS + Octomap 을 이용해서 한 번 매핑을 해보자.
- 참조 링크 : https://dev.px4.io/v1.11_noredirect/en/simulation/gazebo_octomap.html
1) Octomap 설치하기
- 아래는 Octomap library 설치 명령어이다. (이번에도 Ubuntu 20.04 + ROS Noetic 이 기준)
sudo apt-get install ros-noetic-octomap ros-noetic-octomap-mapping
rosdep install octomap_mapping
rosmake octomap_mapping
- octomap_tracking_server.launch를 찾아서 열어야 한다. 아래 2줄을 실행하면 열린다.
export EDITOR='gedit'
rosed octomap_server octomap_tracking_server.launch
- From: 에 해당하는 두 줄을 찾아서 To: 와 같이 변경해준다.
From:
<param name="frame_id" type="string" value="map" />
...
<!--remap from="cloud_in" to="/rgbdslam/batch_clouds" /-->
to:
<param name="frame_id" type="string" value="world" />
...
<remap from="cloud_in" to="/firefly/vi_sensor/camera_depth/depth/points" />
2) 실행해보기
- 실행해야 하는 코드 3개
roslaunch rotors_gazebo mav_hovering_example_with_vi_sensor.launch mav_name:=firefly
rviz
roslaunch octomap_server octomap_tracking_server.launch
- 이렇게만 하면 RVIZ 상에서 오류가 발견된다. 따라서 아래 코드를 추가로 실행 해줘야 한다.
rosrun tf2_ros static_transform_publisher 0 0 0 0 0 0 1 /firefly/vi_sensor/camera_depth_optical_center_link camera_depth_optical_center_link
- 이렇게 매번 실행하는게 귀찮다면, mav_hovering_example_with_vi_sensor.launch 를 열어서 아래와 같이 코드를 추가해준다. <node pkg = "tf" ~~ 에 해당하는 줄만 새로 추가한 것이고, 나머지는 추가하는 위치를 위해 같이 표시하였다.
...
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<node pkg="tf" type="static_transform_publisher" name="base_link_to_camera_tf" args="0 0 0 0 0 0 1 /firefly/vi_sensor/camera_depth_optical_center_link camera_depth_optical_center_link 10" />
</group>
</launch>
- 코드 실행화면
- 가제보 상에서 상단의 정육면체, 구, 원기둥 버튼을 이용해서 장애물을 추가해준다.
- RVIZ 상에서 Global Fixed Frame 을 world 로 바꾸고, Add/ by topic / occupied_cells_vis_array 라는 걸 추가하면 아래와 같이 매핑이 잘 된 것을 확인할 수 있다.
이러면, 매핑이 어느 정도 되는 것을 볼 수 있다. Octomap 은 고도가 높아질 수록 빨강 / 낮아질수록 보라색이 되도록 프로그래밍 되어 있다. 매핑 알고리즘을 만들거나, 코딩하는게 어렵다면 이렇게 미리 만들어진 것을 활용하는 방법도 있다.
끝~
'ROS' 카테고리의 다른 글
[ROS] Slamtec Mapper 사용 (0) | 2024.08.21 |
---|---|
[ros 설치 오류] Could NOT find random_numbers (0) | 2023.07.18 |
ROS 강의 - (8) Pointcloud, Pointcloud2에 대해 알아보기 (2) (0) | 2023.05.08 |
ROS 강의 - (7) Pointcloud, Pointcloud2에 대해 알아보기 (1) (0) | 2023.05.07 |
ROS 강의 - (6) TF 에 대해 알아보기 (0) | 2023.05.04 |