본문 바로가기
ROBOTICS/Turtlebot3 - Noetic

ROS Noetic : Create Package and Node

by 누워있는말티즈 2022. 8. 5.

Create Package and Node

이제 package를 생성할 것이다. robot_ws/src로 이동한다.

cd robot_ws/src
# alia 해놔서 'cs' 명령어로도 이동 가능하다

여기다가 my_robot_pkg라는 package를 생성한다. 이 package에서는 turtlesim을 제어한다.

catkin_create_pkg my_robot_pkg rospy roscpp turtlesim

이제 vscode에서 본격적인 코딩을 시작한다.

만약 vscode가 없다면 아래 명령어로 빠르게 설치하자

sudo snap install code --classic

vscode 들어가면 다음과 같은 화면을 볼 수 있다.


기본적으로 CMakeLists.txt와 package.xml이 생성되어 있다.

일단 빌드를 해두자!

다시 robot_ws로 돌아와서 빌드한다.

cd robot_ws
catkin_make my_robot_pkg
# 만약 패키지가 많아서 하나만 빌드하고 싶다면 아래를 쓰자
# catkin_make --only-pkg-with-deps package_name

이제 노드를 만든다.

my_robot_pkg 안에 src 폴더 안에 파이썬 파일 하나를 생성한다.

cd my_robot_pkg
gedit src/my_first_node.py
chmod +x my_first_node.py

python 파일 내용은 아래와 같다(* ros noetic이므로 python3을 사용한다!!)

#!/usr/bin/env python3
import rospy

if __name__=='__main__':
    rospy.init_node("test_node")
    rospy.loginfo("Hello from testnode")
    #rospy.logwarn("This is a warning")
    #rospy.logerr("This is an error")

    rospy.sleep(0.1)
    rospy.loginfo("End of program")

위 파일을 실행해본다. ROS 파일을 실행하기 전에는 항상 다른 터미널에서 roscore를 켜줘야 한다.


간단한 반복 루프를 ROS로 구현해본다. 아래와 같은 구조는 아주아주 많이(e.g. 센서 데이터 주기적으로 불러오기 등) 사용되므로 익숙해지자!

#!/usr/bin/env python3
import rospy

def main():
    rate = rospy.Rate(10) #10Hz
    i = 0
    #infinite loop
    while not rospy.is_shutdown():
        i+=1
        rospy.loginfo(i)
        rate.sleep()

if __name__=='__main__':
    rospy.init_node("test_node")
    rospy.loginfo("__test_node_init__")
    main()


실행 화면

이때 rosnode와 rqt_graph를 이용해서 node의 현황을 확인할 수 있다.

반응형

댓글