Docker拉取ubuntu22.04镜像使用ROS2 humble及仿真工具可视化进行导航
创建Ubuntu22.04 容器
docker pull ubuntu:22.04 #下载22.04镜像
docker images #查看已下载镜像
#根据镜像创建容器
sudo docker run -it -v /home/lab118/BD_ICL/tools_BD/cailib_data:/calib_data -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=:0 --net=host -e GDK_SCALE -e GDK_DPI_SCALE --privileged --gpus all -e NVIDIA_DRIVER_CAPABILITIES=all --name kalibr_te_fina2 kalibr_li_calib_wyw:new_9_12 bash
sudo docker run -it -v /home/lab118/BD_ICL/tools_BD/cailib_data:/calib_data -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=:0 --net=host -e GDK_SCALE -e GDK_DPI_SCALE --privileged --gpus all -e NVIDIA_DRIVER_CAPABILITIES=all --name kalibr_te_fina2 kalibr_li_calib_wyw:new_9_12 bash
其中 -v /home/lab118/BD_ICL/tools_BD/cailib_data:/calib_data 是将主机的目录/home/lab18/……到容器的/calib_data,用于共享数据,改为自己的目录;
-v /tmp/.X11-unix:/tmp/.X11-unix 也是一个目录,这是为了容器内的GUI应用能显示到主机,用于图形化界面;
-e DISPLAY=:0 用那个显示器进行显示,需要自己查下 echo $DISPLAY,一般是0或者1,我的是1;
-e GDK_SCALE 设置GTK 缩放因子,未指定值
-e GDK_DPI_SCALE 设置GTK 缩放因子,未指定值
-e NVIDIA_DRIVER_CAPABILITIES=all 启用Nvidia驱动的所有功能;
–privileged 赋予容器完全的权限
–gpus all 允许容器访问主机所有GPU
–net=host 容器使用主机网络
–name kalibr_te_fina2 kalibr_li_calib_wyw:new_9_12 创建名为kalibr_te_fina2的容器,用的镜像是kalibr_li_calib_wyw:new_9_12
创建完成后,在主机中增加X11权限
xhost +local:root # 允许 Docker 容器访问 X11
可以在docker中使用xeyes命令,看主机有无眼睛出现,出现即表示图形化界面可用;
安装ROS2以及nav2功能包
使用鱼香ROS的一键安装指令
wget http://fishros.com/install -O fishros && . fishros
安装Nav2
在共享数据文件夹中创建工作空间并克隆代码
mkdir -p ~/nav2_ws/src
cd ~/nav2_ws/src
git clone https://github.com/ros-planning/navigation2.git --branch humble
安装依赖并编译(使用鱼香ROS中的rosdepc,也是用一键安装指令进行安装)
cd ~/nav2_ws
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble
colcon build --symlink-install
Docker中的Gazebo以及Rviz可视化使用
Rviz使用,之前创建docker的时候已经配置过可视化了,可以直接使用
ros2 run rviz2 rviz2
第一次打开gazebo可能会比较慢,如果没有报错可以多等等;
如果是输入gazebo后回车,什么也没有显示,直接是新的一行了,可以ps -a看看有没有gazebo进程,如果存在gazebo进程没有中断,就会出现这种情况;
过程中遇到的问题,单独启动gazebo可以,但是运行launch启动会报错;
我是运行
ros2 launch gazebo_ros gazebo.launch.py 报错,然后看进程只有gzserver没有gaclient,
ros2 launch gazebo_ros gzserver.launch.py
ros2 launch gazebo_ros gzclient.launch.py
报错
[gzclient-2] gzclient: /usr/include/boost/smart_ptr/shared_ptr.hpp:728: typename boost::detail::sp_member_access::type boost::shared_ptr::operator->() const [with T = gazebo::rendering::Camera; typename boost::detail::sp_member_access::type = gazebo::rendering::Camera*]: Assertion `px != 0’ failed.
然后运行下面命令后解决,最后把这个加入到.bashrc中了
source /usr/share/gazebo/setup.sh
然后就可以打开gazebo了