Sprite Blog - 学习笔记
type: channel
link: https://sprite-lover.top/index.php/category/notes/
items: ROS2网络信息查看
items: ROS2了解
items: PX4+AirSIM+QGC地面站无人机仿真
items: Echo机器人环境配置
items: WSL相关安装
items: Docker学习
items: Cmake学习

ROS2网络信息查看
type: item
date: 2026-05-27T12:18:43+00:00
description: WSL / 树莓派 Ubuntu 网络信息查看与 ROS2 分布式通信检查笔记这份笔记用于记录： 如何在 WSL Ubuntu 和树莓派 Ubuntu 中查看 IP、网段、网关、网卡，以及之后如何检查两端是否可以用于 ROS2 分布式通信。1. 常用命令以后主要记住这两个命令：ip -br addr ip route也可以使用完整形式：ip addr ip route其中：ip -br addr：简洁查看网卡状态和 IP 地址ip addr：详细查看网卡信息ip route：查看默认网关和路由信息2. 查看 WSL 的 IP 和网卡例如你之前执行 ip addr 后看到：7: eth4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ... inet 192.168.154.239/24 brd 192.168.154.255 scope global noprefixroute eth4重点看这一行：inet 192.168.154.239/24 brd 192.168.154.255 ... eth4可以得到：信息结果WSL IP192.168.154.239子网前缀/24广播地址192.168.154.255网卡名eth4解释：inet：IPv4 地址 192.168.154.239：当前 WSL 的 IP 地址 /24：子网前缀，表示网段范围 brd 192.168.154.255：广播地址 eth4：这个 IP 所在的网卡3. 怎么判断哪个网卡正在使用？看网卡后面有没有这些标志：UP LOWER_UP例如：eth4: <BROADCAST,MULTICAST,UP,LOWER_UP>说明 eth4 是正在工作的网卡。而像下面这种：eth0: <BROADCAST,MULTICAST> ... state DOWN eth1: <BROADCAST,MULTICAST> ... state DOWN说明这些网卡目前没有启用，不用管。简单判断：有 UP、LOWER_UP，并且下面有 inet IP 的网卡，就是当前主要使用的网卡。4. 查看网关执行：ip route例如你之前看到：default via 192.168.154.114 dev eth4 proto kernel metric 35 192.168.154.0/24 dev eth4 proto kernel scope link metric 291 192.168.154.114 dev eth4 proto kernel scope link metric 35重点看第一行：default via 192.168.154.114 dev eth4含义：字段含义default默认路由，访问外网时默认走这里via 192.168.154.114默认网关dev eth4通过 eth4 这个网卡出去所以可以得到：网关：192.168.154.114 默认网卡：eth45. 查看网段你之前的 WSL IP 是：192.168.154.239/24其中 /24 表示子网掩码是：255.255.255.0所以网段是：192.168.154.0/24这个网段中：网络地址：192.168.154.0 可用地址：192.168.154.1 ~ 192.168.154.254 广播地址：192.168.154.255所以你当前的信息可以总结为：项目内容WSL IP192.168.154.239网段192.168.154.0/24网关192.168.154.114网卡eth46. 为什么不能 ping 192.168.154.0？因为：192.168.154.0是网络地址，代表整个网段，不是一台具体设备。所以不要用：ping 192.168.154.07. 为什么之前 ping 192.168.154.1 失败？很多教程中网关是：192.168.1.1 192.168.0.1 192.168.31.1但你的实际网关不是 .1，而是：192.168.154.114所以应该 ping：ping -c 10 192.168.154.114而不是：ping -c 10 192.168.154.18. 当前网络检查结果你已经测试过：ping -c 10 192.168.154.114 ping -c 5 8.8.8.8 ping -c 5 baidu.com sudo apt update结果：测试项目结果说明ping 网关 192.168.154.114成功，0% 丢包局域网网关正常ping 8.8.8.8成功，0% 丢包外网 IP 访问正常ping baidu.com成功，0% 丢包DNS 域名解析正常sudo apt update成功ap…

