Examples on how to use the ICEY library.
They demonstrate:
- Using the icey::Context for both regular and lifecycle Nodes
- Synchronous-looking service calls using async/await
- Actions using async/await
- Simple publisher/subscriptions, demonstrating Streams
- Automatic synchronization between multiple topics
- Looking up transforms using async/await
- Subscribing single transforms
- Synchronizing topics with transforms
- Transform broadcasting
- Using image transport subscriptions/publishers
Run the service client:
ros2 run icey_examples service_client_async_await_exampleIt should start printing:
[INFO 1739536174.336721959] [signal_generator_async_await_example]: Timer ticked, sending request: 1
[INFO 1739536175.336992943] [signal_generator_async_await_example]: Service1 got error: SERVICE_UNAVAILABLE
[INFO 1739536176.337142245] [signal_generator_async_await_example]: Service2 got error: SERVICE_UNAVAILABLE
[INFO 1739536176.337245071] [signal_generator_async_await_example]: Timer ticked, sending request: 1
[INFO 1739536177.337368092] [signal_generator_async_await_example]: Service1 got error: SERVICE_UNAVAILABLE
[INFO 1739536178.337532123] [signal_generator_async_await_example]: Service2 got error: SERVICE_UNAVAILABLE
[INFO 1739536178.337611589] [signal_generator_async_await_example]: Timer ticked, sending request: 1
[INFO 1739536179.337728093] [signal_generator_async_await_example]: Service1 got error: SERVICE_UNAVAILABLE
...
Then, in another terminal, run the service server:
ros2 run icey_examples service_server_example --ros-args -p service_name:=set_bool_serviceWhich should print:
[INFO 1739536197.338006812] [signal_generator_async_await_example]: Got response1: 0
[INFO 1739536198.337306617] [signal_generator_async_await_example]: Timer ticked, sending request: 1
[INFO 1739536198.337861565] [signal_generator_async_await_example]: Got response1: 0
[INFO 1739536198.338268818] [signal_generator_async_await_example]: Got response1: 0
[INFO 1739536199.337331935] [signal_generator_async_await_example]: Timer ticked, sending request: 1
[INFO 1739536199.337942713] [signal_generator_async_await_example]: Got response1: 0
[INFO 1739536199.338201448] [signal_generator_async_await_example]: Got response1: 0
[INFO 1739536200.337282427] [signal_generator_async_await_example]: Timer ticked, sending request: 1
[INFO 1739536200.337812212] [signal_generator_async_await_example]: Got response1: 0
[INFO 1739536200.337953596] [signal_generator_async_await_example]: Got response1: 0
And now the the service client prints:
[INFO 1739536197.337218652] [signal_generator_async_await_example]: Timer ticked, sending request: 1
[INFO 1739536197.337773922] [signal_generator_async_await_example]: Got response1: 0
[INFO 1739536197.338006812] [signal_generator_async_await_example]: Got response1: 0
[INFO 1739536198.337306617] [signal_generator_async_await_example]: Timer ticked, sending request: 1
[INFO 1739536198.337861565] [signal_generator_async_await_example]: Got response1: 0
[INFO 1739536198.338268818] [signal_generator_async_await_example]: Got response1: 0
...
Start the asynchronous server:
ros2 run icey_examples service_server_async_await_exampleAnd the upstream server:
ros2 run icey_examples service_server_example --ros-args -p service_name:=set_bool_service_upstreamAnd now the service client:
ros2 run icey_examples service_client_async_await_exampleYou should now receive responses and see how both servers receive requests.
Run action server:
ros2 run icey_examples action_server_async_await_exampleAnd the action client:
ros2 run icey_examples action_client_async_await_exampleStart the subscription:
ros2 run icey_examples tf_lookup_async_await_example And now the driver:
ros2 run icey_examples tf_pub_test_example The subscription should print regularly on every lookup.
Start the TF broadcaster:
ros2 run icey_examples tf_broadcaster_example Now the TF subscriber:
ros2 run icey_examples tf_subscription_example It should print on every transform the transformation matrix:
[INFO 1756324909.237720717] [icey_tf_subscription_example]: Received a new transform:
-0.446485 -0.894791 0 7.3
0.894791 -0.446485 0 -73
0 0 1 0
0 0 0 1
This example node spins and can be activated and deactivated.
Run it:
ros2 run icey_examples lifecycle_node_exampleThen, from a second terminal deactivate it:
ros2 lifecycle set /lifecycle_node_example shutdownAnd then activate it again:
ros2 lifecycle set /lifecycle_node_example shutdown