多设备(网线连接)运行相同ROS代码干扰问题

问题

设备为NVIDA Jetson 套件(两套),都要部署ros代码,并且两套设备是需要物理通信的。那么这个时候由于代码一样,发布者发布的topic也一样,如果两个设备同时运行相同的ros2节点代码,两个设备都会互相收到自己和对方的topic信息,这时候互相产生了干扰,如果进行界面显示,我是显示检测的画面,这个时候两边的画面就会来回切换,抽搐,鬼畜画面,哈哈,你懂的!用wireshark抓包软件可以看到,一台设备向另一台设备发送RTPS包,互相发送,因为是网线链接,所以造成了这个问题。

解决办法

搜了一圈,没有搜到比较符合的方法,索性去问GPT,描述了一下问题,感觉描述出问题都不是很准确,总觉得没有get到我问的点,他给了个命名空间,什么的,我去试了,好像不行,主要ros2也是刚学,增加命名空间后,编译后有的模块就不工作了,也找不到原因。

后面又尝试了另一种方法,就是msg消息的header设置的不一样,然后在callback函数里面进行判断,但最后跑起来发现判断非常耗时间,肯定还是得把包设置的不一样,没错,其实非常简单,把topic改的不一样就行了,这个不是gpt给的答案,但我记得问的时候提过这一点,我没有深入问下去,一方面ros2学习的比较浅,代码的一些模块不熟悉,但可能就是前面方法的不断尝试,最后精确知道了topic应该实在哪些地方需要改,最后一次尝试就成功了。

卡了2-3天吧。。。终于解决了。

改掉每个ros节点中的self.create_subscription()部分的topic。launch文件不需要改动。需要对每个ros节点代码熟悉,如果是自己写的,应该就很好知道,如果是用的别人的,我一般不轻易去改,不过前面的尝试也算是铺垫,熟悉了一点吧。。

最后两太设备由于topic不同,就不再冲突了。终于可以继续下面的工作了!

你可能感兴趣的:(自动驾驶,人工智能,机器学习,ROS2)