ROS를 이제 조금 알게 되어 처음부터 다시 실습 실행
xycar_ws/src 밑에 my_pkg1을 만든다.
xycar_ws/src/my_pkg1 밑에 launch 폴더를 만든다.
#!/usr/bin/env python
import rospy
from geometry_msgs.msg import Twist
rospy.init_node('my_node', anonymous=True)
pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
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)
while not rospy.is_shutdown():
pub.publish(msg)
rate.sleep()
#!/usr/bin/env python
파이썬을 사용할 것을 알린다.
import rospy
from geometry_msgs.msg import Twist
필요한 것들 import
geometry_msgs/Twist
rospy.init_node('my_node', anonymous=True)
pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
my_node라는 노드를 만들고 ,
Publisher객체 생성 (Twist 타입의 /turtle1/cmd_vel 이름으로 토픽을 만들며 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
Twist객체에 6개의 숫자들 넣는다.
rate = rospy.Rate(1)
1초에 한 번 발행을 위함
while not rospy.is_shutdown():
pub.publish(msg)
rate.sleep()
위에 6개의 숫자들 토픽을 publish하고,
1초에 한 번 발행을 위해 그 시간에 맞추어 쉬어간다.
실행권한을 준다.
chmod +x pub.py
roscore
rosrun turtlesim turtlesim_node
rosrun my_pkg1 pub.py
rqt_graph
-> 이때, my_node 뒤에 숫자는
rospy.init_node('my_node', anonymous=True)
에서 anonymous=True 옵션때문이다.
#!/usr/bin/env python
import rospy
from geometry_msgs.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()
#!/usr/bin/env python
import rospy
from geometry_msgs.msg import Pose
파이썬 사용하고 관련 된 것 import
def callback(data):
s = "location: %.2f, %.2f" % (data.x, data.y)
rospy.loginfo(rospy.get_caller_id() + s)
data.x, data.y와 id를 loginfo해서 출력
rospy.init_node('my_listener', anonymous=True)
rospy.Subscriber('/turtle1/pose', Pose, callback)
rospy.spin()
my_listener이름으로 노드 생성
Pose 타입 /turtle1/pose 이라는 토픽이름으로 Subscriber임을 알린다.
이때, 메시지를 수신하면 callback 함수 호출
이것을 반복한다.
실행권한을 준다.
chmod +x sub.py
roscore
rosrun turtlesim turtlesim_node
rosrun my_pkg1 pub.py
rosrun my_pkg1 sub.py
rqt_graph
실행
<node pkg="패키지 명" type="노드 포함 소스파일 명" name="노드 이름" />
launch 같이 실행
<include file="같이 실행할 *.launch 파일 경로" /> ex 1 ) <include file="../이름.launch" /> ex 2 ) <include file="$(find pkg)/src/launch/이름.launch" />
ros 파라미터 서버에 변수 등록, 변수 값 설정
<param name="변수 이름" type="변수 타입" value="변수 값" />
<launch>
<node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node" />
<node pkg="my_pkg1" type="pub.py" name="pub_node" />
<node pkg="my_pkg1" type="sub.py" name="sub_node" output="screen" />
</launch>
roslaunch my_pkg1 pub-sub.launch