【声呐仿真】学习记录0-服务器配置docker、ros环境

前言

感觉学习和配置声呐仿真环境需要学习的东西很多,所以开一个系列笔记,记录一下学习过程。

当前进度:虚拟机里配置过ros环境;简单了解rqt、rviz、gazebo;知道uuv_simulator、DAVE的存在

目前安排:因为实体机没有显卡,所以重新在服务器上配置docker、ros环境

需要注意:若要配置声呐传感器,必须要有显卡

一、

当前服务器系统:Ubuntu22.04,服务器上已经有docker,需要在docker里配置 Ros Noetic,最后可视化gazebo、rviz等

0.设置mobaXterm

经测试,不进行此步操作也可打开xclock

如何可视化docker:以ROS环境为例(例如Gazebo,Rviz)_docker中启用gazebo-
在这里插入图片描述
然后ssh连接服务器,使用

xhost +
xclock

测试可视化是否开启

1.拉取镜像

在服务器上拉取noetic镜像

sudo docker pull osrf/ros:noetic-desktop-full

在这里插入图片描述

2.服务器开启xhost,可视化(rviz、gazebo)

xhost +	#表关闭访问控制,允许任何主机访问本地的X服务器。
xhost -	#表示关闭。  

显示如下,即成功:
在这里插入图片描述

每次重启容器均需要在服务器执行xhost +!

3.创建容器,挂载数据卷

sudo docker run -it -v /home/you_name/ros_noetic:/data --device=/dev/dri --group-add video --volume=/tmp/.X11-unix:/tmp/.X11-unix  --env="DISPLAY=$DISPLAY" --env="QT_X11_NO_MITSHM=1" --name=ros_noetic osrf/ros:noetic-desktop-full  /bin/bash

在主机创建/home/you_name这里需要修改!/ros_noetic文件夹,将其挂载到容器的/data目录。

–device=/dev/dri: 将主机的/dev/dri设备添加到容器中,通常用于图形加速。
–group-add video: 将容器的用户添加到主机的video组,通常与图形设备相关。
–volume=/tmp/.X11-unix:/tmp/.X11-unix: 将主机的X11 Unix套接字目录挂载到容器中,允许容器显示X11应用程序。
–env=“DISPLAY=$DISPLAY”: 设置环境变量DISPLAY,用于X11应用程序定位X服务器。
–env=“QT_X11_NO_MITSHM=1”: 禁用QT的MIT-SHM扩展,该扩展在某些X服务器配置中可能会导致问题。(必须加)
–name=ros_noetic: 为容器指定一个名称ros_noetic。
——ubuntu22.04+Docker+ros noetic环境配置-

不远程的话用这个:

sudo docker run -it --gpus all -v /home/you_name/ros_noetic:/data --device=/dev/dri --group-add video --volume=/tmp/.X11-unix:/tmp/.X11-unix  --env="DISPLAY=$DISPLAY" --env="QT_X11_NO_MITSHM=1" --name=ros_noetic -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all osrf/ros:noetic-desktop-full  /bin/bash

在docker中使用nvidia显卡:
docker run -itd --gpus all --name 容器名 -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all 镜像名
怎么在docker中使用nvidia显卡
报错Error response from daemon: could not select device driver ““ with capabilities: [[gpu]]:【声呐仿真】学习记录0.5-在docker中使用nvidia显卡

远程的话用这个:

sudo docker run -it -p 50003:22 --gpus all -v /home/you_name/ros_noetic:/data --device=/dev/dri --group-add video --volume=/tmp/.X11-unix:/tmp/.X11-unix  --env="DISPLAY=$DISPLAY" --env="QT_X11_NO_MITSHM=1" --name=ros_noetic -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all osrf/ros:noetic-desktop-full  /bin/bash

ssh远程docker:
docker run -it -p 50003:22 镜像名
【声呐仿真】学习记录0.5-配置ssh远程连接docker、在docker中使用nvidia显卡

4.测试宿主机与容器数据是否同步

Ubuntu20.04+Docker+ROS Noetic+LOAM环境配置
在这里插入图片描述

5.测试

Tmux 可用于在一个终端窗口中运行多个终端会话。不仅如此,还可以通过 Tmux 使终端会话运行于后台或是按需接入、断开会话。
Tmux 使用教程 - 阮一峰的网络日志

因为是在命令行操作,没有可视化窗口
使用Tmux就可以像GUI上一样多开终端
——by一个刚接触Tmux的小白,若有错误请指出,谢谢

# Ubuntu 或 Debian
sudo apt-get install tmux

首先终端输入Tmux,然后ctrl+b激活快捷键,然后输入快捷键:
%:划分左右两个窗格
“:划分左右两个窗格
方向键:光标切换到其他窗格

5.0测试xclock

遇到问题,在容器内部,xclock、rviz报错:
在这里插入图片描述
在这里插入图片描述

display为空,应该是在创建容器的时候,环境变量赋值错误,解决:

echo 'export DISPLAY=:0.0' >> ~/.bashrc	#没试
或者echo 'export DISPLAY=服务器DISPLAY端口,localhost应该需要改为服务器地址:10.0' >> ~/.bashrc	#没试
或者echo 'export DISPLAY=mobaxterm非本地DISPLAY端口:0.0' >> ~/.bashrc	# 我用的这个
然后别忘了source ~/.bashrc

在这里插入图片描述

解决qt.qpa.xcb: could not connect to display问题-

5.1测试ros小乌龟

tmux
roscore
ctrl +b %
rosrun turtlesim turtlesim_node
ctrl +b "
rosrun turtlesim turtle_teleop_key

在这里插入图片描述


如果不能正常运行roscore,尝试终端输入

./ros_entrypoint.sh

在这里插入图片描述

在容器内部有一个ros_entrypoint.sh的文件,./ros_entrypoint.sh执行这个脚本
——ubuntu20.04在docker下运行ros-noetic进行开发

5.2测试rviz

在这里插入图片描述

5.3测试gazebo

在这里插入图片描述

5.4测试rqt

在这里插入图片描述

6.随手记:docker操作

#以下为个人理解
sudo docker start id # 开启
sudo docker start -ia id # 同attach,最好不要在启动一个容器后,再用这个命令,我没测试过,可能会开两个容器
sudo docker stop id # 关闭

sudo docker attach id # 进入容器正在执行的终端,不会启动新的终端,退出容器但不想容器停止,则按住Ctrl+P+Q退出
sudo docker exec -it id /bin/bash # 在容器启动的前提下,新开一个终端

docker进入当前正在运行容器的两种方式(exec和attach的区别)

在这里插入图片描述

所以使用exec命令和tmux多开终端功能一样(单指可以输入命令的终端命令行功能,其他效果不了解),如果你是有桌面的系统,你可以在多个终端里使用exec命令,进入同一容器的多个伪终端

sudo docker exec -it id /bin/bash
roscore

sudo docker exec -it id /bin/bash
rosrun turtlesim turtlesim_node

sudo docker exec -it id /bin/bash
rosrun turtlesim turtle_teleop_key

7.随手记:tmux操作

ctrl+b,然后按":",进入命令行模式
输入set -g mouse on
设置成鼠标模式,能直接鼠标点窗口切换,滚轮滚屏

tmux一次性kill所有窗口
命令行模式:killw -a

在服务器上打开一个tmux,然后本地连接上去
ssh断掉后,继续在服务器执行任务

1.新建会话tmux new -s my_session。
2.在 Tmux 窗口运行所需的程序。
3.按下快捷键Ctrl+b d将会话分离。
4.下次使用时,重新连接到会话tmux attach-session -t my_session。

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tfnmdmx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值