ROS #16 Turtlesim control

남생이·2024년 10월 24일

ROS

목록 보기
17/28

msg타입

1. turtlesim topic

topicexplanation
/turtle1/cmd_vel(geometry_msgs/Twist) - linear.x, angular.z
/turtle1/pose(turtlesim/Pose) - x,y,theta
ros2 topic pub /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
import rclpy as rp
from geometry_msgs.msg import Twist

rp.init()
test_node = rp.create_node('pub_test')

msg = Twist()
pub=test_node.create_publisher(Twist, '/turtle1/cmd_vel', 10)
pub.publish(msg)

msg.linear.x=2.0
msg.angular.z=2.0
pub.publish(msg)

cnt = 0
def timer_callback():
    global cnt
    cnt += 1

    print(cnt)
    pub.publish(msg)

    if cnt > 3:
        raise Exception('Publisher Stop')
        self.get_logger().info('Publisher stopped after 3 messages.')
        rclpy.shutdown()
        
timer_period = 2.0
timer = test_node.create_timer(timer_period, timer_callback)
rp.spin(test_node)
test_node.destroy_node

2. turtlesim service

serviceexplanation
/teleport_absolute(turtlesim/TeleportAbsolute) - x,y,theta, 절대 좌표
/teleport_relative(turtlesim/TeleportRelative) - x,y,theta, 상대 좌표
/set_pen(turtlesim/SetPen) - rgb value, off/on, 두께
/kill(turtlesim/Kill)
/spawn(turtlesim/Spawn)
/reset(std_srvs/Empty)
/clear(std_srvs/Empty
ros2 service call /clear std_srvs/srv/Empty
ros2 service call /reset std_srvs/srv/Empty
ros2 service call /spawn turtlesim/srv/Spawn "{x: 2.0, y: 3.0, theta: 1.57, name: 'turtle2'}"
ros2 service call /kill turtlesim/srv/Kill "{name: 'turtle1'}"
ros2 service call /set_pen turtlesim/srv/SetPen "{r: 255, g: 0, b: 0, width: 5, off: 0}"
ros2 service call /teleport_absolute turtlesim/srv/TeleportAbsolute "{x: 5.0, y: 5.0, theta: 0.0}"
ros2 service call /teleport_relative turtlesim/srv/TeleportRelative "{linear: 2.0, angular: 1.57}"
import rclpy as rp
from turtlesim.srv import TeleportAbsolute

rp.init()
test_node = rp.create_node('client_test')

service_name = '/turtle1/teleport_absolute'
cli=test_node.create_client(TeleportAbsolute, service_name)

req=TeleportAbsolute.Request()

req.x=1.
req.y=1.
req.theta=3.14

# 서비스 비동기 호출
future = cli.call_async(req)

# 결과를 기다리면서 노드를 스핀
rp.spin_until_future_complete(test_node, future)

# 서비스 호출 결과 확인
if future.result() is not None:
    response = future.result()
    print('서비스 호출 성공:', response)
else:
    print('서비스 호출 실패')

# 노드 종료 및 ROS 2 종료
test_node.destroy_node()
rp.shutdown()
profile
공부하는 거북이

0개의 댓글