// pakage create
$ cd ~/xycar_ws/src
$ catkin_create_pkg my_pkg1 std_msgs rospy
$ cm
$ cd ~/xycar_ws/src/my_pkg1/src
// src code create
$ vi pub.py // 코드 편집
$ chmod +x pub.py // 실행 권한 부여
// rosrun
$ roscore // termial1
$ rosrun turtlesim turtlesim_node // termial2
$ rosrun my_pkg1 pub.py // termial3
목표: 터틀심을 8자로 주행시키는 토픽 발행
실행 결과:
소스코드:
#!/usr/bin/env python3
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) # topic, msg type, size?
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
msg2 = Twist()
msg2.linear.x = 2.0
msg2.linear.y = 0.0
msg2.linear.z = 0.0
msg2.angular.x = 0.0
msg2.angular.y = 0.0
msg2.angular.z = -1.8
rate = rospy.Rate(1)
iter_num = 0
msg_case = True
while not rospy.is_shutdown():
if iter_num % 4 == 0:
msg_case = False if msg_case is True else True
iter_num = 0
if msg_case:
pub.publish(msg)
# rospy.loginfo(f'True, iter Num : {iter_num}')
else:
pub.publish(msg2)
# rospy.loginfo('False')
rate.sleep()
iter_num += 1