本来想在Linux上自己一步步搭建 px4的仿真gazebo程序的,查了资料发现docker已经打包好了,就直接找到这个目录,跟着一步一步的安装
PX4 docker

但是在安装的过程中,有一些学习和踩坑如下:
1
curl -fsSL get.docker.com -o get-docker.sh
有关curl的使用 -fsSL 相当于合并几个命令 -f -s -S -L
sudo sh get-docker.sh

2
mkdir src
cd src
git clone https://github.com/PX4/Firmware.git
生面这一步一定跟着做,下载速度非常慢,我本来直接训练下载的zip文件解压后移到 src下面 但是这样为后面埋坑了
加快git clone的方法 运行完上面那一步,进入src/Firmware 目录下,再输下面的命令(其他目录下运行会报fatal错误)

git submodule update --init --recursive 下载也是很慢,我是直接去GitHub把子模块下载下来放到相应的文件夹里面去

这一步的解释是:
当使用git clone下来的工程中带有submodule时,初始的时候,submodule的内容并不会自动下载下来
的,此时,只需执行如下命令:
git submodule update --init --recursive
即可将子模块内容下载下来后工程才不会缺少相应的文件。
参考这个 git submodule 的使用 我上面那样操作不行的原因是 我执行git命令的时候报了这个错
fatal: not a git repository (or any of the parent directories): .git

3 cd Firmware

4 xhost + 这个命令的解释
xhost 是用来控制X server访问权限的,这个命令将允许别的用户启动的图形程序将图形显示在当前屏幕上.。通常当你从hostA登陆到hostB上运行hostB上的应用程序时,做为应用程序来说,hostA是client,但是作为图形来说,是在hostA上显示的,需要使用hostA的Xserver,所以hostA是
server.因此在登陆到hostB前,需要在hostA上运行xhost +,来使其它用户能够访问hostA的Xserver.
xhost + 是使所有用户都能访问Xserver.
xhost + ip使ip上的用户能够访问Xserver.
xhost + nis:user@domain使domain上的nis用户user能够访问
xhost + inet:user@domain使domain上的inet用户能够访问。

5docker run -it --privileged \ --env=LOCAL_USER_ID="$(id -u)" \ -v <host_src>:<container_src>:rw \ -v /tmp/.X11-unix:/tmp/.X11-unix:ro \ -e DISPLAY=:0 \ -p 14556:14556/udp \ --name=<local_container_name> <container>:<tag> <build_command>参考docker run的命令

–env 指定环境变量
-v 指定容器内目录与宿主机目录共享(: 之前是宿主机文件夹,之后是容器需共享的文件夹),
rw代表
这个时候只有docker的写可以同步到宿主主机上面去,宿主主机写不同步到docker。而且一旦宿主主机
上写了修改了映射文件,那么docker里面再怎么写都不再同步到宿主主机了
-v 共享本地unix端口,访问X11 的显示接口(docker运行GUI软件的配置方法)
ro代表
这个时候docker内也不能写,宿主主机写了也不同步进去了,相当于创建的时候拷贝一份不可改变的配
置进来而已。
-e 修改环境变量DISPLAY,映射到主机的0端口
6 cd src/firmware 进入容器里面的 这个文件夹

7 运行make px4_sitl_default gazebo 报错c++: internal compiler error: Killed (program cc1plus) 查资料发现内存不够
点这儿看怎么增加内存,里面有一个命令有错,但是不执行那一步就行,或者可以看评论 8 再运行 make px4_sitl_default gazebo 报错
Can’t open display
也就是docker容器没有成功调动主机的GUI显示界面
然后百度了一堆教程 修改了一堆文件 最后好了 也不知道哪一个有用
自己猜的应该是下面两部管用
(1)安装xserver
$ sudo apt install x11-xserver-utils
许可所有用户都可访问xserver
xhost +

(2)在docker宿主机关闭X11验证
sudo vim /etc/lightdm/lightdm.conf
#增加 xserver-allow-tcp=true
sudo systemctl restart lightdm
xhost + #每次重新开机后都要运行
9 成功运行起来