ROS2了解
type: item
date: 2026-05-26T13:22:43+00:00
description: ROS2了解WSL -d Ubuntu-22.04-ROS2-Study1. 节点节点就是 ROS2 中正在运行的一个功能程序。ros2 node list # 查看所有节点 ros2 node info /节点名 # 查看节点详细信息 ros2 run 包名 可执行文件名 # 运行节点例子：ros2 run turtlesim turtlesim_node ros2 node list ros2 node info /turtlesim记忆：node list 看节点 node info 看节点详细信息 ros2 run 运行节点2. 话题话题是单向、持续的数据流。发布者一直发，订阅者一直收。# 发布者 ros2 run learning_topic topic_helloworld_pub # 订阅者 ros2 run learning_topic topic_helloworld_sub 常用命令：ros2 topic list # 查看话题 ros2 topic list -t # 查看话题和类型 ros2 topic echo /话题名 # 查看话题数据 ros2 topic info /话题名 # 查看发布者/订阅者数量 ros2 topic type /话题名 # 查看话题类型 ros2 interface show 类型名 # 查看消息结构 ros2 topic pub /话题名 类型 "数据" # 手动发布话题例子：ros2 topic list -t ros2 topic echo /turtle1/pose ros2 topic type /turtle1/cmd_vel ros2 interface show geometry_msgs/msg/Twist让乌龟动一下：ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0}, angular: {z: 1.0}}"记忆：topic echo 看数据 topic pub 发数据 topic type 看类型 interface show 看结构3. 服务服务是一次请求，一次响应。客户端 Client ---> 请求 Request ---> 服务端 Server 客户端 Client <--- 响应 Response <--- 服务端 Server常用命令：ros2 service list # 查看服务 ros2 service list -t # 查看服务和类型 ros2 service type /服务名 # 查看服务类型 ros2 interface show 服务类型 # 查看请求/响应结构 ros2 service call /服务名 类型 "数据" # 调用服务例子：ros2 service list -t ros2 service type /clear ros2 service call /clear std_srvs/srv/Empty生成一只新乌龟：ros2 service call /spawn turtlesim/srv/Spawn "{x: 2.0, y: 2.0, theta: 0.0, name: 'turtle2'}"记忆：service call 是调用服务 服务是一次请求一次响应4. 动作动作适合长时间任务，可以有目标、反馈、结果。动作包含三部分：Goal：目标 Feedback：执行过程中的反馈 Result：最终结果动作可以理解为：服务 + 话题 的结合它比服务更适合长任务，因为服务一般是“请求后很快返回”，动作可以边执行边反馈。适合：导航到某个点 机械臂移动到某个位置 机器人旋转到某个角度 执行一个耗时任务适合：长时间任务，比如导航、旋转、机械臂运动常用命令：ros2 action list # 查看动作 ros2 action list -t # 查看动作和类型 ros2 action info /动作名 # 查看动作信息 ros2 interface show 动作类型 # 查看 Goal / Result / Feedback ros2 action send_goal /动作名 类型 "目标" # 发送动作目标例子：ros2 action list -t ros2 action info /turtle1/rotate_absolute ros2 interface show turtlesim/action/RotateAbsolute让乌龟旋转，并显示反馈：ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/Rotate…

