【乐享】在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

跟着教程走吧,严谨有条理,优雅

提醒几条:

  1. 了解分区基础知识,确认好bios还是uefi启动。一定要注意分区的操作,一定要了解每一个行为的结果,达到你的目的。推荐使用cfdisk分区,有更良好的用户交互界面。

  2. pacstrap安装系统时,建议跟着上述b站大佬教程安装,确认好自己需求,intel就装intel-ucode,amd就装amd的

  3. efi分区是要挂载在/boot/efi目录的,以前装的时候直接挂载在/boot后无法开机

  4. grub启动,关于os-prober。不喜欢,个人认为不好用,而且我没找到修改grub的os-prober启动项名称的方法,而且会把我的win11识别成win10,所以我选择修改/etc/grub.d/40_custom自建一个启动项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
#
#上面为系统自带部分,下面是添加部分
menuentry "windows 11 Honor" --class windows11 {
insmod part_gpt
insmod fat
insmod chain
search --no-floppy --fs-uuid --set=root F8CA-DB44
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
BASH

———对了,grub还可以安装主题哦,我选用的是yorunoke大佬的miku主题
https://github.com/yorunoken/HatsuneMiku
发现在3072x1920屏幕上有点偏,字体大小有点小,于是自己fork了一个,但是要装一个Jetbrain nerd mono字体(自己常用)https://github.com/tifisht/grub_Miku/

  1. 我选用了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
2
3
4
5
6
# /etc/sddm.conf
[X11]
EnableHiDPI=true

[General]
GreeterEnvironment=QT_SCREEN_SCALE_FACTORS=2,QT_FONT_DPI=192
CONF

输入法 rime 小狼毫 双拼方案

不知为何,在plasma环境下,使用ibus打字时只能输出英文,查找各种方案后无法解决。于是使用fcitx5,但是没法使用双拼,最后在用户目录下自己配置好双拼才成功启用方案,将小鹤双拼的方案文件导入用户文件夹,default.custom.yaml文件写入输入方案:

1
2
3
4
5
#default.custom.yaml
schema_list:
- schema: double_pinyin_flypy # 小鹤双拼 注释掉
- schema: luna_pinyin # 全拼
#- schema: double_pinyin # 自然码
LDIF

写好后一直无法输出双拼,但是关机后一个晚上就好了,可能是重启了吧((

三、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
2
3
4
5
6
7
8
9
10
xhost +local:
docker run -it --privileged \
--env=LOCAL_USER_ID="$(id -u)" \
-v ~/PX4-Autopilot:/src/PX4-Autopilot:rw \
-v /tmp/.X11-unix:/tmp/.X11-unix:ro \
-e DISPLAY=:0 \
--network=host \
--name=px4-ros1 \
px4io/px4-dev-simulation-focal \
bash
BASH

解释:

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
2
cd /src/PX4-Autopilot
make px4_sitl_default gazebo
BASH

检查自己的x11环境是否出现了gazebo窗口,是否出现了无人机

四、qGroundControl(QGC)地面站连接

在宿主机下载好qgc,开机,诶,发现连不上!!!咋办呢?

可能是你docker命令运行时没有使用–network=host选项呢,还是不行的话自己解决吧(摆

五、docker日常的进入环境

可以自己多学习一下docker的用法,以备不时之需

先要启动: docker start

再是进入: docker exec -it bash

退出直接使用exit退出环境,exit会暂停容器的运行


【乐享】在Magicbook Pro 16 Hunter 上安装 Archlinux,Docker容器运行ros1 px4 与gazebo仿真环境
https://www.qwqwq.com.cn/share/gazebo/
Author
Stephen Zeng
Posted on
March 15, 2025
Licensed under