【ROS&Docker】学习笔记——关于ROS和Docker的一些解决方案

问题:想看yolo的detect.py在哪里输出概率

解决方案:找到CSDN文章YOLOv5 v5.0 输出每个边界框所预测物体的对象概率(probability)和分类置信度(confidence)文章链接

  • 还没看文章内容,

  • 通过查看yolov5 detect.py文件调试输出预测的置信度时候发现了一个变量:

    tensor([[  4.40344,   3.12254, 639.46259, 482.80286,   0.73714,   0.00000]])
    
  • 又打印出pred变量的type发现是<class 'list'>。什么是Class list?还需要进一步明确,需要询问GPT。

  • 姑且先认定为list,之后又打印出pred[0]变量的type发现是<class 'torch.Tensor'>,并且打印出变量内容得知

    pred content: tensor([], size=(0, 6))
    
  • 所以tensor的size是什么意思?

  • 搜索资料得知:
    x = torch.tensor([[1, 2, 3, 4], [5, 6, 7, 8]]) 为例,
    print(x[0, 1, 1]) 的结果为tensor(6)

    • 第一个0代表维度,因为x只有一个维度,所以只能是0
    • 第一个1代表[5, 6, 7, 8]的索引。
    • 后一个1代表[5, 6, 7, 8]6的索引。
  • 之后tensor([[ 4.40344, 3.12254, 639.46259, 482.80286, 0.73714, 0.00000]]) 是通过a = pred[0][0,4]输出其中0.73714的概率数值。

问题:cannot import name 'OrderedDict' from 'typing' (D:\Python3.7.0\lib\typing.py)

解决方案:将报错地方的maxvit文件中的from typing import Any, Callable, List, Optional, Sequence, Tuple, OrderedDict改掉。先使用pip3 install typing_extensions模块安装,然后添加from typing_extensions import OrderedDict

问题:AttributeError: Can‘t get attribute ‘DetectionModel‘ on <module ‘models.yolo‘

报错原因:YOLOv5新旧版本不兼容,models下的yolo.py文件缺少DetectionModel模块代码。

解决步骤:找到models文件夹下的yolo.py,查找DetectionModel模块,将其代码(Segment部分、BaseModel部分、DetectionModel部分)粘贴至报错的yolo.py文件中。粘贴完后,运行yolo.py文件。

问题:不知道Jetson orin nano GPIO的引脚分布图,找到了网上Jetson nano的GPIO图发现9和25是GND,但是用通断档测没有声音。

解决方案:直接插上,使用pip3 install Jetson.GPIO安装,运行相应的Python代码,发现有声音输出,但声音不大。更换成亮灯可以解决。所以Jetson orin nano和Jetson nano使用的是相同的GPIO分布。

ROS Docker问题汇总

问题:虚拟机无法连接到网络

解决步骤:
  1. 先关闭虚拟机。
  2. 在虚拟网络编辑器中重置网络设置。
  3. 在虚拟机设置中选择桥接模式,不要复制物理网络状态。

问题:Ubuntu中的simulator和Windows中的UE4无法连接

解决步骤:
  1. 确保两者的IP地址都是分配给物理机的外部路由IP地址。
  2. 确保虚拟机能够连接到外网。使用ifconfig命令查看,确保不只有一个回环地址,还有一个外部路由分配的IP地址。只有这样才能保证两者连接成功。

问题:Ubuntu中的Base控制的程序和simulator无法连接

解决步骤:
  1. 确保在.bashrc文件中,ROS_MASTER_URL等变量设置为本机的回环地址。
  2. 在报错的yolo.py文件中确认ROS_MASTER_URL等变量是否设置为本机的回环地址。
  3. 在终端中重新运行catkin build命令编译simulator

问题:ifconfig命令无法找到docker0(即Docker的虚拟网卡docker0)的IP地址,导致Docker无法使用网络