PX4+AirSIM+QGC地面站无人机仿真
type: item
date: 2026-05-08T07:13:00+00:00
description: 一. 环境搭建1. 软件安装VisualStudio（用于编译和运行AirSim环境）VS安装主要勾选：.NET桌面开发，C++桌面开发，C++游戏开发，C++的Linux开发，以及CMake虚幻引擎v4.27（AirSIM基于虚幻引擎制作）AirSIM（开源工程，基于虚幻引擎，实现模拟环境和无人机。settings.json是无人机配置文件，类型，传感器，ip地址等）WSL-22.04（运行PX4和QGC的ubuntu环境）PX4-Autopilot（模型飞控的开源软件）QGroundControl（地面站开源软件）2. 编译AirSIM使用Developer PowerShell for VS 2022编译AirSIM# 先进入AirSIM文件目录 #运行： build.cmd编译成功之后会在 /Unreal/Environments/Blocks 目录下生成Block.uproject工程文件3. 安装PX4在WSL的Ubuntu22.04环境下执行命令：sudo apt update sudo apt install -y pip libpulse-mainloop-glib0 zip pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ pip config set global.trusted-host mirrors.aliyun.com echo 'export PATH=/home/hw/.local/bin:$PATH' >> ~/.bashrc echo 'export LIBGL_ALWAYS_SOFTWARE=1' >> ~/.bashrc echo 'export DISPLAY=:0' >> ~/.bashrc克隆PX4仓库git clone --recursive https://github.com/PX4/PX4-Autopilot.git cd PX4-Autopilot编译启动PX4cd px4v1.15.2 make px4_sitl jmavsim # 轻量级的仿真器 make px4_sitl_default none_iris4. 安装QGC# 安装QGC sudo usermod -a -G dialout $USER sudo apt-get remove modemmanager -y sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y sudo apt install libfuse2 -y sudo apt install libxcb-xinerama0 libxkbcommon-x11-0 libxcb-cursor-dev -y # 运行QGC # 给文件添加可执行权限 chmod +x ./QGroundControl-x86_64.AppImage # 运行 QGC ./QGroundControl-x86_64.AppImage5. IP绑定AirSIM和PX4是通过TCP通讯的，AirSIM运行在Win11上，PX4运行在Ubuntu上，因此需要双方知道对方的IP地址来通信# 在WSL中输入 hostname -I# 在Win11的CMD输入 ipconfig在C:\Users\Arthur\Documents\AirSim目录下的setting.json文件改成Win11的IP地址或者0.0.0.0之后在WSL的Ubuntu环境下链接这个IP地址# 换成自己AirSIM的IP地址（Win11的IP地址） echo 'export PX4_SIM_HOST_ADDR=172.26.208.1' >> ~/.bashrc source ~/.bashrc sudo ufw allow 4560 sudo ufw allow 100496.效果验证启动AirSIM场景，启动PX4，启动QGC地面站可以实现这个QGC地面站来控制Setting的无人机，就是成功了二、自动避障效果1. json文件添加传感器 "DistanceFrontMid": { "SensorType": 5, "Enabled" : true, "MinDistance": 0.2, "MaxDistance": 40, "X": 0.2, "Y": 0, "Z": -0.5, "Yaw": 0, "Pitch": 0, "Roll": 0, "DrawDebugPoints": true, "ExternalController": true }, "DistanceFrontLeft": {…

