2025-06-10 00:24:01 +08:00

7.4 KiB
Executable File
Raw Blame History

在Magicbook Pro 16 Hunter 上安装 ArchlinuxDocker容器运行ros1 px4 与gazebo仿真环境

hi 又是我我是tifisht哟今天给各位分享我自己的笔记本px4开发环境archlinux + ros-noetic + px4而且当然可以仿真啦
www因为被Ubuntu的网卡驱动和触控板驱动整破防了www

动机

因为刚刚加入了自己学校的机器人队伍队伍中使用的环境比较老对环境的要求又十分苛刻所以我先加装了一块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-ucodeamd就装amd的

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

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

#!/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
}

———对了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

下面为关键配置:

# /etc/sddm.conf
[X11]
EnableHiDPI=true

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

输入法 rime 小狼毫 双拼方案

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

#default.custom.yaml
schema_list:
- schema: double_pinyin_flypy # 小鹤双拼 注释掉
- schema: luna_pinyin # 全拼
#- schema: double_pinyin # 自然码

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

三、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容器有模拟环境我自己修改后的拉取与启动命令为

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

解释:

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内交互环境进行测试

cd /src/PX4-Autopilot
make px4_sitl_default gazebo

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

四、qGroundControl(QGC)地面站连接

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

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

五、docker日常的进入环境

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

先要启动: docker start {{docker_name}}

再是进入: docker exec -it {{docker_name}} bash

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