新手对接 jrosbridge
1. 导入Jar 包
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8e55290524d049ceab3c8a5d0a8422da.png)
2.创建Utils 类
import cn.hutool.core.collection.CollectionUtil;
import com.hc.utils.StringUtils;
import edu.wpi.rail.jrosbridge.Ros;
import edu.wpi.rail.jrosbridge.Topic;
import edu.wpi.rail.jrosbridge.callback.TopicCallback;
import edu.wpi.rail.jrosbridge.handler.RosHandler;
import javax.websocket.Session;
import java.util.*;
public class RosUtils implements RosHandler {
private String ip;
private int port;
private TopicCallback topicCallback;
private LinkedHashMap <String,String> map;
private RosUtils(){}
public RosUtils(String ip, TopicCallback topicCallback, LinkedHashMap<String, String> map,Integer port) {
if (StringUtils.isBlank(ip)){
throw new RuntimeException("ip 不能为空");
}
if (topicCallback == null){
throw new RuntimeException("topicCallback 不能为空");
}
if (CollectionUtil.isEmpty(map)){
throw new RuntimeException("map 不能空");
}
if (port == null){
throw new RuntimeException("port 不能空");
}
this.ip = ip;
this.topicCallback = topicCallback;
this.map = map;
this.port =port;
init();
}
private Ros ros = null;
private boolean connect = false;
public void init() {
try {
ros = new Ros(ip,port);
connect = ros.connect();
if (connect) {
for (String key : map.keySet()) {
Topic topic = new Topic(ros, key, map.get(key));
topic.subscribe(topicCallback);
}
ros.addRosHandler(this);
}
} catch (Exception e) {
System.out.println("ros服务器连接错误:" + e.toString());
connect = false;
}
}
@Override
public void handleConnection(Session session) {
System.out.println("ros已连接:" + session.getId());
}
@Override
public void handleDisconnection(Session session) {
System.out.println("断开ros连接:" + session.getId());
connect = false;
}
@Override
public void handleError(Session session, Throwable t) {
System.out.println("ros连接失败:" + session.getId() + "-----失败原因:" + t.toString());
connect = false;
}
}
3. 创建回调类
import com.alibaba.fastjson.JSONObject;
import edu.wpi.rail.jrosbridge.callback.TopicCallback;
import edu.wpi.rail.jrosbridge.messages.Message;
public class RosCallBack implements TopicCallback {
@Override
public void handleMessage(Message message) {
try {
JSONObject jsonObject = JSONObject.parseObject(message.toString());
System.out.println(jsonObject.toString());
} catch (Exception e) {
System.out.println(e.toString());
}
}
}
4. 调用方式
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/8815ef2f4c3d4ab792a1729f3a536ac7.png)