티스토리 뷰
시뮬레이션 로봇 : Turtlebot
강의를 통해서 배울 내용 :
1. ROS 프로그램 구조화 및 실행
2. C++기반을 통한 기본 ROS 프로그램 생성
3. 기본 ROS의 개념들 (노드화 , 매개 변수 , 환경 변수 등등)
ROS 프로그램을 통하여 간단하게 로봇을 움직여 보자!
먼저 벽앞에 터틀봇이 놓여 있다.
$ roslaunch turtlebot_teleop keyboard_teleop.launch
로봇을 원격으로 조종하기 위한 명령어이다.
로봇을 위와 같은 키입력으로 원격 제어 할수 있다.
로봇을 (,) 키 입력을 통해 뒤로 후진 시켜 벽에서 멀리 떨어 트린 모습이다.
위와 같은 과정에서 우리가 사용한 명령어 roslaunch에 대해 알 필요가 있다.
roslaunch의 명령어 구조 : roslaunch <package_name> <launch_file>
두개의 매개 변수로 구성되어있는데 , 첫번 째 매개변수는 실행 파일이 포함된 패키지의 이름을 기입해주면 된다. 두번째 매개 변수는 패키지 내부에 저장되는 시작 파일의 이름을 넣어주면 된다.
그렇다면 매개변수에 지정되는 패키지파일은 무엇을 의미할까? 여기서 더 자세히 들여다 볼 필요가 있다.
ROS는 기본적으로 패키지를 사용하여 프로그램을 구성한다. 그 안에는 cpp 파일, python 파일, configuration 파일 , compilation 파일, launch 파일, 마지막으로 매개 변수를 담는 파일등이 있다.
패키지가 담고 있는 파일을 살펴보면 ,
launch 폴더 : 실행 파일을 담고 있다.
src 폴더 : 소스 파일을 담고있다. (cpp나 python과 같은)
CMakeLists.txt : 컴파일을 위한 cmake의 규칙들이 담겨있다.
package.xml : 패키지 정보 와 의존성들을 담고있다.
ROS에서 제공하는 roscd라는 명령어는 ROS 패키지로 접근할때 사용한다. 따라서 구조는 다음과 같다.
$ roscd <package_name>
해당하는 package_name의 이름을 갖고있는 패키지 경로로 이동한다.
그렇다면 맨 앞에서 실행했던 패키지가 있는 경로로 들어가보자
roscd 명령어로 turtlebot_teleop라는 패키지로 진입하여 ls 명령어로 패키지가 포함하는 파일들을 열거해보았다.
이 패키지 역시 마찬가지로 launch 폴더 , package.xml, CMakeLists.txt, src 폴더등을 포함하는걸 확인할수 있었다.
실행할 모든 ROS 프로그램은 패키지로 구성되어야 하고, 작성한 모든 ROS 프로그램 역시 패키지로 구성되어야 한다. 패키지는 ROS프로그램의 주요 system임을 명심하자
한층 더 나아가 런치 파일을 살펴보자
turtlebot_teleop 패키지안에 launch파일을 cat 명령어를 통해서 확인해본 모습이다.
launch 파일에는 매개 변수를 설정하기 위한 몇가지 node tag들이 있다.
먼저, <launch> tag안에는 모든 launch file들이 담겨있다. <node> tag에는 매개변수를 지정한다.
그 매개 변수들은 다음과 같다.
pkg = "package_name"# 실행할 ROS 프로그램 코드가 들어있는 패키지 이름
type = "cpp_executable_name"# 실행하고자 하는 cpp 실행 파일의 이름
name = "node_name"# c ++ 파일을 시작할 ROS 노드의 이름
output = "type_of_output"# 어떤 채널을 통해 프로그램의 출력물을 출력 할 것인지 정한다.
패키지 만들기
패키지를 만들려면 catkin workspace라고 하는 곳에서 작업을 해야한다.
catkin workspace는 ROS에서 사용할수 있도록 자신의 ROS 패키지가 있어야하는 하드 디스크 디렉토리이다.
일반적으로 catkin workspace 디렉토리는 catkin_ws로 이름이 지정 되어있다.
catkin_ws로 진입해보자
catkin_ws로 경로가 설정된 모습이다. 이 workspace에는 src라는 폴더가 있다. 이 폴더에는 생성된 모든 패키지가 포함된다. src 로 이동해보자
src 안에 들어가보니 CMakeLists.txt 와 my_package 2개의 파일이 있는걸 확인할수 있었다.
간단하게 패키지 파일을 만들어 보자
$ catkin_create_pkg my_package roscpp
catkin workspace 안에서 패키지를 생성하는 명령어이다.
catkin_create_pkg <package_name> <package_dependecies>
package_name : 패키지의 이름
package_dependecies : 패키지가 의존하는 다른 ros 패키지의 이름
패키지가 성공적으로 만들어진 모습을 확인할수 있다.
패키지가 성공적으로 만들어 졌는지 확인해보자. 확인 하기 위해선 몇가지 ROS 명령어를 사용할건데 한번 살펴보도록 하자.
$ rospack list : ros 시스템에 있는 모든 패키지 목록을 보여준다.
$ rospack list | grep my_package : ros 시스템에 있는 모든 패키지의 my_package라는 이름을 포함된것만을 출력한다.
$ roscd my_package : 앞에서 언급했듯이 my_package라는 패키지로 경로를 이동한다.
그냥 rospack list만 입력했을경우 수많은 패키지들의 이름이 출력되기때문에 확인하기 어렵다
그래서 rospack list | grep my_package을 해주면 아래와 같이 패키지가 잘만들어진것을 한눈에 확인할수 있다.
이제 패키지를 만들었으니 컴파일을 해보도록 하자
패키지 컴파일 명령어 : $ catkin_make
컴파일이 잘된 모습을 확인할수 있다.
'IT > ROS programming' 카테고리의 다른 글
ROS 기초 (0) | 2018.02.07 |
---|---|
Pure pursuit algorithm (0) | 2018.01.17 |