【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
前面我们讨论过树莓派4b安装ros的问题,当时的解决方案就是利用docker来安装ros。我们都知道,每一个ros版本都是和特定的ubuntu版本bind在一起的。但是树莓派4b的镜像是一直在update的,不可能一直停在过去的某一个版本上。那这个时候,怎么解决在树莓派4b上安装ros的问题呢,方法就是docker。docker相当于在file system这一层做了软件隔离。也就是说,通过docker,我们可以让不同版本的ros、不同版本的debian、不同版本的ubuntu同时运行,并且赋予它们不同的额度的cpu资源、ram资源、存储资源和网络资源,这就是docker的优势所在。
当然不仅如此,docker的另外一个优势就是软件部署。在嵌入式开发板部署软件是一个麻烦的事情,但是有了docker,我们就可以把相关的软件、配置文件和资源打包成一个镜像来处理。这样有了这个打包好的镜像之后,就再也不用因为软件配置的事情而烦恼了。
1、下载docker软件
下载的方法比较简单,直接运行一行命令就可以。它会首先下载一个脚本,然后执行这个脚本,
sudo apt-get install docker
sudo curl -sSL https://get.docker.com | sh
一般docker安装好之后,我们可以通过ifconfig命令就知道docker是不是安装好了,
feixiaoxing@raspberrypi:~ $ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:a1:c3:c7:6e txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2、执行最简单的hello-world程序
docker是可以执行最简单的hello-world程序,使用方法需要在sudo模式下进行,
sudo docker run hello-world
如果本地没有hello-world,它会从remote server下载一个hello-world,只要server上面有这样的程序或者是镜像。
3、执行一个ubuntu程序
我们可以重新下载一个ubuntu镜像,并且进入到里面的bash,
sudo docker run -it ubuntu bash
进入之后,用户名就变成了root,如果要退出这个镜像,那么输入exit返回即可。这样就可以回到之前的树莓派4b环境中。
4、安装ros1 kinetic版本
如果在树莓派4b下面pull一个ros,也是比较简单的,只需要执行这条命令即可,
sudo docker pull ros:kinetic-robot
下载好了docker命令之后,就可以进入到它的bash环境当中了,
sudo docker run -it --rm ros:kinetic-robot /bin/bash
那怎么确认当前环境已经有ros的相关功能了呢?最简单的方法,就是查找一下catkin的相关命令。操作方法就是输入cat,然后按一下tab键,
feixiaoxing@raspberrypi:~/Desktop $ sudo docker run -it ros:kinetic-robot /bin/bash
root@81471a505d2e:/# cat
cat catkin_find catkin_init_workspace catkin_package_version catkin_test_changelog
catchsegv catkin_find_pkg catkin_make catkin_prepare_release catkin_test_results
catkin_create_pkg catkin_generate_changelog catkin_make_isolated catkin_tag_changelog catkin_topological_order
5、安装ros1 noetic版本
学会了kinetic版本的安装,我们可以试试另外一个ros1的版本,即noetic版本的安装,
sudo docker pull ros:noetic-robot
运行的话,也是一样的,
feixiaoxing@raspberrypi:~/Desktop $ sudo docker run -it --rm ros:noetic-robot /bin/bash
root@bda2176f78e0:/#
注:
有的时候下载,网络不是很好,需要反复多下载几次。后续ros1、ros2的其他版本,也是同样的处理方式。不过真正部署的时候,直接用本地的而镜像就可以了。
6、安装ros2 humble版本
既然前面我们安装了ros1的版本,那么ros2版本的安装也是一个道理,比如说,我们安装ros2 humble版本,它的安装方法是这样的,
sudo docker pull ros:humble-ros-core
如果需要执行起来的话,应该这么来做,
sudo docker run -it --rm ros:humble-ros-core
和之前ros1安装相比较,明显ros2下载的image内容更多,占用空间更大。所以我们在准备tf卡的时候一定要大一点,一般情况下要大于32g,最好是64g。另外因为image下载过程中存在hang住的情况,退出重新下载都是可以的。
这个时候,如果希望确认ros2是不是真的安装好了,直接输入ros2命令即可,
feixiaoxing@raspberrypi:~ $ sudo docker run -it --rm ros:humble-ros-core
root@35296bbd4d2d:/# ros2
usage: ros2 [-h] [--use-python-default-buffering] Call `ros2 <command> -h` for more detailed usage. ...
ros2 is an extensible command-line tool for ROS 2.
options:
-h, --help show this help message and exit
--use-python-default-buffering
Do not force line buffering in stdout and instead use the python default buffering, which might be affected by
PYTHONUNBUFFERED/-u and depends on whatever stdout is interactive or not
Commands:
action Various action related sub-commands
component Various component related sub-commands
daemon Various daemon related sub-commands
doctor Check ROS setup and other potential issues
interface Show information about ROS interfaces
launch Run a launch file
lifecycle Various lifecycle related sub-commands
multicast Various multicast related sub-commands
node Various node related sub-commands
param Various param related sub-commands
pkg Various package related sub-commands
run Run a package specific executable
security Various security related sub-commands
service Various service related sub-commands
topic Various topic related sub-commands
wtf Use `wtf` as alias to `doctor`
Call `ros2 <command> -h` for more detailed usage.
需要注意的是,humble-ros-core是没有gcc、g++环境的。如果需要这两个环境,则需要安装这个image,
sudo docker pull ros:humble-ros-base
运行也是差不多的,
sudo docker run -it --rm ros:humble-ros-base
其他:
关于docker更多的命令,大家可以参考这个链接,
https://blog.csdn.net/techfuture/article/details/137981615