NanoPI 部署指南
本文档介绍如何在 NanoPI 嵌入式开发板上部署和运行 LeBot 控制系统。NanoPI 是 LeBot 的主要硬件平台,具有良好的性能和成本比。
1. NanoPI 硬件介绍
1.1 NanoPI 系列概览
NanoPI 是友善电子推出的开源硬件平台,专为嵌入式应用优化。
常见型号对比:
| 型号 | CPU | RAM | 存储 | 网络 | 推荐用途 |
|---|---|---|---|---|---|
| NanoPI Neo | ARM Cortex-A7 | 512MB | 8GB | 100M | 轻量应用 |
| NanoPI Neo2 | Cortex-A53 | 512MB/1GB | 8GB | 100M | 一般应用 |
| NanoPI Neo Plus2 | Cortex-A53 | 1GB | 8GB/16GB | 100M/WiFi | 中等应用 |
| NanoPI M1 | Cortex-A7×4 | 1GB | 8GB | 100M | 多任务 |
| NanoPI M4 | Cortex-A72×2+A53×4 | 2GB/4GB | 16GB/32GB | 1000M | 高性能 |
LeBot 推荐配置:
- 基础版:NanoPI Neo Plus2(512MB RAM,WiFi)
- 标准版:NanoPI M4(2GB RAM,1000M 网络)
- 高性能版:NanoPI M4V2(4GB RAM)
1.2 NanoPI 的引脚分布
NanoPI Neo Plus2 引脚图:
┌─────────────────────────────┐
│ USB UART GPIO GND │
│ (5V) (RX) (D+) (0V) │
│ (GND) (TX) (D-) │
│ (D+) (D+) │
│ (D-) BOOT (D-) │
│ POWER │
└─────────────────────────────┘
主要接口:
- USB 供电:5V 2A
- UART 串口:115200 波特率
- GPIO:多个通用 IO 引脚
- I2C/SPI:用于传感器1.3 性能指标
| 指标 | NanoPI M4 | 备注 |
|---|---|---|
| CPU 主频 | 2.0 GHz | 可超频至 2.4 GHz |
| 内存带宽 | 12.8 GB/s | 支持 LPDDR4 |
| 性能 | ~40 GFLOPS | 单精度浮点 |
| TDP | 5-10W | 正常工作功耗 |
| 启动时间 | ~20-30s | 从上电到系统就绪 |
2. 系统安装与配置
2.1 准备工作
需要的工具和材料:
硬件
- NanoPI 开发板
- 电源适配器(5V 2A 或以上)
- MicroSD 卡(≥8GB,推荐 Class 10)
- USB 转串口模块(调试用)
- 网线或 WiFi(联网用)
软件
- 刻录工具:Etcher、dd 或 Win32DiskImager
- 系统镜像:官方 Debian/Ubuntu 镜像
- SSH 客户端:PuTTY、OpenSSH 等
2.2 系统镜像下载
访问友善电子官网下载最新镜像:
bash
# 下载 NanoPI M4 Debian 10 镜像
wget http://download.friendlyarm.com/nanopi-m4/images-for-eflasher/nanopi-m4-debian-10.3-cd-focal-arm64-20200610.zip
# 解压镜像
unzip nanopi-m4-debian-10.3-cd-focal-arm64-20200610.zip
# 得到 .img 文件2.3 刻录系统镜像
在 Linux 上刻录:
bash
# 查看 SD 卡设备
lsblk
# 假设 SD 卡为 /dev/sdb(注意不要选错!)
sudo dd if=nanopi-m4-debian-10.3.img of=/dev/sdb bs=4M
sudo sync
# 弹出 SD 卡
sudo eject /dev/sdb在 Windows 上刻录:
- 下载 Win32DiskImager
- 选择镜像文件
- 选择 SD 卡驱动器
- 点击 Write(写入)
在 macOS 上刻录:
bash
# 查找 SD 卡
diskutil list
# 卸载 SD 卡(假设为 /dev/disk2)
diskutil unmountDisk /dev/disk2
# 写入镜像
sudo dd if=nanopi-m4-debian-10.3.img of=/dev/rdisk2 bs=4m
# 弹出
diskutil eject /dev/disk22.4 首次启动配置
硬件连接:
- 将 MicroSD 卡插入 NanoPI
- 连接电源(系统会自动启动)
- 连接网线或 WiFi
- 连接 HDMI 显示器(可选)
通过串口连接:
bash
# 使用 minicom 或 screen
screen /dev/ttyUSB0 115200
# 或使用 minicom
minicom -s
# 默认用户名:root,密码:root首次启动脚本:
bash
# 系统首次启动会运行配置脚本
# 按照提示完成设置:
# 1. 设置新用户密码
# 2. 配置时区
# 3. 配置网络
# 4. 设置 root 密码2.5 网络配置
查看网络状态:
bash
# 查看网络接口
ifconfig
# 查看 IP 地址
ip addr
# 查看路由
route -n配置静态 IP(编辑 /etc/network/interfaces):
bash
sudo nano /etc/network/interfaces
# 配置示例:
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
# 重启网络
sudo systemctl restart networking配置 WiFi(如果有 WiFi 模块):
bash
# 编辑 wpa_supplicant 配置
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
# 添加网络配置:
network={
ssid="YourSSID"
psk="YourPassword"
key_mgmt=WPA-PSK
}
# 启用 WiFi
sudo ifup wlan03. 系统优化与配置
3.1 系统更新
bash
# 更新软件包列表
sudo apt-get update
# 升级系统
sudo apt-get upgrade
# 安装必要工具
sudo apt-get install -y \
build-essential \
git \
wget \
curl \
vim \
htop \
gcc \
g++ \
cmake3.2 性能优化
超频配置(谨慎操作):
bash
# 编辑 U-Boot 环境
sudo fw_setenv cpufreq 2400
# 查看当前频率
cat /proc/cpuinfo | grep "cpu MHz"
# 调整 CPU 频率
echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 2000000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed内存优化:
bash
# 清理缓存
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
# 查看内存使用
free -h
# 查看交换分区
swapon -s
# 增加交换分区
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile磁盘优化:
bash
# 查看磁盘使用情况
df -h
# 扩展文件系统(第一次启动通常自动扩展)
sudo resize2fs /dev/mmcblk0p2
# 优化 SD 卡性能
sudo sh -c 'echo 16 > /sys/block/mmcblk0/queue/read_ahead_kb'3.3 GPIO 和硬件接口
GPIO 访问(使用 sysfs):
bash
# 导出 GPIO 脚
echo 97 > /sys/class/gpio/export
# 设置方向
echo out > /sys/class/gpio/gpio97/direction
# 写入高电平
echo 1 > /sys/class/gpio/gpio97/value
# 读取引脚状态
cat /sys/class/gpio/gpio97/value
# 取消导出
echo 97 > /sys/class/gpio/unexport使用 Python 访问 GPIO:
python
import RPi.GPIO as GPIO
import time
# 使用 BCM 编号
GPIO.setmode(GPIO.BCM)
# 设置 GPIO 17 为输出
GPIO.setup(17, GPIO.OUT)
# 输出高电平
GPIO.output(17, GPIO.HIGH)
# 等待 1 秒
time.sleep(1)
# 输出低电平
GPIO.output(17, GPIO.LOW)
# 清理
GPIO.cleanup()I2C 通信:
bash
# 检测 I2C 设备
sudo i2cdetect -y 0
# 使用 i2ctools 与 I2C 设备通信
sudo i2cget -y 0 0x50 0x00 # 读取地址
sudo i2cset -y 0 0x50 0x00 0xFF # 写入数据3.4 系统服务配置
创建 LeBot 服务(自动启动控制程序):
bash
# 创建服务文件
sudo nano /etc/systemd/system/lebot.service服务文件内容:
ini
[Unit]
Description=LeBot Robot Control System
After=network.target
Wants=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=/home/lebot
ExecStart=/usr/bin/python3 /home/lebot/control_system.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target启用和管理服务:
bash
# 启用开机自启动
sudo systemctl enable lebot
# 启动服务
sudo systemctl start lebot
# 查看服务状态
sudo systemctl status lebot
# 查看服务日志
sudo journalctl -u lebot -f
# 停止服务
sudo systemctl stop lebot4. LeBot 软件部署
4.1 安装依赖
bash
# 安装 Python 3 和 pip
sudo apt-get install -y \
python3 \
python3-dev \
python3-pip
# 升级 pip
sudo pip3 install --upgrade pip
# 安装 ROS(可选,用于高级功能)
# 详见 ROS 官方文档
# 安装常用 Python 库
sudo pip3 install \
numpy \
scipy \
opencv-python \
paramiko \
requests4.2 部署控制程序
bash
# 创建应用目录
mkdir -p /home/lebot/lebot_control
cd /home/lebot/lebot_control
# 从 Git 克隆源代码
git clone https://github.com/yourusername/lebot_control.git .
# 或者上传本地文件
scp -r ./lebot_control root@192.168.1.100:/home/lebot/控制程序结构:
/home/lebot/lebot_control/
├── main.py # 主程序入口
├── config.yaml # 配置文件
├── motor_control.py # 电机控制模块
├── sensor_fusion.py # 传感器融合
├── path_planning.py # 路径规划
├── trajectory_control.py # 轨迹跟踪
├── communication.py # 通信模块
├── logs/ # 日志目录
└── data/ # 数据目录4.3 配置文件示例
config.yaml:
yaml
# LeBot 控制系统配置文件
robot:
name: "LeBot-001"
type: "wheeled_legged"
wheelbase: 0.5
track: 0.4
hardware:
motor_count: 4
motor_type: "brushless_dc"
motors:
- id: 0
port: "/dev/ttyUSB0"
baudrate: 115200
- id: 1
port: "/dev/ttyUSB1"
baudrate: 115200
- id: 2
port: "/dev/ttyUSB2"
baudrate: 115200
- id: 3
port: "/dev/ttyUSB3"
baudrate: 115200
sensors:
imu:
type: "MPU6050"
i2c_bus: 0
i2c_address: 0x68
camera:
type: "USB"
device: "/dev/video0"
resolution: [640, 480]
fps: 30
control:
loop_rate: 50 # Hz
max_velocity: 2.0 # m/s
max_angular_velocity: 3.0 # rad/s
network:
ros_master: "localhost"
ros_port: 11311
mqtt_broker: "192.168.1.1"
mqtt_port: 18834.4 运行和测试
bash
# 进入应用目录
cd /home/lebot/lebot_control
# 运行主程序
python3 main.py
# 或者使用 nohup 后台运行
nohup python3 main.py > lebot.log 2>&1 &
# 查看运行日志
tail -f lebot.log5. 交叉编译部署
对于 C/C++ 程序,使用交叉编译提高效率。
5.1 设置交叉编译工具链
bash
# 安装 ARM 交叉编译工具
sudo apt-get install -y arm-linux-gnueabihf-gcc arm-linux-gnueabihf-g++
# 或者 64 位
sudo apt-get install -y aarch64-linux-gnu-gcc aarch64-linux-gnu-g++
# 验证安装
arm-linux-gnueabihf-gcc --version5.2 CMake 交叉编译配置
创建 toolchain.cmake:
cmake
# NanoPI M4 交叉编译工具链配置
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
# 交叉编译器路径
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
# 查找库和头文件的路径
set(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# 编译优化
set(CMAKE_CXX_FLAGS "-O2 -march=armv8-a")构建示例:
bash
# 创建构建目录
mkdir build
cd build
# 使用工具链进行交叉编译
cmake -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake ..
make
# 部署到 NanoPI
scp lebot_control root@192.168.1.100:/home/lebot/5.3 使用 cargo-zigbuild 编译 Rust
bash
# 安装 zigbuild
cargo install cargo-zigbuild
# 设置目标
rustup target add aarch64-unknown-linux-gnu
# 交叉编译
cargo zigbuild --release --target aarch64-unknown-linux-gnu
# 二进制文件位于
# target/aarch64-unknown-linux-gnu/release/lebot_control6. 调试与故障排除
6.1 常见问题
问题 1:系统启动慢
bash
# 查看启动时间
systemd-analyze
# 查看各服务启动时间
systemd-analyze blame
# 禁用不必要的服务
sudo systemctl disable service_name问题 2:内存不足
bash
# 查看内存使用
free -h
# 查看进程内存占用
ps aux --sort=-%mem | head -20
# 增加交换分区(见 3.2)问题 3:GPIO 无法访问
bash
# 检查 GPIO 导出
ls /sys/class/gpio/
# 重新导出
echo 97 > /sys/class/gpio/export
# 检查权限
ls -la /sys/class/gpio/gpio97/问题 4:无法连接 NanoPI
bash
# 检查网络连接
ping 192.168.1.100
# 查看 SSH 状态
sudo systemctl status ssh
# 启用 SSH
sudo systemctl start ssh
sudo systemctl enable ssh6.2 性能监控
bash
# 监控 CPU 和内存
htop
# 查看实时进程信息
top
# 查看磁盘 IO
iostat -x 1
# 查看网络流量
iftop
# 查看温度(如果支持)
cat /sys/class/thermal/thermal_zone0/temp6.3 日志分析
bash
# 查看系统日志
journalctl -n 100
# 查看特定服务日志
journalctl -u lebot.service -n 50
# 实时查看日志
journalctl -f
# 查看启动日志
dmesg | tail -207. 安全加固
7.1 用户管理
bash
# 创建专用用户
sudo useradd -m -s /bin/bash lebot
# 设置密码
sudo passwd lebot
# 给予 sudo 权限
sudo usermod -aG sudo lebot
# 删除默认 root 密码登录
sudo usermod -L root7.2 防火墙配置
bash
# 安装防火墙
sudo apt-get install -y ufw
# 启用防火墙
sudo ufw enable
# 允许 SSH
sudo ufw allow 22/tcp
# 允许特定端口
sudo ufw allow 8080/tcp
# 查看规则
sudo ufw status7.3 SSH 安全
bash
# 编辑 SSH 配置
sudo nano /etc/ssh/sshd_config
# 修改项:
# Port 2222 # 改变 SSH 端口
# PermitRootLogin no # 禁止 root 登录
# PasswordAuthentication no # 禁用密码认证
# PubkeyAuthentication yes # 启用密钥认证
# 重启 SSH
sudo systemctl restart ssh
# 生成密钥对(客户端)
ssh-keygen -t rsa -b 4096
# 上传公钥到 NanoPI
ssh-copy-id -i ~/.ssh/id_rsa.pub lebot@192.168.1.1008. 定期维护
8.1 备份和恢复
bash
# 备份系统
sudo dd if=/dev/mmcblk0 of=nanopi-backup.img bs=4M
# 恢复系统
sudo dd if=nanopi-backup.img of=/dev/sdb bs=4M
# 增量备份
rsync -avz lebot@192.168.1.100:/home/lebot ./backup/8.2 定期更新
bash
# 创建定期更新脚本
cat > update.sh << 'EOF'
#!/bin/bash
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get autoremove -y
EOF
# 设置 cron 任务(每周更新)
crontab -e
# 添加行:
0 2 * * 0 /home/lebot/update.sh8.3 监控和告警
bash
# 监控磁盘空间
df -h / | tail -1
# 监控温度
cat /sys/class/thermal/thermal_zone*/temp
# 创建监控脚本
cat > monitor.py << 'EOF'
#!/usr/bin/env python3
import os
import subprocess
def check_disk():
result = os.popen("df -h / | tail -1").read()
usage = float(result.split()[4].rstrip('%'))
if usage > 80:
print("Warning: Disk usage is high!")
def check_cpu():
result = os.popen("top -bn1 | grep 'Cpu'").read()
print(f"CPU: {result}")
check_disk()
check_cpu()
EOF9. 参考资源
- 官方文档:http://wiki.friendlyarm.com/
- NanoPI M4 文档:http://wiki.friendlyarm.com/wiki/index.php/NanoPI_M4
- U-Boot 文档:http://wiki.friendlyarm.com/wiki/index.php/U-Boot
- Debian 文档:https://www.debian.org/doc/
- ARM 交叉编译:https://developer.arm.com/
10. 快速参考
| 操作 | 命令 |
|---|---|
| 连接 SSH | ssh root@192.168.1.100 |
| 查看温度 | cat /sys/class/thermal/thermal_zone0/temp |
| 查看频率 | cat /proc/cpuinfo | grep MHz |
| 重启系统 | sudo reboot |
| 关机 | sudo shutdown -h now |
| 文件传输 | scp file root@192.168.1.100:/path/ |