一 ROS可以看成linux服务器上面的一个虚拟机 ,具体见https://blog.csdn.net/qq_25267657/article/details/84316111
二 ROS与android通讯
ROS 类似一个操作系统, android手机上也运行的是一个操作系统, 两个系统之间通讯似乎只能通过网络. 这个人研究的过程: https://zang.gold/posts/54880/
目前看到的资料是说 RosBridge和RosJava两种方式见 //www.greatytc.com/p/a746e0d05433
RosJava 是吧android作为一个ros的节点, 资料缺失,也没找到Demo,难实现.
RosBridge 是在Ros上搭建一个WebSocket的服务端, 安卓实现WebSocket的客户端.有人写了一套 .
https://github.com/djilk/ROSBridgeClient 是Ros服务端
https://github.com/KEYD111/TestRosBridge 是android端
关键代码:
/**
* @Function: 建立连接
* @Return:
*/
public void onConnect(String ip, String port) {
client = new ROSBridgeClient("ws://" + ip + ":" + port);
boolean conneSucc = client.connect(new ROSClient.ConnectionStatusListener() {
@Override
public void onConnect() {
client.setDebug(true);
((RCApplication) getApplication()).setRosClient(client);
showTip("Connect ROS success");
Log.d("dachen", "Connect ROS success");
}
@Override
public void onDisconnect(boolean normal, String reason, int code) {
showTip("ROS disconnect");
Log.d("dachen", "ROS disconnect");
}
@Override
public void onError(Exception ex) {
ex.printStackTrace();
showTip("ROS communication error");
Log.d("dachen", "ROS communication error");
}
});
}
//接收来自Ros端的数据
private void ReceiveDataToRos() {
if (isSubscrible == true) {
String msg1 = "{\"op\":\"subscribe\",\"topic\":\"/chatter\"}";
client.send(msg1);
} else if (isSubscrible == false) {
String msg2 = "{\"op\":\"unsubscribe\",\"topic\":\"/chatter\"}";
client.send(msg2);
}
}
//发送数据到ROS端
private void SendDataToRos(String data) {
String msg1 = "{ \"op\": \"publish\", \"topic\": \"/chatter\", \"msg\": { \"data\": \"" + data + " \" }}";
// String msg2 = "{\"op\":\"publish\",\"topic\":\"/cmd_vel\",\"msg\":{\"linear\":{\"x\":" + 0 + ",\"y\":" +
// 0 + ",\"z\":0},\"angular\":{\"x\":0,\"y\":0,\"z\":" + 0.5 + "}}}";
client.send(msg1);
}
三 是否可以用mqtt方案?
https://blog.csdn.net/qq_42683852/article/details/127801188 说ros 和 mqtt通讯
https://blog.csdn.net/qq_42495740/article/details/119736763
如果可以在Ros搭建mqtt服务, 那么android 通过mqtt协议和Ros 通讯就可以使用现有代码.