【声呐仿真】学习记录0-服务器配置docker、ros环境
- 前言
- 一、
- ~~0.设置mobaXterm~~
- 1.拉取镜像
- 2.服务器开启xhost,可视化(rviz、gazebo)
- 3.创建容器,挂载数据卷
- 4.测试宿主机与容器数据是否同步
- 5.测试
- 5.0测试xclock
- 5.1测试ros小乌龟
- 5.2测试rviz
- 5.3测试gazebo
- 5.4测试rqt
- 6.随手记:docker操作
- 7.随手记:tmux操作
前言
感觉学习和配置声呐仿真环境需要学习的东西很多,所以开一个系列笔记,记录一下学习过程。
当前进度:虚拟机里配置过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。