This is a Rust native client library for ROS2. It does not link to rcl, rclcpp, or any non-Rust DDS library. RustDDS is used for communication.
The API is not identical to rclcpp
or rclpy
, because some parts would be very awkward in Rust. For example, there are no callbacks. Rust async
mechanism is used instead. Alternatively, some of the functionality can be polled using the Metal I/O library.
There is a .spin()
call, but it is required only to have ros2-client
execute some background tasks. You can spawn an async task to run it, and retain the flow of control in your code.
Please see the included examples on how to use the various features.
rosout
logging ✅.msg
to .rs
- experimentalThis is what is expected to work. There are no routine tests against older releases.
ROS 2 Release | ros2-client should interoperate? |
---|---|
A - E | Maybe. Not tested. |
Foxy, Galactic, Humble | Yes. Enable feature pre-iron-gid when building ros2-client 0.7.5 or newer |
Iron | Yes. Not well tested. Requires ros2-client 0.7.5 or newer |
Jazzy | Yes. Requires ros2-client 0.7.5 or newer |
NodeName
namespace is no longer allowed to be the empty string, because it confuses ROS 2 tools. Minimum namespace is "/".take()
samples with deserialization "seed" value.
This allows more run-time control of deserialization. Upgrade to RustDDS 0.10.0.Error
trait for NameError
and NodeCreateError
wait_for_writer
and wait_for_reader
results now implement Send
.pre-iron-gid
. The Gid .msg
definition has changed between ROS2 Humble and Iron. ros2-client
now uses the newer version by default. Use this feature to revert to the old definition.Node
has .status_receiver()
.spin()
call to run the Discovery mechanism.Client
has .wait_for_service()
ros2-client
is not going to implement a call similar to rclcpp::spin(..)
.These are re-implementations of similarly named ROS examples. They should be interoperable with ROS 2 example programs in C++ or Python.
To test this, start a server and then, in a separate terminal, a client, e.g.
ros2 run examples_rclcpp_minimal_action_server action_server_member_functions
and
cargo run --example=minimal_action_client
or
cargo run --example=minimal_action_server
and
ros2 run examples_rclpy_minimal_action_client client
You should see the client requesting for a sequence of Fibonacci numbers, and the server providing them until the requested sequence length is reached.
The included example program should be able to communicate with out-of-the-box ROS2 turtlesim example.
Install ROS2 and start the simulator by ros2 run turtlesim turtlesim_node
. Then run the turtle_teleop
example to control the simulator.
Teleop example program currently has the following keyboard commands:
q
or Ctrl-C
: quitr
: reset simulatorp
: change pen color (for turtle1 only)a
/b
: spawn turtle1 / turtle2A
/B
: kill turtle1 / turtle21
/2
: switch control between turtle1 / turtle2d
/f
/g
: Trigger or cancel absolute rotation action.Install ROS2. This has been tested to work against "Galactic" release, using either eProsima FastDDS or RTI Connext DDS (rmw_connextdds
, not rmw_connext_cpp
).
Start server: cargo run --example=ros2_service_server
In another terminal or computer, run a client: ros2 run examples_rclpy_minimal_client client
Similar to above.
Start server: ros2 run examples_rclpy_minimal_service service
Run client: cargo run --example=ros2_service_client
rcl
library written in C.rcl
and rmw
.Copyright 2022 Atostek Oy
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
This crate is developed and open-source licensed by Atostek Oy.