티스토리 뷰

IT/ROS programming

ROS C++ 기초다지기

긍정탁 2018. 2. 8. 11:05

시뮬레이션 로봇 : 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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31