Echo机器人环境配置
type: item
date: 2026-04-27T06:18:00+00:00
description: WSL2中的Echo机器人环境安装1.WSL2内Ubuntu安装首先命令窗口cmd(PowerShell)内输入wsl --list --online这样可以看到微软官方支持的所有 Linux 发行版列表 像这样NAME FRIENDLY NAME Ubuntu Ubuntu Ubuntu-24.04 Ubuntu 24.04 LTS openSUSE-Tumbleweed openSUSE Tumbleweed openSUSE-Leap-16.0 openSUSE Leap 16.0 SUSE-Linux-Enterprise-15-SP7 SUSE Linux Enterprise 15 SP7 SUSE-Linux-Enterprise-16.0 SUSE Linux Enterprise 16.0 kali-linux Kali Linux Rolling Debian Debian GNU/Linux AlmaLinux-8 AlmaLinux OS 8 AlmaLinux-9 AlmaLinux OS 9 AlmaLinux-Kitten-10 AlmaLinux OS Kitten 10 AlmaLinux-10 AlmaLinux OS 10 archlinux Arch Linux FedoraLinux-43 Fedora Linux 43 FedoraLinux-42 Fedora Linux 42 eLxr eLxr 12.12.0.0 GNU/Linux Ubuntu-20.04 Ubuntu 20.04 LTS Ubuntu-22.04 Ubuntu 22.04 LTS OracleLinux_7_9 Oracle Linux 7.9 OracleLinux_8_10 Oracle Linux 8.10 OracleLinux_9_5 Oracle Linux 9.5 openSUSE-Leap-15.6 openSUSE Leap 15.6 SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6之后选择版本命令进行安装wsl --install -d <换成你想安装的版本名称>示例：wsl --install -d Ubuntu-22.04# 更新软件包列表 sudo apt-get update # 升级已安装的软件包（可选，但推荐） sudo apt-get upgrade -y1.安装依赖环境sudo apt-get install repo git ssh make gcc gcc-multilib g++-multilib module-assistant expect g++ gawk texinfo libssl-dev bison flex fakeroot cmake unzip gperf autoconf device-tree-compiler libncurses5-dev pkg-config2.下拉完整项目(SDK和软件demo)git clone https://github.com/No-Chicken/Echo-Mate.git cd Echo-Mate git submodule update --init --recursive3.如果要递归更新所有子模块，请执行：git submodule update --remote --merge --recursive4.由于子仓库有大文件LFS，需要执行：# 下拉lfs git lfs pull # 下拉所有lfs git submodule foreach --recursive 'git lfs pull'2.获取SDK#进入到SDK的目录 cd Echo-Mate cd ./SDK/rv1106-sdk 首先需要在SDK文件夹选择板级配置，这里选择对应的开发板，选择echo mate的配置即可。如果使用[7]custom，会弹出所有的.mk文件./build.sh lunch一键自动编译(会自动下载交叉编译的工具链及相关配置)./build.sh 如果PATH环境变量的目录出错，则换一个临时的PATH目录清理缓存./build.sh clean # 清理编译产物(如果失败则先清理一下缓存)3. 使用开发板demo的修改打开DeskBot_demo目录cd Echo-Mate/Demo/DeskBot_demo① 把conf文件夹中的dev_conf.h中的内容更换#define LV_USE_SIMULATOR 0 (把这个宏定义的1改成0)② 把里面的toolchain.cmake的SDK_PATH目录换一下set(SDK_PATH "/hom…

