【乐享】在Magicbook Pro 16 Hunter 上安装 Archlinux,Docker容器运行ros1 px4 与gazebo仿真环境
Last updated on March 15, 2025 am
动机
因为刚刚加入了自己学校的机器人队伍,队伍中使用的环境比较老,对环境的要求又十分苛刻,所以我先加装了一块1t的ssd,安装了ubuntu20.04。但是令我机器难受的是ubuntu20.04没有内置自己intel ax201网卡的驱动,同时触摸板的驱动也没有,但是触摸板还是个小问题,但是网卡驱动可是个大问题(ubuntu。。。习惯了)
查了网上许多的资料,官网,某些不知名软件包,stackoverflow等各处地方,都没有找到相关的解决办法。这个时候我已经在ubuntu上花费了大量时间,同时并不太喜欢ubuntu的相关界面,而是更加喜欢archlinux,于是我做出了这个决定。。。而此时潘多拉魔盒已悄然打开。。。
一、安装archlinux系统
经典的三板斧,archlinux镜像下载(https://archlinux.org/download/) ,rufus烧录或者使用ventoy,进入bios选择启动设备。相关教程太多不再赘述。
archlinux wiki iwctl官方文档 https://wiki.archlinuxcn.org/wiki/Iwd
archlinux官方中文安装安装文档 https://wiki.archlinuxcn.org/wiki/%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97
附上b站大佬的教程 https://www.bilibili.com/read/cv20753052/?spm_id_from=333.999.collection.opus.click&opus_fallback=1
跟着教程走吧,严谨有条理,优雅
提醒几条:
了解分区基础知识,确认好bios还是uefi启动。一定要注意分区的操作,一定要了解每一个行为的结果,达到你的目的。推荐使用cfdisk分区,有更良好的用户交互界面。
pacstrap安装系统时,建议跟着上述b站大佬教程安装,确认好自己需求,intel就装intel-ucode,amd就装amd的
efi分区是要挂载在/boot/efi目录的,以前装的时候直接挂载在/boot后无法开机
grub启动,关于os-prober。不喜欢,个人认为不好用,而且我没找到修改grub的os-prober启动项名称的方法,而且会把我的win11识别成win10,所以我选择修改/etc/grub.d/40_custom自建一个启动项
1 |
|
———对了,grub还可以安装主题哦,我选用的是yorunoke大佬的miku主题
https://github.com/yorunoken/HatsuneMiku
发现在3072x1920屏幕上有点偏,字体大小有点小,于是自己fork了一个,但是要装一个Jetbrain nerd mono字体(自己常用)https://github.com/tifisht/grub_Miku/
- 我选用了plasma kde桌面环境x11环境,sddm为显示管理器(其实就是登录界面,不知道为什么起这样的名字)(请简单了解x window 的架构呢!xserver xclient )
二、桌面环境踩雷,一路火花带闪电
sddm 缩放(dpi)设置
在设置里启用同步sddm与plasma的dpi缩放后,满心欢喜,直接重启,却看见极小的ui界面,十分难受,如同考试感觉良好但是挂了一样,在这篇文章里找到了办法:https://www.zzqayy.cn/archives/sddmgao-fen-bian-lu-suo-fang-she-zhi
下面为关键配置:
1 |
|
输入法 rime 小狼毫 双拼方案
不知为何,在plasma环境下,使用ibus打字时只能输出英文,查找各种方案后无法解决。于是使用fcitx5,但是没法使用双拼,最后在用户目录下自己配置好双拼才成功启用方案,将小鹤双拼的方案文件导入用户文件夹,default.custom.yaml文件写入输入方案:
1 |
|
写好后一直无法输出双拼,但是关机后一个晚上就好了,可能是重启了吧((
三、docker容器运行ros1 px4环境
前言:之前试过了多种方案,例如
debootstrap 安装ubuntu根目录,然后systemd-nspawn跑容器,但是总是在更新之后无法编译px4,一堆报错,知道是环境的问题,所以继续搜索发现px4官方对于docker的支持十分完善((给我整破防了
px4官方docker部署教程 https://docs.px4.io/main/en/test_and_ci/docker.html
先要在自己的宿主机的目录底下克隆px4源代码:
git clone https://github.com/PX4/PX4-Autopilot.git
选用合适的容器,容器列表为:
https://github.com/PX4/PX4-containers/tree/master?tab=readme-ov-file#container-hierarchy
https://hub.docker.com/r/px4io/px4-dev-nuttx-focal/tags?page=1&ordering=last_updated
我要gazebo仿真,ros1环境也就是noetic,所以使用px4io/px4-dev-simulation-focal容器,有模拟环境,我自己修改后的拉取与启动命令为:
1 |
|
解释:
xhost +local:让本地的程序可以连接到x11(每次重启后都要运行,可以写入~/.bashrc在启动时自动运行)此方案存在一定不安全可能,更细粒度的控制方案可以在archwiki xhost页面上找到
“-it” 以容器内交互方式运行
“–privileged”表示这是特权容器
“–env=” 设置自己用户id与自己用户一致,方便x11连接
“-v ~/PX4-Autopilot:/src/PX4-Autopilot:rw” 绑定容器内px4目录为宿主机的位置,要自己改一下宿主机的px4源码位置哦, :前面的是宿主机位置,最后的:rw为docker目录内的文件夹权限
“-v /tmp/.X11-unix:/tmp/.X11-unix:ro” 将x11套接字文件夹连接到docker容器内,使容器可以与宿主机x11通信(十分重要)
“-e DISPLAY=:0”意思是设置DISPLAY环境变量,:0是表示在本机的0号桌面上显示
“–network=host”表示与宿主机使用同一套网络,px4网络功能多,所以使用映射太过麻烦,直接让容器使用宿主机网络
测试运行
命令运行后,会进入docker内交互环境,进行测试
1 |
|
检查自己的x11环境是否出现了gazebo窗口,是否出现了无人机
四、qGroundControl(QGC)地面站连接
在宿主机下载好qgc,开机,诶,发现连不上!!!咋办呢?
可能是你docker命令运行时没有使用–network=host选项呢,还是不行的话自己解决吧(摆
五、docker日常的进入环境
可以自己多学习一下docker的用法,以备不时之需
先要启动: docker start
再是进入: docker exec -it bash
退出直接使用exit退出环境,exit会暂停容器的运行