ROS Node 생성

jiyul·2023년 11월 12일

ROS

목록 보기
3/4
post-thumbnail

워크 스페이스 > src폴더 > 패키지 > src폴더 > 소스코드
다음과 같은 구조입니다.
따라서 워크 스페이스 경로에서 rosrun [패키지 이름][실행파일 이름] 명령을 패키지 이름과, 소스코드를 컴파일한 실행 파일 이름으로 실행할 수 있습니다.

워크 스페이스 생성

catkin_ws라는 이름의 워크스페이스 생성 후 이동

~$ mkdir catkin_ws
~$ cd catkin_ws

워크스페이스에 src폴더 생성 후 이동

~/catkin_ws$ mkdir src
~/catkin_ws$ cd src

ROS 패키지 생성 후 이동

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

소스코드 작성

ROS Node의 Standard 타입

#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;
}

CMakeLists.txt 작성

컴파일러로 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

Node 실행

다른 터미널창에서 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를 종료합니다.

profile
Let's take the lead

0개의 댓글