워크 스페이스 > src폴더 > 패키지 > src폴더 > 소스코드
다음과 같은 구조입니다.
따라서 워크 스페이스 경로에서 rosrun [패키지 이름][실행파일 이름] 명령을 패키지 이름과, 소스코드를 컴파일한 실행 파일 이름으로 실행할 수 있습니다.
~$ mkdir catkin_ws
~$ cd catkin_ws
~/catkin_ws$ mkdir src
~/catkin_ws$ cd src
catkin_create_pkg [패키지 이름][의존성 패키지1] [의존성 패키지2] ...
ROS 사용을 위한 의존성 패키지는 roscpp입니다.
~/catkin_ws/src$ catkin_create_pkg basic_tutorial roscpp
~/catkin_ws/src$ cd basic_tutorial
패키지로 이동하면 파일과 폴더들이 설치되어 있는데, src 폴더로 이동해 cpp 파일을 생성해 소스 코드를 작성합니다.
~/catkin_ws/src/basic_tutorial$ cd src
~/catkin_ws/src/basic_tutorial/src$ nano basic.cpp
#include <ros/ros.h> //ROS 라이브러리 사용을 위한 헤더파일
int main(int argc, char **argv)
{
ros::init(argc, argv, "basic_node"); //basic_node라는 노드 이름 정의
ros::NodeHandle n;
ros::Rate loop_rate(60); //노드가 몇 Hz로 동작할 것인지 정의
while (ros::ok()) //ros::ok()는 노드 종료 시 False, 그 외에는 True
{
ROS_INFO("Hello world!");
ros::spinOnce();
loop_rate.sleep(); //정의한 Hz가 될 때까지 기다렸다가 넘어감
}
return 0;
}
컴파일러로 CMake를 사용하기 위해, CMakeLists.txt에 작성한 cpp 파일의 정보를 등록해야 합니다.
이전 경로인 패키지로 이동해 CMakeLists.txt를 열어줍니다.
~/catkin_ws/src/basic_tutorial/src$ cd ..
~/catkin_ws/src/basic_tutorial$ nano CMakeLists.txt
파일을 열고 아래로 내려가 116번째줄 부분
include_directories(
# include
${catkin_INCLUDE_DIRS}
)
위 코드 아래에 소스 코드 컴파일을 위한 부분을 작성해줍니다.
add_executable(basic_node src/basic.cpp)
target_link_libraries(basic_node ${catkin_LIBRARIES})
add_executable은 패키지의 소스코드 상대경로(src/basic.cpp)를 컴파일해, basic_node라는 실행파일을 생성합니다.
- rosrun [패키지 이름][실행파일 이름] 명령에서사용됩니다.
- 소스코드 작성 시 ros::init(argc, argv, "basic_node");에서 정의한 node 이름과 동일하게 사용하는 것이 권장됩니다.
target_link_libraries는 실행파일(basic_node)에 링크될 라이브러리(${catkin_LIBRARIES})를 지정합니다.
- ROS에서 사용하는 빌드시스템이 캣킨(Catkin)입니다.
cd ..을 두번 입력해 워크 스페이스로 경로로 이동합니다.
catkin_make 명령어로 컴파일 해줍니다.
catkin_make 명령은 반드시 워크 스페이스 경로에서 입력해야 합니다.
~/catkin_ws$ catkin_make
다른 터미널창에서 roscore를 실행합니다.
~/catkin_ws$ roscore
원래의 터미널로 돌아와, 컴파일로 만들어진 devel폴더의 setup.bash를 source함으로, 패키지 경로를 환경설정에 등록 할 수 있습니다.
~/catkin_ws$ source devel/setup.bash
이제는 rosrun 명령에서 Tab으로 자동완성이 되고 실행할 수 있습니다.
~/catkin_ws$ rosrun basic_tutorial basic_node
만약, 자동완성이 안된다면 다음 명령을 입력하고 rosrun을 해봅니다.
- ROS 패키지 찾기
$ rospack find [패키지 이름]
~/catkin_ws$ rospack find basic_tutorial
60Hz로 Hello world!를 출력됩니다.
~/catkin_ws$ rosnode list
리스트를 보면 /basic_node 라는 이름의 Node가 실행되고 있습니다.
~/catkin_ws$ rosnode kill /basic_node
Ctrl + C 또는 위 명령으로 Node를 종료합니다.