鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    驱动雷达报错

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    雷达驱动 stdbadalloc
    3
    13
    623
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 7
      Jason
      最后由 编辑

      问题描述:

      驱动雷达报错

      具体细节和上下文:

      输入:
      xhost + && sudo docker run -it --rm -v /dev:/dev -v /dev/shm:/dev/shm --privileged -v /tmp/.X11-unix:/tmp/.X11-unix --device /dev/snd -e DISPLAY=unix$DISPLAY -p 8889:8888 registry.cn-hangzhou.aliyuncs.com/fishros/fishbot_laser

      选择1

      返回:
      UART2SOCKET:8888->/tmp/fishbot_laser
      Prepare to Accept connect!
      3 <socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('172.17.0.3', 8888), raddr=('192.168.0.104', 49950)> 4
      PTY: Opened /dev/pts/6 for 0.0.0.0:8888
      [YDLIDAR INFO] Current ROS Driver Version: 1.4.5
      [YDLIDAR]:SDK Version: 1.4.5
      [YDLIDAR]:Lidar running correctly ! The health status: good
      [YDLIDAR] Connection established in [/tmp/fishbot_laser][115200]:
      Firmware version: 1.5
      Hardware version: 1
      Model: S4
      Serial: 2021031700000035
      [YDLIDAR]:Fixed Size: 340
      [YDLIDAR]:Sample Rate: 3K
      [YDLIDAR INFO] Current Sampling Rate : 3K
      [YDLIDAR INFO] Now YDLIDAR is scanning ......
      terminate called after throwing an instance of 'std::bad_alloc'
      what(): std::bad_alloc

      尝试过的解决方法:

      模式已切换,网络环境正常,没有scan topic

      参考资料:
      https://blog.csdn.net/aibao_b/article/details/135238698

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        std::bad_alloc异常在C++程序中通常表示内存分配失败。这可能是因为系统内存不足,或者程序试图分配比可用内存更大的内存块。在你给出的场景中,这个问题发生在运行一个Docker容器内的ROS激光雷达驱动程序时。

        以下是一些建议的解决步骤:

        1. 检查系统资源:

          • 确保你的系统有足够的可用内存和交换空间。
          • 使用free -h或top命令来检查内存使用情况。
          • 如果可能的话,关闭一些不必要的程序或服务以释放内存。
        2. 调整Docker容器内存限制:

          • Docker容器默认没有内存限制,但你可以设置限制。如果设置了限制并且它太低,可能会导致std::bad_alloc异常。你可以使用--memory标志来增加内存限制。
        3. 检查Docker容器内进程:

          • 使用docker exec -it <container_id> bash进入容器内部。
          • 使用top或htop命令检查容器内的内存使用情况。
          • 如果发现有进程占用了大量内存,考虑优化它或杀死它。
        4. 检查ROS节点内存使用:

          • 如果可能的话,使用ROS的内存分析工具(如rostopic bw、rosnode info)来检查哪个节点可能在使用大量内存。
        5. 更新或修复程序:

          • 如果这个问题是由程序中的一个bug引起的,尝试更新到最新版本的ROS驱动程序。
          • 检查是否有已知的bug修复或内存管理优化。
        6. 检查Docker卷和设备挂载:

          • 确保/dev、/dev/shm和/tmp/.X11-unix等卷和设备被正确挂载,并且没有权限问题。
        7. 查看日志和错误消息:

          • 检查ROS日志和Docker容器日志,看是否有更详细的错误信息。
          • 这可能会给你关于问题来源的更多线索。
        8. 搜索相关错误:

          • 在线搜索std::bad_alloc和ROS激光雷达驱动程序的组合,看看是否有其他人遇到过类似的问题并找到了解决方案。
        9. 联系支持:

          • 如果以上步骤都不能解决问题,考虑联系ROS社区或激光雷达驱动程序的开发者支持。

        最后,注意你提供的命令中使用了--privileged标志,这会给容器几乎所有的宿主机权限。虽然这有时是必要的,但它也增加了安全风险。确保你了解这个标志的含义,并在可能的情况下避免使用它。


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        1 条回复 最后回复 回复 引用 0
        • 小鱼小
          小鱼 技术大佬 @763141425
          最后由 编辑

          @763141425 虚拟机还是实体机,电脑内存硬盘配置是什么样子的,这个看起来不太相关网络问题,不过最好也提供一下网络结构

          新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

          7 2 条回复 最后回复 回复 引用 0
          • 7
            Jason @小鱼
            最后由 编辑

            @小鱼 实体机,16G内存,256G硬盘,电脑通过网线连接路由器,可以PING通雷达。

            输入~$ ros2 topic list
            反馈:/parameter_events
            /rosout
            /scan
            这一步都是正常的

            再输入ros2 topic hz /scan
            雷达驱动的终端就报错了

            小鱼小 1 条回复 最后回复 回复 引用 0
            • 7
              Jason @小鱼
              最后由 编辑

              @小鱼 换了两台电脑都这样

              1 条回复 最后回复 回复 引用 0
              • 小鱼小
                小鱼 技术大佬 @763141425
                最后由 编辑

                @763141425 报什么错呢

                新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                7 1 条回复 最后回复 回复 引用 0
                • 7
                  Jason @小鱼
                  最后由 编辑

                  @小鱼 terminate called after throwing an instance of 'std::bad_alloc'
                  what(): std::bad_alloc

                  7 1 条回复 最后回复 回复 引用 0
                  • 7
                    Jason @763141425
                    最后由 编辑

                    @小鱼

                    完整的代码:

                    1. 驱动雷达
                    2. 建图测试
                    3. 退出
                      #? 1
                      UART2SOCKET:8888->/tmp/fishbot_laser
                      Prepare to Accept connect!
                      3 <socket.socket fd=6, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('172.17.0.3', 8888), raddr=('192.168.0.105', 55719)> 4
                      PTY: Opened /dev/pts/6 for 0.0.0.0:8888
                      [YDLIDAR INFO] Current ROS Driver Version: 1.4.5
                      [YDLIDAR]:SDK Version: 1.4.5
                      [YDLIDAR]:Lidar running correctly ! The health status: good
                      [YDLIDAR] Connection established in [/tmp/fishbot_laser][115200]:
                      Firmware version: 1.5
                      Hardware version: 1
                      Model: S4
                      Serial: 2021031700000035
                      [YDLIDAR]:Fixed Size: 330
                      [YDLIDAR]:Sample Rate: 3K
                      [YDLIDAR INFO] Current Sampling Rate : 3K
                      [YDLIDAR INFO] Now YDLIDAR is scanning ......
                      terminate called after throwing an instance of 'std::bad_alloc'
                      what(): std::bad_alloc
                      ^CTraceback (most recent call last):
                      File "/workspace/install/fishbot_laser_driver/lib/fishbot_laser_driver/laser_x2", line 33, in <module>
                      sys.exit(load_entry_point('fishbot-laser-driver==0.0.0', 'console_scripts', 'laser_x2')())
                      File "/workspace/install/fishbot_laser_driver/lib/python3.10/site-packages/fishbot_laser_driver/fishbot_laser_x2.py", line 83, in main
                      SocketServer()
                      File "/workspace/install/fishbot_laser_driver/lib/python3.10/site-packages/fishbot_laser_driver/fishbot_laser_x2.py", line 35, in init
                      self.main()
                      File "/workspace/install/fishbot_laser_driver/lib/python3.10/site-packages/fishbot_laser_driver/fishbot_laser_x2.py", line 68, in main
                      os.write(write_fd, data)
                      KeyboardInterrupt
                      [ros2run]: Interrupt
                    小鱼小 1 条回复 最后回复 回复 引用 0
                    • 小鱼小
                      小鱼 技术大佬 @763141425
                      最后由 编辑

                      @763141425 什么系统诶,

                      不行试试这个:

                      https://fishros.org.cn/forum/topic/1524/拓展3-fishbot-树莓派配置建图导航

                      新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                      7 1 条回复 最后回复 回复 引用 0
                      • 7
                        Jason @小鱼
                        最后由 编辑

                        @小鱼

                        系统是Ubuntu 24.04,ros2是jazzy。

                        小鱼小 1 条回复 最后回复 回复 引用 0
                        • 小鱼小
                          小鱼 技术大佬 @763141425
                          最后由 编辑

                          @763141425 请使用humble

                          新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                          7 1 条回复 最后回复 回复 引用 0
                          • 7
                            Jason @小鱼
                            最后由 编辑

                            @小鱼

                            一键安装好像只支持jazzy和rolling版本

                            ubuntu要换成22.04版本么

                            小鱼小 1 条回复 最后回复 回复 引用 0
                            • 小鱼小
                              小鱼 技术大佬 @763141425
                              最后由 编辑

                              @763141425 是的,换22

                              新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

                              1 条回复 最后回复 回复 引用 0
                              • 第一个帖子
                                最后一个帖子
                              皖ICP备16016415号-7
                              Powered by NodeBB | 鱼香ROS