WSL相关安装
type: item
date: 2026-04-25T11:41:00+00:00
description: WSL相关安装1.WSL2内Ubuntu安装首先命令窗口cmd(PowerShell)内输入wsl --list --online这样可以看到微软官方支持的所有 Linux 发行版列表 像这样NAME FRIENDLY NAME Ubuntu Ubuntu Ubuntu-24.04 Ubuntu 24.04 LTS openSUSE-Tumbleweed openSUSE Tumbleweed openSUSE-Leap-16.0 openSUSE Leap 16.0 SUSE-Linux-Enterprise-15-SP7 SUSE Linux Enterprise 15 SP7 SUSE-Linux-Enterprise-16.0 SUSE Linux Enterprise 16.0 kali-linux Kali Linux Rolling Debian Debian GNU/Linux AlmaLinux-8 AlmaLinux OS 8 AlmaLinux-9 AlmaLinux OS 9 AlmaLinux-Kitten-10 AlmaLinux OS Kitten 10 AlmaLinux-10 AlmaLinux OS 10 archlinux Arch Linux FedoraLinux-43 Fedora Linux 43 FedoraLinux-42 Fedora Linux 42 eLxr eLxr 12.12.0.0 GNU/Linux Ubuntu-20.04 Ubuntu 20.04 LTS Ubuntu-22.04 Ubuntu 22.04 LTS OracleLinux_7_9 Oracle Linux 7.9 OracleLinux_8_10 Oracle Linux 8.10 OracleLinux_9_5 Oracle Linux 9.5 openSUSE-Leap-15.6 openSUSE Leap 15.6 SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6之后选择版本命令进行安装wsl --install -d <你想安装的版本名称>示例：wsl --install -d Ubuntu-24.042.WSL2内安装Linux环境下的ESP32环境# 更新软件包列表 sudo apt-get update # 升级已安装的软件包（可选，但推荐） sudo apt-get upgrade -y # 安装必要的依赖包 sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0 -y 创建工作目录并下载ESP-IDFmkdir -p ~/esp cd ~/esp #这里下载的是v5.4.1版本 git clone -b v5.4.1 --recursive https://github.com/espressif/esp-idf.git #这个过程可能耗时5-10分钟安装ESP32-S3工具链cd ~/esp/esp-idf ./install.sh esp32s3 #这个过程可能耗时5-10分钟设置环境变量echo "alias get_idf='. \$HOME/esp/esp-idf/export.sh'" >> ~/.bashrc source ~/.bashrc设置完环境变量之后，就可以直接用这个名字激活ESP-IDF环境# 打开终端，激活 ESP-IDF 环境 get_idf测试是否环境安装成功# 测试编译一下 cd ~/esp/workspace cp -r ~/esp/esp-idf/examples/get-started/hello_world . cd hello_world idf.py set-target esp32s3 idf.py buildWSL2 无法直接访问 Windows 主机的 USB 设备所以要需要配置 USB 转发才能让 WSL2 识别你的 ESP32-S3 开发板在 Windows 端安装 usbipd（以管理员身份打开 PowerShell）# 安装 usbipd-win winget install --interactive --exact dorssel.usbipd-win #或者找github安装下载之后在管理员模式下的命令串口输入usbipd list # 查看 BUSID会看到 C:\Windows\System32>usbip…

Docker学习
type: item
date: 2026-04-25T11:40:00+00:00
description: Docker 学习这个是基于WSL中使用命令行下载的Docker，作用是管理WSL下特定版本的Ubuntu系统下载docker# 1. 更新系统包索引 sudo apt update # 2. 安装必要的依赖 sudo apt install -y ca-certificates curl # 3. 创建密钥目录并添加 Docker 官方 GPG 密钥 sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc # 4. 添加 Docker 官方仓库 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 5. 再次更新包索引（这次会从 Docker 仓库获取信息） sudo apt update # 6. 安装 Docker 及相关组件 sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 7. 启动 Docker 服务 sudo service docker start # 8. 验证安装 sudo docker run hello-worldDocker中有三种身份宿主机身份（你Windows/WSL里的用户），默认身份（root），容器内的普通用户（可以自己创建）把你加入 docker 组，这样就不需要使用sudo就能执行docker指令了sudo usermod -aG docker $USER # 加入docker组就可以使用docker命令使组权限生效# 退出当前 WSL 会话 exit wsl --terminate Ubuntu-24.04-learn wsl -d Ubuntu-24.04-learn使用dockerdocker images # 查看docker有哪些镜像 docker ps -a # 查看docker的容器（包括已停止的） docker ps #查看docker正在运行的容器docker rmi <镜像名字或者id> # 把服务器上的指定的镜像删除 docker rm <容器的名字或者id> # 把服务器上的镜像创建的容器删除 docker rm -f <容器的名字或者id> # 强制删除容器docker pull nginx # 从 Docker Hub 下载 Nginx 镜像到本地 docker run nginx # 使用镜像创建一个容器，包含了docker pull 命令，如果发现本地不存在则会先拉取 docker run -d nginx # 表示容器在后台执行，不阻塞当前窗口，会打印出容器的id docker run -p 80:80 nginx # 端口映射 docker run -d --name <自定义名字> # docker 容器自定义名字 docker run -d -p 80:80 -v /website/html:/usr/share/nginx/html nginx # -v 代表吧宿主机的目录和容器内的目录做绑定 docker volume create nginx_html docker run -d -p 80:80 -v nginx_html:/usr/share/nginx/html nginx docker volume list # 列出所有创建过的卷 docker volume rm nginx_html # 删除一个卷 docker volume prune -a # 删除所有没有任何容器使用的卷

