本周杂七杂八,没有什么大进展,先是换了激光雷达,又发现两个相同型号的激光雷达同时使用会有冲突,这个给解决了激光雷达又坏了,没办法,只得将原来使用的激光雷达换上来。接着就是进行激光雷达外参标定,尝试了各种标定方法,最后暂且使用了墙面拟合标定的数据。接下来就是装读码器并读取二维码数据等等...


1.双同型号激光雷达端口冲突

 现象:

在工控机上同时运行两个相同型号的激光雷达驱动实例时,第二个雷达无法显示点云,报端口冲突错误。

分析:

排查后发现是官方ROS驱动的硬编码缺陷导致的:

  • 官方驱动将数据接收IP写死为 0.0.0.0:8080
  • 0.0.0.0 是通配符地址,当第一个雷达驱动绑定该地址后,系统会独占 8080 端口。
  • 第二个雷达驱动尝试再次绑定时,因端口已被占用而失败,导致数据丢失。

解决:基于物理网口的动态IP绑定

虽然修改官方驱动并非首选,但为解决多传感器兼容性问题,不得不进行源码级适配。核心思路是将通配符绑定改为指定网卡IP绑定

  1. 自动探测机制:程序启动时,主动向两个雷达的IP发送测试数据包。
  2. 接口识别:记录工控机上实际接收到对应雷达数据的网卡接口IP。
    • 例如:雷达A的数据由 192.168.2.11 接口接收 → 绑定 192.168.2.11:8080
    • 雷达B的数据由 192.168.3.11 接口接收 → 绑定 192.168.3.11:8080
  3. 独立运行:两个驱动实例分别绑定不同网卡的IP,互不干扰。

为什么两个IP都用8080端口不会冲突?
操作系统在验证socket唯一性时,使用的是 (IP, Port) 二元组。只要IP地址不同,即使端口号相同,系统也会将其视为不同的数据通道并自动放行。因此,192.168.2.11:8080192.168.3.11:8080 可以共存。


积累与避坑

1. AI辅助编程

使用AI生成代码时,务必注意以下两点:

  • 路径解耦:严禁AI硬编码绝对路径。要求所有文件路径通过配置文件或相对路径管理,确保代码在不同机器/环境下可移植。
  • 模块化设计:明确要求AI按功能模块拆分代码,数据结构与业务逻辑分离。这样生成的代码才具备可扩展性,而非一次性脚本。

2. 墙面拟合标定的隐性偏差

使用墙面拟合算法标定外参时,必须保证小车与墙面严格平行

  • 后果:若存在初始偏角,标定结果会将该偏角“固化”到外参中。
  • 表现:导航时小车实际走直线,但在RViz等可视化界面中,车体模型始终呈现一个固定偏角的平移运动。这种系统性偏差可能会在后续SLAM建图中会被放大,需格外警惕。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