#! /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초 주기로 실행
$ chmdd +x pub.py
//r : read w : write x : execute
$ ls -l
//실행 권한 부여됐는지 확인
터미널 1
$ roscore
터미널 2
$ rosrun turtlesim turtlesim_node
터미널 3
$ chmod +x pub.py
$ rosrun my_pkg1 pub.py
터미널 4
$ rqt_graph
#! /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()
하나 이상의 노드를 실행하고 노드 간의 통신을 설정하도록 하는 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 파일은 반드시 패키지에 포함되어야 하기 때문에 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