152 lines
7.4 KiB
Markdown
Executable File
152 lines
7.4 KiB
Markdown
Executable File
# 在Magicbook Pro 16 Hunter 上安装 Archlinux,Docker容器运行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-ucode,amd就装amd的
|
||
|
||
3. efi分区是要挂载在/boot/efi目录的,以前装的时候直接挂载在/boot后无法开机
|
||
|
||
4. grub启动,关于os-prober。不喜欢,个人认为不好用,而且我没找到修改grub的os-prober启动项名称的方法,而且会把我的win11识别成win10,所以我选择修改/etc/grub.d/40_custom自建一个启动项
|
||
|
||
```bash
|
||
#!/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/
|
||

|
||
|
||
5. 我选用了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
|
||
|
||
下面为关键配置:
|
||
|
||
```conf
|
||
# /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容器,有模拟环境,我自己修改后的拉取与启动命令为:
|
||
```bash
|
||
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内交互环境,进行测试
|
||
```bash
|
||
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会暂停容器的运行
|