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의 현황을 확인할 수 있다.
반응형
'ROBOTICS > Turtlebot3 - Noetic' 카테고리의 다른 글
ROS Noetic : Server & Client (0) | 2022.08.11 |
---|---|
ROS Noetic : ROS service (0) | 2022.08.10 |
ROS Noetic : Closed Loop system with Turtlesim (0) | 2022.08.09 |
ROS Noetic : Concept of ROS Topic (Publisher, Subscriber) (0) | 2022.08.06 |
ROS Noetic : Setup and Workspace (0) | 2022.08.05 |
댓글