前言
因为本人系统使用ubuntu22.04,所以无法直接安装ros1,也尝试过从源码进行编译,但是以失败告终,所以便想到使用docker安装ros-noetic版本,在使用鱼香 ros一键安装的过程中,发现安装脚本并没有挂载usb设备和网络,所以有了本篇博客。
安装流程
一 确保已经安装docker
- (我觉得是废话)
二 拉取docker镜像
使用如下命令:
sudo docker pull [name]
这里[name]
里面填写的东西我就直接copy鱼香ros大大的了(一键安装脚本里面的)
fishros2/ros:noetic-desktop-full
fishros2/ros:humble-desktop-full
fishros2/ros:foxy-desktop
osrf/ros:galactic-desktop
osrf/ros:iron-desktop-full
fishros2/ros:melodic-desktop-full
osrf/ros:rolling-desktop-full
osrf/ros:kinetic-desktop-full
osrf/ros:eloquent-desktop
osrf/ros:dashing-desktop
osrf/ros:crystal-desktop
osrf/ros:bouncy-desktop
osrf/ros:ardent-desktop
osrf/ros:lunar-desktop
osrf/ros:indigo-desktop-full
按需选择就行
三 创建容器
这一步是最关键的
直接贴命令
sudo docker run -dit \
--name=[your_container_name] \
--privileged \
-v /dev:/dev \
-v /home/[your_username]:/home/[your_username] \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e DISPLAY=unix$DISPLAY \
-w /home/[your_username] \
--net=host \
[上面镜像的名字]
[your_container_name]
就是你的容器的名字(后面要用),[your_username]
就是你的用户名。这一步直接简单粗暴的将/dev
下的内容全部映射,一劳永逸解决问题()
参考链接:
https://www.bilibili.com/read/cv25771461/
原脚本是这样写的
command_create_x11 = "sudo docker run -dit --name={} -v {}:{} -v /tmp/.X11-unix:/tmp/.X11-unix {} -v /dev/dri:/dev/dri {} -e DISPLAY=unix$DISPLAY -w {} {}".format(container_name,home,home,use_dri,use_snd,home,RosVersions.get_image(name))
这个脚本在安装的时候,–device挂载了–device=/dev/dri/renderD128和–device=/dev/snd。
四 编写启动脚本
鱼香ros大大的一键安装脚本最后会在~/.fishros/bin
下生成一个[your_container_name]
文件,这个文件的内容如下:
- 文件中的
[your_container_name]
全部使用ros
代替
xhost +local: >> /dev/null
echo "请输入指令控制ros: 重启(r) 进入(e) 启动(s) 关闭(c) 删除(d) 测试(t):"
read choose
case $choose in
s) docker start ros;;
r) docker restart ros;;
e) docker exec -it ros /bin/bash;;
c) docker stop ros;;
d) docker stop ros && docker rm ros1_1 && sudo rm -rf /home/[your_username]/.fishros/bin/ros;;
t) docker exec -it ros /bin/bash -c "source /ros_entrypoint.sh && roscore";;
esac
newgrp docker
新建这个文件,复制内容,修改ros
和[your_username]
然后在~/.bashrc
中添加环境变量export PATH=$PATH:/home/[your_username]/.fishros/bin/
最后source ~/.bashrc
即可
五 检查安装
在终端中输入ros
(就是前面的[your_container_name]
)
输入t,自动运行roscore
安装成功,然后就可以输入e
进入容器,可以使用rviz确认是否挂载成功,本人使用使用了激光雷达进行验证,结果是可以使用的
结束
虽然这个过程很简单,但是还是踩雷不少,希望这篇博客可以有一些帮助!