msg타입
1. turtlesim topic
| topic | explanation |
|---|
| /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
| service | explanation |
|---|
| /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('서비스 호출 실패')
test_node.destroy_node()
rp.shutdown()