环境配置
安装docker
sudo curl -sSL https://get.docker.com | sh
安装nvidia驱动
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \
sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \
sudo tee /etc/apt/sources.list.d/nvidia-container-runtime.list
sudo apt-get update
sudo apt-get install nvidia-container-runtime
拉取镜像
sudo docker pull grantli625/ubuntu20-desktop-gpu:ubuntu-20.04
使用教程
创建容器
# 宿主机需要运行xhost允许所有用户访问X11服务(运行一次即可),宿主机环境变量$DISPLAY必须为0
xhost +
# 支持ssh和 3D GUI
sudo docker run -d --restart=on-failure \
--name grantli \
--cap-add=SYS_PTRACE \
--gpus all \
--shm-size=1024m \
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
-p 10022:22 \
-p 14000:4000 \
grantli625/ubuntu20-desktop-gpu:ubuntu-20.04
需要开启多个Docker容器,需要修改grantli
、10022:22
、14000:4000
,其中-p左边是宿主机的端口,右边是docker容器的端口,一般改左边端口即可。
远程软件
NoMachine 下载地址,或者运行下面命令直接下载安装:
wget https://download.nomachine.com/download/8.1/Linux/nomachine_8.1.2_1_amd64.deb
sudo dpkg -i nomachine_8.1.2_1_amd64.deb
连接端口为 172.17.0.2:14000
,用户名和密码均为ubuntu
启动GPU加速
打开.bashrc,把文件中的#export __GLX_VENDOR_LIBRARY_NAME=nvidia
注释取消,如下:
export __GLX_VENDOR_LIBRARY_NAME=nvidia
然后刷新环境:
source .bashrc
Demo1:建图导航
1. 建图
# 启动gazebo
roslaunch turtlebot3_gazebo turtlebot3_world.launch
# 启动SLAM
roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=gmapping
# 键盘控制TurtleBot3
roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
# 保存地图
rosrun map_server map_saver -f ~/map
2. 导航
# 运行仿真模型
roslaunch turtlebot3_gazebo turtlebot3_world.launch
# 导航
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=$HOME/map.yaml
Demo2:机械臂运动规划
# 启动UR5机械臂模型
roslaunch ur_gazebo ur5.launch
# 启动moveit
roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch sim:=true
# 启动rviz
roslaunch ur5_moveit_config moveit_rviz.launch config:=true
打包镜像
# 查看镜像
sudo docker images
# 查看已启动的容器
sudo docker ps
# 进入这个容器
sudo docker exec -it test_ubuntu bash
# 更新一下镜像源
set -ex \ && sed -i 's@security.debian.org@mirrors.aliyun.com@' /etc/apt/sources.list
set -ex \ && sed -i 's@deb.debian.org@mirrors.aliyun.com@' /etc/apt/sources.list
sudo apt-get update
#退出容器
exit
# 打包更新镜像(test_ubuntu为查询到的容器名称,根据实际的更改)
sudo docker commit test_ubuntu grantli625/ubuntu20-desktop-gpu:ubuntu-20.04
# 查看镜像
sudo docker images
# 登陆docker(grantli625为docker用户名)
sudo docker login -u grantli625
# 上传镜像
sudo docker push grantli625/ubuntu20-desktop-gpu:ubuntu-20.04
GPU加速应用
3D硬件渲染加速
- vglrun路径为/usr/NX/scripts/vgl/vglrun,root下需使用全路径,或者加入PATH环境变量
# 测试VirtualGL
vglrun glxinfo | grep -i "opengl"
显示包含VirtualGL则表示正确 host主机上的DISPLAY必须为:0
- 运行3D软件时,需要加上vglrun命令前缀,如:
vglrun gazebo
Note:
不使用vglrun也能运行3D程序,将采用软件OpenGL模拟,占用大量CPU.
CUDA使用说明
需要在.bashrc文件中加入以下语句更新环境变量
export CUDA_HOME=/usr/local/cuda
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
Docker用法
容器操作
# 列出所有容器ID
sudo docker ps -aq
# 查看所有运行或者不运行容器
sudo docker ps -a
# 停止所有的container(容器)
sudo docker stop $(sudo docker ps -aq)
# 删除所有停止的容器
sudo docker container prune
# 删除所有container(容器)
sudo docker rm $(sudo docker ps -aq)
# 停止、启动、杀死、重启一个容器
sudo docker stop Name或者ID
sudo docker start Name或者ID
sudo docker kill Name或者ID
sudo docker restart name或者ID
# docker进入容器,查看配置文件
sudo docker exec :在运行的容器中执行命令
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN(标准输入) 打开,以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
sudo docker exec -it f94d2c317477 /bin/bash
# 修改配置、退出容器
1、如果要正常退出不关闭容器,请按Ctrl+P+Q进行退出容器
2、如果使用exit退出,那么在退出之后会关闭容器,可以使用下面的流程进行恢复
使用sudo docker restart命令重启容器
使用sudo docker attach命令进入容器
镜像操作
# 镜像查询
sudo docker images
# 删除images(镜像)
sudo docker rmi <image id>
# 删除所有images(镜像)
sudo docker rmi $(sudo docker images -q)
# 强制删除全部镜像
sudo docker rmi -f $(sudo docker images -q)
# 所有删除不使用的镜像
sudo docker image prune --force --all
评论区