开发与 CI 工作流入口(环境 / 依赖 / NFS)。
通用小工具(格式化、打包、板端 Swap、CMake 检查)在 tools/python/。
| 路径 | 用途 |
|---|---|
setup_environment.bash |
统一环境变量;make install 后为 $PREFIX/share/autonomy/setup.bash |
install_dependencies.py |
一键依赖安装 |
install_deps/ |
模块化实现(python3 -m install_deps) |
share_nfs_workspace.sh |
一键 NFS + 板端源码挂载(多板 IP 可参数化) |
nfs_boards/*.env |
板子配置档(按名字加载) |
source scripts/setup_environment.bash
python3 scripts/install_dependencies.py --skip-installed
python3 scripts/install_dependencies.py --profile board --skip-installed
# 可选:统一前缀(默认 /usr/local;勿与 ~/.local 混用)
python3 scripts/install_dependencies.py --prefix /opt/autonomy --skip-installed
python3 tools/python/clang_format_sources.py --check依赖数据:install_deps/data/*.json;第三方安装脚本:docker/install/。
第三方库在 docker/install/install_*.sh,由 install_dependencies.py 按 Dockerfile 顺序调用。
已装到安装前缀(默认 /usr/local,可用 --prefix)的库,带 --skip-installed 时会跳过,不会再 clone。
python3 scripts/install_dependencies.py --list --profile board
# 输出 apt 包 + thirdparty 脚本名(如 install_ceres_solver.sh)直接跑对应脚本(最快,不跑整条依赖链):
cd /path/to/autonomy # 或板子上 ~/autonomy
# 示例:只装 Ceres / glog / protobuf
bash docker/install/install_ceres_solver.sh
bash docker/install/install_glog.sh
bash docker/install/install_protobuf.sh
# 板子内存紧时限制并行(Ceres 易 OOM)
AUTONOMY_MAKE_JOBS=2 bash docker/install/install_ceres_solver.sh脚本若检测到安装前缀已有产物会直接 [OK] … skipping。单库改前缀:AUTONOMY_INSTALL_PREFIX=/opt/autonomy bash docker/install/install_XXX.sh。
# 从 Ceres 起装到 board 列表末尾(跳过已装)
python3 scripts/install_dependencies.py --profile board \
--thirdparty-only --skip-installed \
--resume-from install_ceres_solver.sh| 参数 | 作用 |
|---|---|
--prefix PATH |
第三方统一安装前缀(默认 /usr/local;导出 AUTONOMY_INSTALL_PREFIX) |
--thirdparty-only |
不跑 apt |
--resume-from install_XXX.sh |
从该脚本起往后装 |
--skip-installed |
前缀(等)已有则跳过,不 clone |
--force-thirdparty |
强制全部重编(忽略 skip) |
| 脚本 | 库 |
|---|---|
install_gtest.sh |
GoogleTest |
install_glog.sh |
glog 0.6 |
install_gflags.sh |
gflags |
install_protobuf.sh |
Protobuf 3.19 |
install_grpc.sh |
gRPC |
install_ceres_solver.sh |
Ceres |
install_opencv.sh |
OpenCV(板端可跳过,用 apt) |
install_fbow.sh |
FBoW |
install_behaviortree_cpp.sh |
BehaviorTree.CPP |
install_gperftools.sh |
tcmalloc(系统有则可跳过) |
install_ipopt.sh |
Ipopt(多为 apt) |
install_fastdds.sh |
Fast DDS v3.6.2(可选跨机 RTPS,SECURITY=ON) |
sudo apt-get install -y libeigen3-dev # 示例
# 或只跑依赖脚本里的 apt 段:
python3 scripts/install_dependencies.py --profile board --apt-only目标:开发机改代码 → NFS 实时同步到板子 → 板子本地盘编译(autonomy_ws/build)。
脚本支持三种等价方式,优先级:命令行 > 当前 shell 环境变量 > --board-profile 文件 > 内置默认。
cd /path/to/autonomy # 仓库根(含 CMakeLists.txt / scripts/)
# 板子 A(默认实验室)
bash scripts/share_nfs_workspace.sh all --board-ip 192.168.234.1
# 板子 B(另一个 IP)
bash scripts/share_nfs_workspace.sh all --board-ip 192.168.234.20
# 指定用户 + 本机 NFS 地址 + 网段
bash scripts/share_nfs_workspace.sh all \
--board-ip 10.0.0.5 \
--board-user firefly \
--host-ip 10.0.0.1 \
--client-net 10.0.0.0/24
# 完整 SSH 目标(等价于 user@ip)
bash scripts/share_nfs_workspace.sh all --board-host firefly@192.168.234.20
# 只查状态 / 卸载时也要带同一块板的参数
bash scripts/share_nfs_workspace.sh status --board-ip 192.168.234.20
bash scripts/share_nfs_workspace.sh down --board-ip 192.168.234.20| 参数 | 对应变量 | 含义 |
|---|---|---|
--board-ip IP |
BOARD_IP → 合成 FIREFLY_HOST |
板子 IP(最常用) |
--board-user USER |
BOARD_USER(默认 firefly) |
SSH 用户名 |
--board-host USER@IP |
FIREFLY_HOST |
完整 SSH 目标(覆盖上面两项) |
--host-ip IP |
HOST_IP |
开发机在板子眼里的地址(NFS server) |
--client-net CIDR |
CLIENT_NET |
/etc/exports 允许的客户端网段 |
--export PATH |
EXPORT_PATH |
开发机导出目录(默认=仓库根) |
--mount PATH |
MOUNT_POINT |
板子挂载点(默认 /home/firefly/autonomy) |
--ws PATH |
WS_LOCAL |
板子本地工作区(默认 /home/firefly/autonomy_ws) |
--ssh-key PATH |
FIREFLY_SSH_KEY |
私钥 |
--board-profile NAME |
(加载文件) | 见方式 C |
--board-ip + --board-user 会自动得到 FIREFLY_HOST=user@ip,无需改脚本。
export BOARD_IP=192.168.234.20
export BOARD_USER=firefly
# 或直接:
# export FIREFLY_HOST=firefly@192.168.234.20
export HOST_IP=192.168.234.50 # 可选;不设则自动探测本机 234.x
export CLIENT_NET=192.168.234.0/24
export MOUNT_POINT=/home/firefly/autonomy
export WS_LOCAL=/home/firefly/autonomy_ws
bash scripts/share_nfs_workspace.sh all
bash scripts/share_nfs_workspace.sh status目录:scripts/nfs_boards/<名字>.env
已提供示例:
scripts/nfs_boards/lab-default.env→192.168.234.1scripts/nfs_boards/lab-board-b.env→192.168.234.20
# 使用配置档
bash scripts/share_nfs_workspace.sh all --board-profile lab-default
bash scripts/share_nfs_workspace.sh all --board-profile lab-board-b
# 配置档 + 命令行覆盖(命令行优先)
bash scripts/share_nfs_workspace.sh all \
--board-profile lab-default \
--board-ip 192.168.234.30新建一块板时:
cp scripts/nfs_boards/lab-default.env scripts/nfs_boards/my-rk3588.env
# 编辑 my-rk3588.env 里的 BOARD_IP / BOARD_USER / CLIENT_NET …
bash scripts/share_nfs_workspace.sh all --board-profile my-rk3588*.env 示例内容:
BOARD_USER=firefly
BOARD_IP=192.168.234.20
CLIENT_NET=192.168.234.0/24
MOUNT_POINT=/home/firefly/autonomy
WS_LOCAL=/home/firefly/autonomy_ws
# HOST_IP=192.168.234.50 # 可选
# FIREFLY_SSH_KEY=$HOME/.ssh/id_ed25519开发机 (HOST_IP, 自动或 --host-ip)
EXPORT_PATH ──NFS──► 板子 (BOARD_IP / --board-ip)
MOUNT_POINT = NFS 源码
WS_LOCAL/build = 本地编译目录
SSH = BOARD_USER@BOARD_IP
以下以「板子 IP = 192.168.234.20」为例;换成你的 IP 即可。
# 开发机:应能 ping 到板子
ping -c1 192.168.234.20
# 免密(每块板做一次)
ssh-copy-id -i ~/.ssh/id_ed25519.pub firefly@192.168.234.20
ssh firefly@192.168.234.20 'echo ok'板子上网(装依赖需要):默认路由走开发机,开发机需开启转发/NAT(换电脑时再做一次):
# 开发机(需 sudo)
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -s 192.168.234.0/24 ! -d 192.168.234.0/24 -j MASQUERADE
# 板子
ssh firefly@192.168.234.20 \
'sudo ip route replace default via 192.168.234.50' # via = 你的 HOST_IPcd /path/to/autonomy
bash scripts/share_nfs_workspace.sh all --board-ip 192.168.234.20
# 或
bash scripts/share_nfs_workspace.sh all --board-profile lab-board-b
bash scripts/share_nfs_workspace.sh status --board-ip 192.168.234.20成功标志:
- 开发机:
showmount -e <HOST_IP>能看到导出路径 - 板子:
df -h ~/autonomy为 NFS;~/autonomy_ws/src/autonomy→ 该挂载点
ssh firefly@192.168.234.20
# 确认出网
ping -c1 8.8.8.8
cd ~/autonomy # 已是 NFS 上的源码
python3 scripts/install_dependencies.py --profile board --skip-installed说明:--profile board 对齐 aarch64 Dockerfile + CMake;glog/protobuf/ceres 等走 docker/install → /usr/local。
务必在 ~/autonomy_ws 构建,不要用 NFS 上的 ~/autonomy/build。
ssh firefly@192.168.234.20
cd ~/autonomy_ws
cmake -S src/autonomy -B build \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH=/usr/local \
-DBUILD_AUTOVIZ=OFF \
-DBUILD_ORBISVIEW=OFF \
-DBUILD_DOCS=OFF \
-DBUILD_TEST=OFF \
-DBUILD_ONNXRUNTIME=OFF
cmake --build build -j$(nproc)
# 二进制一般在 build/bin、库在 build/lib开发机改代码后,板子 NFS 立即可见,直接重新 cmake --build 即可。
# 先卸当前板(带上旧 IP)
bash scripts/share_nfs_workspace.sh down --board-ip 192.168.234.20
# 挂新板
bash scripts/share_nfs_workspace.sh all --board-ip 192.168.234.30同一开发机可 export 一次,多块板先后 mount;down / status / all 都通过 --board-ip 指定操作哪一块。
| 命令 | 在哪跑 | 作用 |
|---|---|---|
all(默认) |
开发机 | export + SSH 到板子 mount + 建 autonomy_ws |
server |
开发机 | 只配置 NFS 导出 |
client |
板子本机 | 只挂载(无 SSH) |
status |
开发机 | 看 export + 远端挂载(需带 --board-ip) |
down |
开发机 | 远端 umount + 本机 unexport |
bash scripts/share_nfs_workspace.sh --help- 网卡进同一网段;
ping通板子。 HOST_IP可变:不设则自动探测本机192.168.234.x,或--host-ip。- 重新
ssh-copy-id;重新all --board-ip …。 - 若板子还挂着旧电脑 IP:先在板子
umount并清/etc/fstab里旧 nfs 行,再一键。
ssh firefly@192.168.234.20
sudo umount /home/firefly/autonomy || sudo umount -l /home/firefly/autonomy
sudo sed -i '\#/home/firefly/autonomy#d' /etc/fstab| 现象 | 处理 |
|---|---|
| 不知道板子 IP | 路由/交换机查看;或串口/ip addr;确认后 --board-ip |
status 连错板 |
忘了带 --board-ip,仍用默认 .1 |
| mount 失败 | --host-ip 是否为本机地址;CLIENT_NET 是否覆盖板子 |
| apt 解析失败 | 板子无默认路由;经开发机 NAT(见步骤 0) |
| glog 链接错误 | 用 install_dependencies.py --profile board,勿混用 apt glog |
| 编译很慢/锁文件 | 确认 -B ~/autonomy_ws/build,不是 NFS 上的 build |
- 设置
AUTONOMY_ROOT/AUTONOMY_PATH/AUTONOMY_BUILD_DIR - 注入
build/bin、build/lib到PATH/LD_LIBRARY_PATH - Autolink / Autonomy / Autodriver / glog 相关变量
export AUTONOMY_BUILD_DIR=$PWD/build/autonomy-minimal
export AUTONOMY_SETUP_QUIET=1
source scripts/setup_environment.bash