ROS机器人-从零开始每日日志记录day9
·
本周杂七杂八,没有什么大进展,先是换了激光雷达,又发现两个相同型号的激光雷达同时使用会有冲突,这个给解决了激光雷达又坏了,没办法,只得将原来使用的激光雷达换上来。接着就是进行激光雷达外参标定,尝试了各种标定方法,最后暂且使用了墙面拟合标定的数据。接下来就是装读码器并读取二维码数据等等...
1.双同型号激光雷达端口冲突
现象:
在工控机上同时运行两个相同型号的激光雷达驱动实例时,第二个雷达无法显示点云,报端口冲突错误。
分析:
排查后发现是官方ROS驱动的硬编码缺陷导致的:
- 官方驱动将数据接收IP写死为
0.0.0.0:8080。 0.0.0.0是通配符地址,当第一个雷达驱动绑定该地址后,系统会独占8080端口。- 第二个雷达驱动尝试再次绑定时,因端口已被占用而失败,导致数据丢失。
解决:基于物理网口的动态IP绑定
虽然修改官方驱动并非首选,但为解决多传感器兼容性问题,不得不进行源码级适配。核心思路是将通配符绑定改为指定网卡IP绑定:
- 自动探测机制:程序启动时,主动向两个雷达的IP发送测试数据包。
- 接口识别:记录工控机上实际接收到对应雷达数据的网卡接口IP。
- 例如:雷达A的数据由
192.168.2.11接口接收 → 绑定192.168.2.11:8080 - 雷达B的数据由
192.168.3.11接口接收 → 绑定192.168.3.11:8080
- 例如:雷达A的数据由
- 独立运行:两个驱动实例分别绑定不同网卡的IP,互不干扰。
为什么两个IP都用8080端口不会冲突?
操作系统在验证socket唯一性时,使用的是(IP, Port)二元组。只要IP地址不同,即使端口号相同,系统也会将其视为不同的数据通道并自动放行。因此,192.168.2.11:8080与192.168.3.11:8080可以共存。
积累与避坑
1. AI辅助编程
使用AI生成代码时,务必注意以下两点:
- 路径解耦:严禁AI硬编码绝对路径。要求所有文件路径通过配置文件或相对路径管理,确保代码在不同机器/环境下可移植。
- 模块化设计:明确要求AI按功能模块拆分代码,数据结构与业务逻辑分离。这样生成的代码才具备可扩展性,而非一次性脚本。
2. 墙面拟合标定的隐性偏差
使用墙面拟合算法标定外参时,必须保证小车与墙面严格平行。
- 后果:若存在初始偏角,标定结果会将该偏角“固化”到外参中。
- 表现:导航时小车实际走直线,但在RViz等可视化界面中,车体模型始终呈现一个固定偏角的平移运动。这种系统性偏差可能会在后续SLAM建图中会被放大,需格外警惕。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)