解决步骤:
  1. 检查默认的Docker bridge配置,建议改成默认的172.17.0.1/16

  2. 临时解决方法:手动添加一个IP配置。

    • 运行以下命令:

      sudo ip addr add 172.17.0.1/16 dev docker0
      
    • 再运行ip addr命令,就能看到IP信息了。

  3. 彻底解决方法:

    • 检查网络服务,确认使用的是NetworkManager

    • 使用nmcli工具查看接口信息,确保有接口并且已建立连接。

    • 如果缺少连接信息,手动创建一条连接:

      sudo nmcli connection add type bridge ifname docker0 con-name docker0  ip4 172.17.0.
      

1/16 autoconnect true
```

  • 运行ip addr命令,就能看到IP信息了。

反向查找Windows中UE4场景所占用的端口

  1. 打开命令提示符(cmd)并执行命令netstat -ano

  2. 如果内容太多,在任务管理器中找到UE4的PID,例如36208或31208。

  3. 使用精确查找命令:

    • 执行命令netstat -ano|findstr "31208",如果没有结果,执行命令netstat -ano|findstr "36208"

    • 可能会得到如下结果:

      TCP    0.0.0.0:31245          0.0.0.0:0              LISTENING       36208
      TCP    192.168.8.106:41451    0.0.0.0:0              LISTENING       36208
      TCP    192.168.8.106:41451    192.168.8.107:42994    ESTABLISHED     36208
      TCP    192.168.8.106:41451    192.168.8.107:43008    ESTABLISHED     36208
      TCP    192.168.8.106:41451    192.168.8.107:43018    ESTABLISHED     36208
      
  4. 查看simulatorroswrapper是如何发布该端口的。在simulator.sh中找到以下代码:

    export ROS_IP=172.17.0.1
    export ROS_MASTER_URI=http://localhost:11311
    

    推测Docker的IP应该是…

  5. 新问题:现在Docker桥接了虚拟机能上网了,安装了ping指令后发现可以ping通主机的172.17.0.1,但无法连接到主机的master上。

  6. 解决:先确定master的IP是什么?

  7. 解答:使用指令netstat -anp查看应用占用的IP。找到了simulator的发布信息tcp 192.168.8.107:34076 192.168.8.106:41451 ESTABLISHED 47741/airsim_node

问题:什么是ROS_IP?什么是ROS_MASTER_URI?

  • ROS_MASTER_URI是指启动roscore的地址,即master地址。

  • ROS_IP是本地IP地址,类似于身份证。

  • 当需要在远程服务器和本地机器之间进行ROS通信,或者在不同平台之间进行ROS通信时,需要告知哪台机器是控制者,哪台机器是被控制者。

  • 例如,当电脑A使用ROS操作系统控制机器人(B、C、D)时,ROS_MASTER_URI是主机的IP地址,即电脑A的IP地址,而不是机器人B、机器人C或机器人D的IP地址。

  • 设置主机的环境变量:

    export ROS_MASTER_URI=http://10.192.150.34:11311
    export ROS_IP=10.193.28.102
    
  • 设置从机的环境变量:

    export ROS_MASTER_URI=http://10.192.150.34:11311
    export ROS_IP=10.193.28.103
    
  • 正确设置主机和从机的IP地址后,ROS才能保证彼此之间的正常通信。

问题:测试两个Docker容器之间是否能够ping通,提示bash: ping: command not found

解决步骤:
  • bash: ping: command not found的主要原因是当前环境中的CentOS基础镜像只包含了简单的操作系统,相当于裸机状态,如果想使用其他命令,需要手动安装。

  • 执行以下命令:

    apt-get update
    apt install iputils-ping
    apt install net-tools
    

ROS常用命令:

  1. 查看网卡接口:/interface print
  2. 给网口添加IP地址:/ip address add address=192.168.1.254/24 interface=ether1
  3. 移除接口IP地址:/ip address remove 0
  4. 重启系统:/system reboot
  5. 关闭系统:/system shutdown
  6. 恢复原始状态:/system reset
  7. 查看IP配置:/ip export/ip address print
  8. 查看授权:/system license print
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值