Cmake学习
type: item
date: 2026-04-25T09:56:00+00:00
description: CmakeCMake 是一个构建系统生成器，它把你的构建意图（CMakeLists.txt）转换成具体的编译命令，让你可以用任何编辑器、在任何平台、用任何编译器构建项目，同时自动处理头文件路径、库依赖等复杂问题安装wsl --install -d Ubuntu-24.04 # 先安装ubuntu版本 sudo apt-get update sudo apt-get upgrade -y sudo apt install build-essential cmake -y # 安装cmake工具简易指令cmake_minimum_required(VERSION 3.15) # VERSION 指定Cmake的版本号 project(test) # 该项目的名称，可以自定义 add_executable(app add.cpp div.cpp mult.cpp main.cpp sub.cpp) # 生成的可执行文件+要用到的文件# 之后使用cmake + CMakeLists所在路径 进行编译 cmkae . # 表示当前目录 cmake .. # 表示CMakeLists在上一级目录 make # 生成可执行文件 #同样可以先创建build文件夹，之后使用cmake .. 这样生成的编译文件都在build中 mkdir build # 在项目目录下创建build文件夹 cmake .. # 在build中生成编译文件 make cmake .. 应该叫： ✅ 配置（Configure） ✅ 生成构建系统（Generate Build System） make 应该叫： ✅ 构建（Build） ✅ 编译链接（Compile & Link） ✅ 生成可执行文件（Generate Executable） ✅ 构建项目（Build Project）引入变量cmake_minimum_required(VERSION 3.15) project(test) set(SRC add.cpp div.cpp mult.cpp main.cpp sub.cpp) # 设置变量名字为SRC,SRC所指的是后面的文件 set(EXECUTABLE_OUTPUT_PATH /home/arthur/Cmake_Learn/Test1/aa/bb/cc) # 指定生成可执行文件的目录 set(CMAKE_CXX_STANDARD 11) # 设定C++ 标准为11 add_executable(app ${SRC})搜索文件cmake_minimum_required(VERSION 3.15) project(test) # 自动收集指定目录下的所有源文件 放到SRC这个变量，不会进入子目录（可能也会搜到测试文件进行编译） # 这个宏PROJECT_SOURCE_DIR目录是执行cmake 后面对应的目录 aux_source_directory(${PROJECT_SOURCE_DIR} SRC) set(EXECUTABLE_OUTPUT_PATH /home/arthur/Cmake_Learn/Test1/aa/bb/cc) set(CMAKE_CXX_STANDARD 11) add_executable(app ${SRC})cmake_minimum_required(VERSION 3.15) project(test) # GLOB就是不递归搜索（不进入子目录） # CMAKE_CURRENT_SOURCE_DIR 宏是CMakeLists.txt所在的目录和PROJECT_SOURCE_DIR一样 # /*.cpp 指的是在该目录下找.cpp文件 file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp) set(EXECUTABLE_OUTPUT_PATH /home/arthur/Cmake_Learn/Test1/aa/bb/cc) set(CMAKE_CXX_STANDARD 11) add_executable(app ${SRC})指定头文件路径cmake_minimum_required(VERSION 3.15) project(test) # 指定cpp文件所在位置 file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp) # 指定头文件(.h)文件所在位置 include_directories(${PROJECT_SOURCE_DIR}/inc) set(EXECUTABLE_OUTPUT_PATH /home/arthur/Cmake_Learn/Test1/bin) set(CMAKE_CXX_STANDARD 11)…