1.개요
윈도우즈에서 설정과 작업이 좀 어려웠다. 배우면서 기록을 남기는 과정이라 설정과 작업이 편리한 우분투에서 작업을 해본다. ROS에 대하여 좀 더 익숙해지고 잘 다루게 된다면 윈도우에서도 도전할 계획이다. 이 번 포스트는 아래 그림과 같은 gazebo의 turtlebo3_world의 지도를 만들어 본다.
2. SLAM으로 2D 지도 만들기
turtlebot3 패키지 설치 후에 다음을 실행한다.
> sudo apt install ros_foxy_nav*
> sudo apt install ros_foxy_turtlebo*
> ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
> ros2 run teleop_twist_keyboard teleop_twist_keyboard <= 키보드로 turtlebo3를 제어한다.
> ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
키보드 제어에 의해 터틀봇이 천천이 갈 수 있는 공간을 일주 하면서 지도를 실시간 작성하게 된다.
어느 정도 만족할 수준의 지도가 만들어 지면 현재 진행 중인 프로그램을 죽이지 말고 아래 명령어를 추가로
입력하여 지도를 파일로 저장한다. 2D Map을 만들 수 있다.
> ros2 run nav2_map_server map_saver_cli -f my_map
=> my_map.pgm my_map.yaml 두 개의 파일이 생성된다. my_map.pgm 은 이미지 파일이다.
이 지도를 이용하여 터틀봇을 navigation을 할 수 있다. 여기에서 navigation이라 함은 터틀봇의 현재 위치에서
임의의 공간을 지정하면 터틀 봇이 장애물을 피하면서 자동 주행하는 것을 말한다.
3. Gazebo plugun을 이용하여 2D/3D map 만들기
SLAM이 아닌 플러그을 만들어 지도를 작성해 보고자 한다.
https://medium.com/@arshad.mehmood/ros2-gazebo-world-map-generator-a103b510a7e5
> sudo apt install pcl-tools <== 필요한 패키지 설치하기
> sudo apt-get install libboost-dev libpcl-dev <== 필요한 패키지 설치하기
워크스페이스를 만들기 위해 폴더를 만들자.
> mkdir -p ros2_ws/src
> cd ros2_ws/src
소스 코드를 src 폴더에 다운받는다.
> git clone https://github.com/arshadlab/gazebo_map_creator.git
> cd .. <== 작업은 다시 위 폴더로 올라가서 한다.
> rosdep install --from-paths src --ignore-src -r -y
> colcon build --symlink-install
정상적으로 컴파일 되면 실행해 준다.
> source ./install/setup.bash
환경설정하기, 아래 명령어를 입력하여 환경설정을 한다. .bashrc 파일에 설정하는 것도 좋다.
export TURTLEBOT3_MODEL=waffle
export GAZEBO_MODEL_PATH=/opt/ros/foxy/share/turtlebot3_gazebo/models
플러그인으로 제작한 파일을 기존 다른 라이브러리 파일에 있는 곳에 복사해 주었다. (비추)
다양한 시도 끝에 결국 이 방법을 사용하였으나 추천하는 방법은 아닐 것이다.
> sudo cp ~/ros2_ws/install/gazebo_map_creator/lib/*.so /opt/ros/foxy/lib/.
> sudo cp ~/ros2_ws/install/gazebo_map_creator_interface/lib/*.so /opt/ros/foxy/lib/.
아래 gzserver.launch.py 파일을 수정(추가)한다.
> sudo vi /opt/ros/foxy/share/gazebo_ros/launch/gzserver.launch.py
아래 코드르 기존 유사 코드가 있는 부분에 추가한다.
_plugin_command2('libgazebo_map_creator'), ' ',
.....
DeclareLaunchArgument(
'libgazebo_map_creator', default_value='',
description='libgazebo_map_creator'
),
....
def _plugin_command2(arg):
py_cmd = PythonExpression('"-s libgazebo_map_creator.so"')
return py_cmd
이제 gazebo를 다시 실행할 것이다.
> ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
map을 저장한다. 아래 명령어를 입력하면 plugin_map.pgm plugin_map.yaml plugin_map.pcd 파일이 생성된다.
-r 옵션은 해상도로 0.5 미터(50cm)라는 의미이다.
> ros2 run gazebo_map_creator request_map.py -c '(-4.8,-4.5,0.03)(4.8,4.5,8.0)' -r 0.5 -f plugin_map
아래와 같이 -r 옵션을 0.01로 하면 해상도는 1cm로 높아지지만 시간이 많이 소요된다.
먼저 낮은 해상도에서 작업을 하고 성공하면 높은 해상도를 시도해 보는 것이 좋다.
> ros2 run gazebo_map_creator request_map.py -c '(-4.8,-4.5,0.03)(4.8,4.5,8.0)' -r 0.01 -f plugin2_map
pcd 맵 보기는 아래 명령을 이용한다.
> pcl_viewer plugin_map.pcd