init: ROS2 learning suite

This commit is contained in:
xs
2026-08-03 18:09:35 +08:00
commit 5ef38ab508
95 changed files with 13322 additions and 0 deletions
+43
View File
@@ -0,0 +1,43 @@
"""py_srv 单元测试:同进程 spin + 验证 Service 通信。"""
import time
import rclpy
import pytest
from py_srv.add_two_ints_server import AddTwoIntsServer
from py_srv.add_two_ints_client import AddTwoIntsClient
from example_interfaces.srv import AddTwoInts
@pytest.fixture(scope='module')
def ros_context():
rclpy.init()
yield
rclpy.shutdown()
def test_service_inproc_roundtrip(ros_context):
"""同进程内 server + client 互调,验证 a + b == sum。"""
server = AddTwoIntsServer()
client = AddTwoIntsClient()
exec_ = rclpy.executors.SingleThreadedExecutor()
exec_.add_node(server)
exec_.add_node(client)
req = AddTwoInts.Request()
req.a = 7
req.b = 35
future = client.client.call_async(req)
end = time.time() + 3.0
while not future.done() and time.time() < end:
exec_.spin_once(timeout_sec=0.05)
assert future.done(), 'service call did not complete in 3s'
assert future.result() is not None
assert future.result().sum == 42
exec_.remove_node(server)
exec_.remove_node(client)