Mobile 로봇 Simulation

Gazebo Simulator 패키지 생성

3D 환경 만들기

토픽 결과물: 시뮬레이션에 쓰일 3D 환경이 만들어 집니다.

 

이번 토픽에서 사용된 Ubuntu 버전 및 ROS 버전은 아래와 같습니다.

  • Ubuntu 14.04.3 64bit
  • ROS Indigo

패키지 생성 설명 동영상

패키지 생성

패키지 이름은 mobile_robot_sim으로 합니다.

  • catkin workspace에 패키지를 생성합니다. 본 토픽에서는 ~/catkin_ws가 workspace 위치입니다. workspace밑의 src폴더에서 아래 명령을 실행합니다.
$ catkin_create_pkg mobile_robot_sim

  • 소스 파일을 생성합니다. mobile_robot_sim 폴더 밑에서 아래와 같이 실행합니다.
$ roscd mobile_robot_sim
$ mkdir src
$ touch src/mobile_robot_sim.cpp
$ touch src/utils.hpp
$ mkdir launch
$ roscd ~/catkin_ws
$ catkin_make

roscd로 패키지 이동이나 탭키를 눌렀을 때 패키지가 나타나지 않는다면 아래와 같이 실행합니다.

$ source ~/catkin_ws/devel/setup.bash

우선 아래와 같이 mobile_robot_sim.cpp파일에 main 함수를 만듭니다.

// mobile_robot_sim.cpp
int main( int argc, char **argv )
{
  return 0;
}

  • package.xml 설정 생성한 패키지의 정보가 들어있는 파일로서, 빌드할 때 필요한 의존 패키지, 실행할 때 필요한 의존 패키지등을 설정합니다. 먼저 패키지 이름이 아래와 같이 설정되어 있는지 확인합니다. 자세한 내용은 설명을 참고하세요.
<package>
  <name>mobile_robot_sim</name>
  <version>0.1.0</version>

위에서 version을 0.1로 하면 빌드할 때, version convention 위배라는 에러 메시지가 발생할 수 있습니다. 위 처럼 x.x.x 형식을 따르도록 합니다. 다음으로, 빌드시에 필요한 catkin 의존 패키지를 설정합니다.

  <build_depend>roscpp</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_depend>roslib</build_depend>
  <build_depend>sensor_msgs</build_depend>
  <build_depend>tf2</build_depend>
  <build_depend>tf2_ros</build_depend>
  <build_depend>tf2_sensor_msgs</build_depend>
  <build_depend>actionlib</build_depend>
  <build_depend>move_base</build_depend>

마지막으로 실행시에 필요한 의존 패키지를 설정합니다.

  <run_depend>roscpp</run_depend>
  <run_depend>std_msgs</run_depend>
  <run_depend>actionlib</run_depend>
  <run_depend>move_base</run_depend>
  <run_depend>sensor_msgs</run_depend>
  <run_depend>tf2</run_depend>
  <run_depend>tf2_ros</run_depend>
  <run_depend>tf2_sensor_msgs</run_depend>

  • CMakeLists.txt 설정
    mobile_robot_sim 패키지 밑에 CMakeLists.txt를 수정합니다.
    먼저, find_package(catkin REQUIRED)라고 되어 있는 부분에 아래와 같이 필요한 package를 추가합니다. 이 부분은 빌드를 할 때 필요한 의존 CMake 패키지들로서, 의존 패키지 각각을 찾습니다. 이 때, COMPONENTS라고 선언하게 되면 의존 패키지들을 catkin의 컴포넌트들로 만들어 주게 됩니다. 따라서, 의존 패키지들을 개별적으로 find_package() 하지 않아도 되므로 편리합니다. 참고로 find_package( some_package )를 하게 되면, 해당 패키지의 include 디렉터리, library 등과 관련된 환경변수를 생성합니다. 특히 COMPOENENTS로 선언하게 되면, 환경변수들이 catkin_ 접두어가 붙게 되어 모든 환경변수를 하나의 변수로 가지게 되어 편리합니다. CMakeLists.txt 각 부분의 보다 자세한 설명을 참고하세요. 각 패키지가 뭘 의미하는지는 ROS 위키에서 찾아볼 수 있습니다.
find_package( catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
  tf2
  tf2_ros
  tf2_sensor_msgs
  roslib
  actionlib
  move_base
)

그 다음으로 Boost 관련 패키지를 찾습니다. 여기서는 boost의 thread를 의존 패키지로 찾습니다.

find_package( Boost REQUIRED COMPONENTS thread )

그 다음으로 catkin_package( ... ) 부분을 아래와 같이 수정합니다. catkin_package()은 빌드에 필요한 CMake 매크로를 정의하는 것입니다. 이것은 cakin이 생성하며, catkin 관련한 정보를 담고 있습니다. 빌드하는 패키지의 include, libraries 디렉터리, 의존 패키지 등을 설정합니다. 이것들은 빌드하는 패키지의 CMake 파일들을 만드는데 사용됩니다. 주의점은 이 부분은 CMakeLists.txt에서 add_library()나 add_executable() 보다 위쪽에 위치해야 하는 것입니다.

catkin_package(
#  INCLUDE_DIRS include - 빌드후 생성되는 패키지의 include 경로
#  LIBRARIES mobile_robot_sim - 빌드하고자 하는 패키지가 생성하는 library들
  CATKIN_DEPENDS roscpp std_msgs sensor_msgs tf2 tf2_ros # 의존 catkin packages
#  DEPENDS opencv  - caktin아닌 의존 packages
)

디버그용 메시지를 출력하기 위한 옵션을 설정합니다. 옵션이 1이면 메시지가 출력됩니다. 나중에 소스코드에 반영시켜줘야 합니다. 

## set debug options
ADD_DEFINITIONS( -D__DEBUG__=1 )

아래와 같이 코드상에 입력하면 해당 구문이 실행됩니다.

#if __DEBUG__
ROS_WARN( "This will not be printed unless the __DEBUG__ flag is set" );
#endif

그 다음으로 빌드하고자 하는 소스 파일 및 생성되는 실행 파일 이름을 설정합니다

add_executable( mobile_robot_sim_node src/mobile_robot_sim.cpp src/utils.hpp )
여기서는 실행파일이름이 mobile_robot_sim_node 이다.

마지막으로 실행파일에서 linking 라이브러리를 설정합니다.

target_link_libraries( mobile_robot_sim_node
   ${catkin_LIBRARIES}
)

댓글

댓글 본문
작성자
비밀번호
버전 관리
이타인
현재 버전
선택 버전
graphittie 자세히 보기