A small DDS/RTPS compatibility layer for MoonBit and ROS 2
Status: 0.9.0 — experimental. APIs and interoperability coverage may change before 1.0.0.
moon add OJII3/ros2-mbt@0.9.0///|
import {
"OJII3/ros2-mbt/ros",
"OJII3/ros2-mbt/transport",
}inputs = {
ros2-mbt.url = "github:OJII3/ros2-mbt";
};devShells.${system}.default = pkgs.mkShell {
packages = [
inputs.ros2-mbt.packages.${system}.ros2-mbt
];
};nix develop .#ros2
ros2 topic echo /chatter std_msgs/msg/Stringnix develop .#ros2
moon run examples/talkerros2-mbt topic echo /chatter# Terminal 1
nix develop .#ros2
ros2 topic pub --qos-reliability reliable /chatter std_msgs/msg/String \
"{data: hello from ROS 2}"
# Terminal 2
nix develop .#ros2
moon run examples/listenerexport ROS2_MBT_IP=192.168.1.20
export ROS_DOMAIN_ID=0
moon run examples/talker| Example | Purpose |
|---|---|
| examples/talker / examples/listener | String topic publisher and subscriber |
| examples/wstring_talker / wstring_listener | WString topic publisher and subscriber |
| examples/service_server / service_client | ROS 2 service server and client |
| examples/action_client | Fibonacci Action client |
| examples/parameter_client | ROS 2 parameter client |
| Area | Scope |
|---|---|
| MoonBit backend | Native |
| Operating systems | Linux and macOS |
| ROS 2 distribution | Jazzy |
| DDS implementations | Cyclone DDS 11.0.1 and Fast DDS 3.6.2 |
| ROS 2 interfaces | Selected codecs from std_msgs, builtin_interfaces, geometry_msgs, sensor_msgs, nav_msgs, action_msgs, and rmw_dds_common |
import {
"OJII3/ros2-mbt/ros/messages/std_msgs" @std_msgs,
"OJII3/ros2-mbt/transport" @transport,
}
async main {
let node = @transport.RosNode::new_ddsi(
"/demo",
"talker",
domain_id=0U,
participant_id=42U,
ip=0x7F000001U,
).unwrap()
let publisher = node.create_publisher_for(
"/chatter",
@std_msgs.StringMessage::type_support(),
).unwrap()
node.create_timer(1000, async fn() {
match publisher.publish(@std_msgs.StringMessage::new("hello")) {
Ok(_) => ()
Err(message) => println(message)
}
}).unwrap()
let executor = @transport.Executor::new()
executor.add_node(node).unwrap()
ignore(executor.spin())
}nix develop
moon updatejust verifyjust interop-podman