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
,用于生成自定义消息的代码。
该软件包包含 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()