RosSwift

ROS 机器人操作系统 - 核心客户端库的Swift实现。基于 roscpp。

RosSwift 是 ROS 的 Swift 实现。它提供了一个基于 Swift-NIO 的 Swift 库,使 Swift 程序员能够与 ROS 交互。它在 OSX 和 Linux(Raspberry Stretch,Ubuntu)上进行了测试,并且应该也可以在 Swift-NIO 支持的所有平台上工作。

有一些尚未实现的功能,但基本的消息发布、订阅、服务和参数应该可以正常工作。

兼容性

OSX 上的最低 SDK 版本为 10.15,也适用于 iOS 14。

树莓派上的 Swift 版本为 5.9,已在 Ubuntu 20.10 上测试。

在 iOS 和 macOS 的 Info.plist 文件中,可能需要允许任意加载。

<key>NSAppTransportSecurity</key>
<dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
</dict>

消息

该软件包包含 msgbuilder,用于生成自定义消息的代码。

Master

该软件包包含 roscore,它是 ros master 的 swift 实现。 master 通过 Bonjour 在 Apple 设备上和通过 Avahi 在 Linux 设备上广播其存在。 Ros 的客户端初始化将搜索 master,除非使用重映射指定了 url ros = Ros(name: "phone", remappings: ["__master":"http://10.0.1.23:11311"]) 或使用环境变量 ROS_MASTER_URI

对于 iOS 客户端应用程序中的服务发现,请将 NSBonjourServices 添加到您的 Info.plist 文件中。

<key>NSBonjourServices</key>
<array>
  <string>_ros._tcp</string>
</array>

示例

以下代码段展示了如何建模一个发布者

import Foundation
import RosSwift
import RosTime
import StdMsgs


let ros = Ros(argv: &CommandLine.arguments, name: "talker")
let n = ros.createNode()
guard let chatter_pub = n.advertise(topic: "/chatter", message: String.self) else {
    exit(1)
}

var rate = Rate(frequency: 10.0)

var j : Int32 = 0
while ros.ok {
    chatter_pub.publish(message: "Hello \(j)")
    j += 1
    rate.sleep()
}

以下代码段展示了如何建模一个简单的监听器

import RosSwift
import StdMsgs
import msgs

let ros = Ros(argv: &CommandLine.arguments, name: "listener")
let node = ros.createNode()
let imu = node.subscribe(topic: "/imu") { (msg: sensor_msgs.Imu) in
    print("accel: [\(msg.linear_acceleration)]")
}
n.spinThread()