Loading... # 使用 Docker 部署 rm_vision > 文档所用环境: > > NUC- i5-1135g7+Iris Xe+ubuntu22.04 > > PC-i9-13900H+RTX4050+Windows 11 Pro Workstation **强烈推荐使用小交换机再接网线进行调试** 一根网线调车方案赛高! # 一. 卸载Docker 由于部分 minipc 预装的 Docker 版本可能过老,推荐安装最新 Docker ,否则可能导致构建镜像时报奇奇怪怪的错 [【docker】ubuntu完全卸载docker及再次安装*ubuntu卸载docker*GengMS\_DEV的博客-CSDN博客](https://gengms.blog.csdn.net/article/details/113743109) # 二. 安装Docker ```Shell sudo wget http://fishros.com/install -O fishros && bash fishros ``` ```Shell 8 ``` 时间可能较长(5\~8分钟),结束后输入 `docker version` 不报错即可 ## (选装)Docker图形化工具 ``` [吊炸天的 Docker 图形化工具 Portainer,必须推荐给你_docker_半隐退状态-华为云开发者联盟](https://huaweicloud.csdn.net/63311c07d3efff3090b52647.html?spm=1001.2101.3001.6650.14&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~activity-14-123550536-blog-130281524.235^v38^pc_relevant_default_base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~activity-14-123550536-blog-130281524.235^v38^pc_relevant_default_base&utm_relevant_index=23) ``` # 三. 部署 rm_vision ## 1. 创建镜像 此处示范的是使用 docker build 的方式创建镜像,**若已经有其他人已构建好的镜像建议直接 pull 即可,无需自行构建镜像。 > 建议将 `Dockerfile` 下载后,更改原有仓库链接为本队的开发仓库链接 需在含 `Dockerfile` 文件的目录下使用。`<image-name>` 是你为该镜像设置的名称,这里设置为 `rm_vision01`。该命令将会基于 Dockerfile 文件创建一个新的 Docker 镜像,并且将该镜像保存到本地 ```Shell sudo docker build -t rm_vision01 . ``` 此操作将花费约半小时 ## 2. 构建容器 ### a. 构建开发容器 ```Shell docker run -it --name rv_devel --privileged --network host -v /dev:/dev -v $HOME/.ros:/root/.ros -v ws:/ros_ws rm_vision01:latest #每次弄完可以试着更改-v ws:/ros_ws的文件夹名看看 如-v ws:/ros_wsa 将log迁移 #-v /dev:/dev #-v /dev:/dev -v $HOME/.ros:/root/.ros -v ws:/ros_ws \ 要不然会很抽象 ``` ### b. 构建运行容器 ```shell docker run -it --name rv_runtime --privileged --network host --restart always -v /dev:/dev -v \$HOME/.ros:/root/.ros -v ws:/ros*ws rm_vision01:latest #每次弄完可以试着更改-v ws:/ros*ws的文件夹名看看 如-v ws:/ros*wsa 将log迁移 ``` 以上可以算一个小节 如果会直接用的话直接跳到后面启动容器并运行部分,如果是新机器没部署过的 则继续往下 ## 四. 远程连接调车-ubuntu安装ssh插件 ```shell sudo apt install openssh-server service ssh start ``` 如果是精简版,没有安装自带的SSH服务,自行安装即可 使用apt命令进行安装,因为ubuntu是作为服务器,我们这里只安装server就行了,client的话有需求的可以自行安装。 ## 五. 远程连接调车-VSCode安装+SSH插件安装+连接nuc ### a.VSCode安装 Windows: [VSCodeUserSetup-x64-1.88.1.exe](https://flowus.cn/preview/35e3f239-95c8-4f7f-9de1-5216f374fd23) Linux: [VScode](https://flowus.cn/5366d93b-67ef-4ddf-a688-d49b0a8091fc) ### b.ssh插件安装 注意!两台机器(控制端和被控端)都要安装ssh插件!!! #### 1. **(windows下)** 切换语言: 先找到插件库图标   等待下载安装完成 重启VSCode 即可变成中文~ #### 2. **(windows下)** 搜索ssh并安装:  可能会让你重启VSCode 如果有没保存的保存一下当前项目即可 ### c.连接nuc 这里最好直接通过网线和小交换机将个人电脑和nuc连接,无线网络大概率会出现带宽不够的情况 foxglove会报错 首先,请查看Linux所在ip地址(有线网络连接时看有线网络的 不要弄错了!)如图:   - Ubuntu网络设置(以本设置为例) 1. 打开连接的有线网络IPv4设置(如上图) 2. 将地址设置为 **169.210.1.3** 3. 将子网掩码设置为 **255.255.255.0** 地址和网关的前三段要相同,网关最后一段设置为 **1** 。子网掩码固定为 **255.255.255.0** 当然 也可以用ifconfig命令 更快!自己查资料! 然后 找到Windows的网络设置(我是Windows11 Windows10的话自己上网搜吧都差不多) 先右键点击wifi小图标 选择网络和Internet设置     - Windows网络设置 1. 打开连接的有线网络IPv4设置 2. 将地址设置为 **169.210.1.2** 3. 将子网掩码设置为 **255.255.255.0** 地址和网关的前三段要相同,网关最后一段设置为 **1** 。子网掩码固定为 **255.255.255.0** 然后 进入VSCode 在插件侧边栏选择ssh插件:  点击SSH旁边的+号(移到那一栏上面就会浮现)  **点击添加后 在顶栏会出现这个!** **注意:** 填写时注意格式为 Shell ssh+用户名+@要连接的电脑的IP地址 > 如我要连接的电脑是169.210.1.3 > 用户名为cone 则为 ssh cone@169.210.1.3  然后点击添加至配置文件   然后点击刷新一下  可以发现我们的远程主机:  选择:在新窗口中连接  输入远程主机用户名对应的密码  恭喜 你已经连上了!鼠标从底往上拖动可以调出当前连接远程主机的终端!  ## 六. 远程连接调车-VSCode安装Docker插件并进行调试 为什么不在连接之前安装docker插件?当然你可以在本机的vscode也装一个,但为了确保你ssh过去也可以用,我们还是连上ssh之后再安装一遍比较好哈 ### a.Docker插件安装  ### b.常用操作 启动自瞄: 1.把C板用Micro-USB线与nuc连接(可以插在hub集线器上) 2.把海康相机用USB3.0Vision线与nuc直连!(不能插在hub集线器上) 然后打开VSCode 使用ssh与nuc连接 会提示让你输入密码 输入就好 在侧边栏找到docker插件 如果之前的容器配置一切正确,**将显示在containers栏**:  ## 启动容器并运行 如果遇到奇奇怪怪的Error,例如找不到文件, 重启容器后再 `source install/setup.bash` ,可以解决绝大部分报错 在 `ros_ws` 目录下执行 ### a. 如有VSCode: 开启容器  打开容器内shell    在两个终端内分别执行一次:(复制然后到VSCode的shell右键即可粘贴) ```Shell source install/setup.bash #回车 ```   在`rv_devel`的shell中: ```Shell ros2 launch rm_vision_bringup vision_bringup.launch.py ``` Tips: 记得连海康相机!  在`rv_runtime`的shell中: ``` ```Shell ros2 launch foxglove_bridge foxglove_bridge_launch.xml port:=8765 ``` ```  到此 你可以到下面的可视化步骤进行可视化的部署了 ``` ### b. 如没有VSCode 裸机运行(已放弃 难整): ``` `<CONTAINER ID>` 为 `rv_devel` 的 container ID。可输入`docker ps -a` 查询 ```Shell ``` docker start ``` ```Shell docker attach <CONTAINER ID> ``` ``` ```Shell ``` ros2 launch rm*vision*bringup vision\_bringup.launch.py ``` Tips: 记得连海康相机! `<CONTAINER ID>` 为 `rv_runtime` 的 container ID。可输入`docker ps -a` 查询 ```Shell docker start <CONTAINER ID> ``` ``` ```Shell ``` docker attach ``` ```Shell ros2 launch foxglove_bridge foxglove_bridge_launch.xml port:=8765 ``` ## 使用Foxglove-bridge可视化 [使用Foxglove-bridge可视化运行](https://flowus.cn/9aaf1ca3-7614-4ab1-b745-3749548a7b41) **这样 你的视觉就算启动了!** ### c.容器外测试 2.加了新代码进来 重新编译(build) ```Shell colcon build ``` ### d.容器内调试 1.找到配置文件: 目录:Files/ros*ws/src/rm*vision/rm*vision*bringup/config 下面的三个文件 可以看第八章的内容看看调什么  ### e.其他附加 ```Shell sudo chmod 777 /dev/ttyACM0 ``` 运行每个节点,必须新建终端并输入命令,且运行前需要执行 `source install/setup.bash` ```Shell source install/setup.bash ros2 launch rm_vision_bringup no_hardware.launch.py #或将urdf中的floating的joint改成fixed ``` ```Shell source install/setup.bash ros2 launch rm_vision_bringup vision_bringup.launch.py ``` * 单独运行子模块(一般用不上,写在这只为了有时开发要调用 rv 独立模块调试) ```Shell source install/setup.bash ros2 launch auto_aim_bringup auto_aim.launch.py ``` ```Shell source install/setup.bash ros2 launch hik_camera hik_camera.launch.py ``` ```Shell source install/setup.bash ros2 launch rm_serial_driver serial_driver.launch.py ``` ## 八. 使用说明 ### 必须修改的内容 * /ros*ws/rm*vision/rm*vision*bringup/config/camera\_info.yaml(标定文件) * /ros*ws/rm*vision/rm*vision*bringup/config/launch\_params.yaml中的xyz根据机械图纸修改 ### 调节参数 * exposure\_time:曝光时间 * timestamp\_offset:时间戳 * detect\_color:识别颜色,0-red,1-blue * binary\_thres:二值化参数 * 卡尔曼参数:r*xyz*factor r\_yaw ### fovglove可视化界面(具体参数自行探索,部分列举)图像 * /detector/result\_img/compressed:实际效果(必看) * /detector/number\_img/compressed:二值化效果 * /detector/result*img/compressed:数字识别效果 三维(必看) camera*info 图表(调参使用) /tracker/target.v\_yaw /tracker/target.yaw tracker/info.position.x 参数(调试使用) # 小技巧系列 ## 九. 常见报错指南 ### a.未连接摄像头 现象:报错 没找到摄像头  解决办法:不要通过hub连接摄像头 直连nuc ### b.未连接C板 或电控通信问题 现象: 报错 [INFO] [1713245092.983240835] [armor*tracker]: Message Filter dropping message: frame 'camera*frame' at time 1713245092.419 for reason 'discarding message **because the queue is full** 解决办法:TF没有正确建立 插上有通信的c板 检查usb是否有连接至设定的端口 默认dev/ttyACM0 可能的解决方法2:把urdf里floating的joint改成fixed 可能的解决方法3:使用下面命令以无硬件形式重新启动 ```Shell source install/setup.bash ros2 launch rm_vision_bringup no_hardware.launch.py #或将urdf中的floating的joint改成fixed ``` ### c.其他 ## 十. docker避免使用sudo 添加用户组 ```Shell # 添加docker用户组,一般已存在,不需要执 sudo groupadd docker # 将登陆用户加入到docker用户组中 sudo gpasswd -a $USER docker # 更新用户组 newgrp docker # 测试docker命令是否可以使用sudo正常使用 docker version ``` ## 十一. 设置Ubuntu系统SSH自启动 ```Shell # 开机自动启动ssh命令 sudo systemctl enable ssh # 关闭ssh开机自动启动命令 sudo systemctl disable ssh # 单次开启ssh sudo systemctl start ssh # 单次关闭ssh sudo systemctl stop ssh # 设置好后重启系统 reboot #查看ssh是否启动,看到Active: active (running)即表示成功 sudo systemctl status ssh ``` ## 十二. 开机自启动脚本设置: * Docker 常用命令 # Docker常用命令 ## 创建镜像 需要在含 `dockerfile` 文件的目录下使用。`<image-name>` 是你要为该 Docker 镜像设置的名称。该命令将会基于 Dockerfile 文件创建一个新的 Docker 镜像,并且将该镜像保存到本地仓库中。 \`\`\`Shell docker build -t . ``` ## 启动容器 ```Shell docker run -it <image-name> ``` ## 查看所有的容器 ``` ```Shell ``` docker ps -a ``` ## 查看正在运行的容器 ```Shell docker ps ``` ## 停止运行容器 ``` 新建一个终端: ```Shell ``` docker stop ``` `<CONTAINER ID>` 可通过 `docker ps` 命令查询 ## 重新开启容器 ```Shell docker start <CONTAINER ID> ``` ``` `<CONTAINER ID>` 可通过 `docker ps -a` 命令查询 Docker中 `run` 和 `start` 的区别: `run` 命令只在第一次运行镜像操作时使用,相当于执行了两步操作,将镜像放入容器中然后将容器启动;而 `start` 命令在重新启动已经存在的镜像时使用,使用该命令需要知道容器的 id 或者名字。 ```  最后修改:2024 年 12 月 17 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏
5 条评论
理性与感性平衡得当,读来既有深度又有温度。
建议增加个人经历分享,增强情感穿透力。
作者以简洁明了的语言,传达了深刻的思想和情感。
这是一篇佳作,无论是从内容、语言还是结构上,都堪称完美。
文章中的实用建议和操作指南,让读者受益匪浅,值得珍藏。