安装和使用 ROS2 通信中间件
import com.alibaba.fastjson.JSON;
import edu.wpi.rail.jrosbridge.Ros;
import edu.wpi.rail.jrosbridge.Topic;
import edu.wpi.rail.jrosbridge.handler.RosHandler;
import edu.wpi.rail.jrosbridge.messages.Message;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.RestController;
import team.iOceanPlus.PB.Target.PBTarget;
import team.iOceanPlus.PB.Target.PBTarget.Builder;
import javax.annotation.PostConstruct;
import javax.websocket.Session;
import java.util.HashMap;
import java.util.Map;
@Slf4j
@ Component
public class RosSubscribe implements RosHandler {
//properties配置文件配置
//ros服务器ip
// @Value("${ros.ip}")
private String ip = "192.168.136.138";
//指定订阅的话题名称/类型
// @Value("${ros.topic.gnss.name}")
private String topicName = "our_topic";
// @Value("${ros.topic.gnss.type}")
private String msgType = "std_msgs/String";
Ros ros = null;
boolean connect = false;
/**
* ros服务器故障断开每隔五秒重连
*/
@Scheduled(cron = "*/5 * * * * ?")
void reconnect() {
if (!connect) {
log.error("未连接服务!正在重连ros服务器!");
init();
}
}
@PostConstruct
void init() {
try {
ros = new Ros(ip);
connect = ros.connect();
if (connect) {
Topic topic = new Topic(ros, topicName, msgType);
Map<String,Object> msg = new HashMap<>();
msg.put("data","测试 publish");
Message message1 = new Message(JSON.toJSONString(msg), "std_msgs/String");
topic.publish(message1);
//开始订阅话题
topic.subscribe(message -> {
try {
Map maps = (Map) JSON.parse(message.toString()); //message即该话题的广播消息
System.out.println(maps);
} catch (Exception e) {
log.error(e.toString());
}
});
ros.addRosHandler(this); //监听器监听ros连接状态
}
} catch (Exception e) {
log.error("ros服务器连接错误:" + e.toString());
connect = false;
}
}
@Override
public void handleConnection(Session session) {
log.info("ros已连接:" + session.getId());
}
@Override
public void handleDisconnection(Session session) {
log.error("断开ros连接:" + session.getId());
connect = false;
}
@Override
public void handleError(Session session, Throwable t) {
log.error("ros连接失败:" + session.getId() + "-----失败原因:" + t.toString());
connect = false;
}
}
推荐阅读
-
vue-amap 的安装和使用
-
使用 pip update 命令和清华镜像快速安装 OpenCV-python
-
PostgreSQL] GIN 索引安装和使用 - 完全模糊匹配/数组匹配、PG 批量插入数以万计的随机生成数据、随机生成字符串/数组GIN 索引安装和使用 - 全模糊匹配/数组匹配,PG 批量插入数以万计的随机生成数据,随机生成字符串/数组
-
lic (688589.sh):电力线通信功率放大器 (PA) 芯片和高速电力线载波通信芯片 1:1 互补使用
-
电力线载波通信_Heredoc 和电力线_在 centOS 6.6 上安装电力线字体
-
扩频通信]基于 DS-CDMA 的扩频和使用 Matlab 代码的退展仿真
-
MMT Leaf 分布式 ID Leaf 安装和使用, MMT Leaf 雪花算法模式, MMT Leaf 段号模式
-
树莓派 4B 使用 docker 安装 kafka 和 kafka-manger
-
介绍 etcd 以及群集安装和部署的使用
-
tcp] 安装和使用 TCP 测试工具 tcping安装和使用 TCP 测试工具 tcping