카테고리 없음

우분투 ROS2 Foxy turtlebot3_world의 2D/3D 지도작성

Wood Pecker 2023. 12. 17. 16:52

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

반응형