Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Swift for ROS 2: iPhone, iPad and Mac in your R...

Swift for ROS 2: iPhone, iPad and Mac in your ROS graph

Talk at ROS By-The-Bay, October 22, 2026, hosted by Intrinsic.

How an iPhone, an iPad or a Mac can join your ROS 2 graph as a real node, with no bridge.

- Conduit: an App Store app that publishes 13 iPhone sensors (IMU, GPS, cameras, LiDAR, microphone, game controller, ARKit pose, ...) as standard ROS 2 messages over Zenoh or DDS, Humble to Rolling. Downloaded over 10,000 times.
- swift-ros2 3.0: a native Swift client library in three packages that mirror upstream (rosidl, rclcpp, common_interfaces). Topics, services, actions and parameters with async/await, tested against Humble, Jazzy, Kilted and Lyrical hosts.
- Conduit 3 sneak peek: Robots. Drive a mobile robot through its own camera, and teleoperate a MoveIt Servo arm from your phone.

Conduit: https://apps.apple.com/app/id6757171237
swift-ros2: https://github.com/swift-ros2
Sneak peek videos: https://youtu.be/tERF16pEvUA / https://youtu.be/5x5xeL3mKAI

Avatar for Yutaka Kondo

Yutaka Kondo

October 23, 2026

More Decks by Yutaka Kondo

Other Decks in Technology

Transcript

  1. Swift for ROS 2 iPhone, iPad and Mac in your

    ROS graph ROS By-The-Bay · October 22, 2026 · Intrinsic Yutaka Kondo · @youtalk · [email protected]
  2. Yutaka Kondo @youtalk Work Open source & community • TIER

    IV North America (2026–) • Conduit · swift-ros2 Principal Software Engineer, Santa Clara • TIER IV (2024–) General Manager Autoware · end-to-end AI · simulation · system software · AI accelerator • Autoware · CARLA • Author of Japan's rst ROS 2 book • Founder of ROSCon JP fi 2 Online
  3. From 42 DoF to 0 DoF 42 DoF NAIST ·

    Ph.D. 2013 15 DoF Kawada Robotics · 2013–18 13 DoF Preferred Networks · 2018–21 3 DoF Preferred Robotics · 2021–24 2 DoF TIER IV · 2024– 0 DoF Conduit · 2026 3
  4. Conduit in the wild Swinging an iPhone drives a humanoid

    and its MuJoCo twin through Meridian, the day after Conduit launched. SLAM with GLIM from Conduit's iPhone sensors. 9
  5. One dependency, no ROS install // Package.swift dependencies: [ .package(

    url: "https://github.com/swift-ros2/swift-ros2.git", from: "3.0.2"), .package( url: "https://github.com/swift-ros2/swift-ros2-common-interfaces.git", from: "1.0.0"), ], targets: [ .executableTarget(name: "YourApp", dependencies: [ .product(name: "SwiftROS2", package: "swift-ros2"), .product(name: "CommonInterfaces", package: "swift-ros2-common-interfaces"), ]), ] 13
  6. Publish and subscribe import SwiftROS2 import CommonInterfaces let context =

    try await ROS2Context( transport: .zenoh(locator: "tcp/192.168.1.100:7447"), distro: .jazzy, domainId: 123) let node = try await context.createNode(name: "sensor_node", namespace: "/ios") let pub = try await node.createPublisher(Imu.self, topic: "imu") try pub.publish(Imu( header: Header.now(frameId: "imu_link"), linearAcceleration: Vector3(x: 0, y: 0, z: 9.81))) let sub = try await node.createSubscription(Imu.self, topic: "imu") for await msg in sub.messages { print("accel: \(msg.linearAcceleration)") } 14
  7. Services // Server let svc = try await node.createService(TriggerSrv.self, name:

    "/trigger") { _ in TriggerSrv.Response(success: true, message: "ok") } // Client let cli = try await node.createClient(TriggerSrv.self, name: "/trigger") try await cli.waitForService(timeout: .seconds(5)) let resp = try await cli.call(.init(), timeout: .seconds(5)) 15
  8. Actions and parameters, typed // Fibonacci action client, with feedback

    let cli = try await node.createActionClient( FibonacciAction.self, name: "/fibonacci") let goal = try await cli.sendGoal(FibonacciAction.Goal(order: 10)) Task { for await fb in goal.feedback { print(fb.sequence) } } let result = try await goal.result() // Parameter with a range, visible to ros2 param _ = try await node.declareParameter( "rate", default: Int64(30), descriptor: ROS2ParameterDescriptor( name: "rate", type: .integer, integerRange: Int64(1)...Int64(120))) 16
  9. Your own messages # my_msgs/msg/Point2.msg float64 x float64 y //

    Package.swift .target(name: "my_msgs", dependencies: [ .product(name: "SwiftROS2Messages", package: "swift-ros2-rosidl")], exclude: ["msg"], plugins: [.plugin(name: "SwiftROS2GenPlugin", package: "swift-ros2-rosidl")]) // App let pub = try await node.createPublisher(Point2.self, topic: "point") try pub.publish(Point2(x: 1, y: 2)) 17
  10. swift-ros2 in the wild A room-scale point cloud from iPhone

    LiDAR, camera and pose in ROS 2, built on swift-ros2. 21 Develop, train in sim and ship to a Unitree Go2 from macOS in Swift. Wendy Labs' swiftmujoco and WendyOS ROS 2 templates run on swift-ros2.
  11. 24

  12. 25

  13. Get Conduit · Try swift-ros2 Conduit on the App Store

    github.com/swift-ros2/swift-ros2 28