ROS_4) ROS 기본 예제

한우진·2023년 4월 22일
0
post-thumbnail

pub.py 생성

#! /usr/bin/env python

import rospy
from geometry_msgs.msg import Twist

rospy.init_node('my_node', anonymous=True)
// my_node 노드를 생성한다
pub = rospy.Publisher(' /turtle1/cmd_vel', Twist, queue_size=10)
//발행자인 Publisher 객체를 생성

msg = Twist()
msg.linear.x = 2.0
msg.linear.y = 0.0
msg.linear.z = 0.0
msg.angular.x = 0.0
msg.angular.y = 0.0
msg.angular.z = 1.8

rate = rospy.Rate(1)
//1HZ = 1초에 1번씩 반복

while not rospy.is_shutdown():
	pub.publish(msg)
    rate.sleep()
//종료될때까지 게속 1초 주기로 실행
  • ~/xycar_ws/src/my_pkg1/src 위치에 pub.py라는 이름으로 생성해야함
  • 생성 후 파이썬 코드를 실행시키기 위해 실행권한을 부여해줘야한다
$ chmdd +x pub.py
//r : read w : write x : execute
$ ls -l
//실행 권한 부여됐는지 확인

각 터미널에서 코드 실행

터미널 1

  • roscore 실행
$ roscore

터미널 2

  • turtlesim 노드 실행
$ rosrun turtlesim turtlesim_node

터미널 3

  • pub.py 실행
$ chmod +x pub.py
$ rosrun my_pkg1 pub.py

터미널 4

  • rqt_graph 실행
$ rqt_graph

pub.py 생성

#! /usr/bin/env python

import rospy
from turtlesim.msg import Pose

def callback(data) :
	s = "Location: %.2f, %.2f" % (data.x, data.y)
    rospy.loginfo(rospy.get_caller_id() + s)
    
rospy.init_node("my_listener", anonymous=True)
rospy.Subscriber(" /turtle1/pose", Pose, callback)
rospy.spin()
  • 마찬가지로 my_pkg1/src 위치에서 sub.py라는 이름으로 프로그램 작성
  • 실행 권한을 sub.py에게 부여하고 pub.py와 turtlesim_node가 실행되는 상태에서 rosrun

roslaunch란?

하나 이상의 노드를 실행하고 노드 간의 통신을 설정하도록 하는 XML 파일이다.

$ roslaunch [패키지 이름] [실행시킬 launch 파일 이름]

이때 실행시킬 launch 파일은 반드시 패키지에 포함된 launch 파일이어야 한다

<launch>
  <node pkg="패키지 명(ex my_pkg1)" type="노드가 포함된 소스파일 명(ex pub.py)" name="노드 이름(ex pub_node)" />
  <node pkg="패키지 명(ex my_pkg1)" type="노드가 포함된 소스파일 명(ex sub.py)" name="노드 이름(ex sub_node)" />
</launch>

launch 파일은 위와 같이 이루어져 있다

launch 파일의 위치

launch 파일은 반드시 패키지에 포함되어야 하기 때문에 Package 아래 launch 폴더에 존재한다

$ cd ~/xycar_ws/src/my_pkg1
$ mkdir launch
$ cd ~/xycar_ws/src/my_pkg1/launch
$ gedit pub-sub.launch
$ cm
$ roslaunch my_pkg1 pub-sub.launch

0개의 댓글