这周要做到什么
11 月 11 日调研汇报会前,每个人只需要交一个 Pull Request(合并请求),里面是你自己写的 FFT 小作业。走完它,Linux、Git、Python 三门必修就都碰过一遍了。预计 5 小时左右,可以分几个晚上做。
| 顺序 | 做什么 | 预计用时 | 做完的样子 |
|---|---|---|---|
| 1 | 装好环境 | 30–60 分钟 | 3 条检查命令都输出版本号 |
| 2 | Linux 命令行 | 1 小时 | 能进目录、看日志、管文件、SSH 登录 |
| 3 | Git 和 GitHub | 1.5 小时 | 解决一次冲突,代码出现在 GitHub 上 |
| 4 | Python 和 FFT | 1.5 小时 | 找出信号频率,提交 Pull Request |
做完后把 PR 链接发到飞书群。调研任务另算,只做自己组的部分,见调研任务书。
可以用大模型学习和查错,但不许直接贴它的回答。组会上会随机问“这行代码为什么这样写”,要能自己讲清楚。
第 1 步:按你的电脑装好环境
这一步的目标是得到一个能跑 Linux 命令的黑色窗口,它叫“终端”。装好之后,后面所有命令在三种系统上写法都一样。
Windows:用 WSL
WSL 是 Windows 自带的 Linux 子系统,不用装双系统,也不用虚拟机软件。
- 右键点开始菜单,选“终端(管理员)”,运行下面的命令。它会下载并安装 Ubuntu,需要几分钟。
wsl --install -d Ubuntu-24.04
- 重启电脑,从开始菜单打开 Ubuntu。
- 第一次打开时要设置用户名和密码。用户名用小写英文。输入密码时屏幕不显示任何字符,这是正常的,输完回车即可。
- 在 Ubuntu 窗口里运行下面的命令,安装这周要用的软件。
sudo表示用管理员权限运行,会要你输入刚设置的密码。
sudo apt update && sudo apt install -y git python3-venv openssh-server
以后做任务都在 Ubuntu 窗口里,不要用 PowerShell。如果窗口里显示 PS C:\Users\...>,说明你还在 PowerShell,输入 wsl 回车就能进入 Ubuntu。
macOS:用自带的“终端”
macOS 不需要 WSL。按 Cmd+空格,搜索“终端”并打开,运行下面的命令,在弹窗里点“安装”。它会装好 git 和 python3。
xcode-select --install
Ubuntu:直接用
按 Ctrl+Alt+T 打开终端,运行上面 Windows 第 4 步的 sudo apt 命令。
检查是否装好
依次运行下面三条,每条都输出版本号就过关,版本号不用和别人一样。
git --version
python3 --version
ssh -V
三种系统只差这几处
| 要做的事 | Windows(WSL) | macOS | Ubuntu |
|---|---|---|---|
| 粘贴命令 | Ctrl+Shift+V | Cmd+V | Ctrl+Shift+V |
| 用文件管理器打开当前目录 | explorer.exe . |
open . |
xdg-open . |
| 启动 SSH 服务 | sudo service ssh start |
系统设置 > 通用 > 共享 > 打开“远程登录” | sudo service ssh start |
终端里的 Ctrl+C 不是复制,而是停止当前程序。Windows 用户把项目放在 ~ 下,不要放在 /mnt/c 下,那里读写慢,也容易出权限问题。
写代码推荐用 VS Code。Windows 用户再装一个 WSL 扩展,之后在 Ubuntu 窗口的项目目录里运行 code . 就能打开。
参考教程:微软官方 WSL 安装说明 · CSDN:Windows 11 WSL + Ubuntu 24.04 安装指南
第 2 步:Linux 命令行
以后的雷达和开发板大多没有图形界面,只能靠命令行操作。这一步用一段模拟雷达日志,练看日志、管文件和远程登录。这段日志是脚本生成的,不是真实设备的输出。
先学会看路径
~ 是你的主目录,. 是当前目录,.. 是上一级目录。Linux 里的路径用 / 分隔,大小写敏感。按 Tab 键可以自动补全文件名,按上方向键可以调出上一条命令,这两个键能省掉大部分打字和拼写错误。
建项目目录
mkdir -p ~/senseguard-week1/data ~/senseguard-week1/scripts ~/senseguard-week1/output
cd ~/senseguard-week1
pwd
ls
mkdir -p 建目录,cd 进入目录,pwd 显示当前位置,ls 列出文件。你应该看到路径以 senseguard-week1 结尾,并列出 data、output、scripts。后面所有命令都在这个目录里运行。
生成模拟日志
运行 nano scripts/fake_radar.py 打开编辑器,粘贴下面的代码,按 Ctrl+O、回车保存,再按 Ctrl+X 退出。用 VS Code 新建这个文件也可以。
import random
import time
with open("data/radar.log", "w") as f:
for i in range(60):
distance = max(1.5, 4.0 - 0.1 * i) + random.gauss(0, 0.05)
if random.random() < 0.1:
distance = -1.0 # 这一帧没测到
f.write(f"{i * 0.5:.1f},{distance:.2f}\n")
f.flush()
time.sleep(0.5)
它模拟一个人从 4 米外走到 1.5 米处,写 30 秒。每行是“时间(秒),距离(米)”,距离为 -1.00 的是坏帧。
实时看日志
开两个终端窗口,都先运行 cd ~/senseguard-week1。
窗口 A 运行脚本:
python3 scripts/fake_radar.py
窗口 B 运行下面的命令,你会看到日志一行行冒出来。以后看设备运行情况,用的就是这个办法。看完按 Ctrl+C 退出。
tail -f data/radar.log
练这几个命令
每条都自己敲一遍,并看懂输出。
| 命令 | 它做什么 | 你应该看到 |
|---|---|---|
tail -n 5 data/radar.log |
看文件最后 5 行 | 5 行“时间,距离” |
grep ",-1.00" data/radar.log |
找出包含这段文字的行 | 所有坏帧 |
grep -c ",-1.00" data/radar.log |
只统计行数 | 一个数字,每次运行结果可能不同 |
cp data/radar.log output/a.log |
复制文件 | 没有输出,就是成功 |
mv output/a.log output/b.log |
改名,也可以用来移动文件 | 没有输出 |
rm output/b.log |
删除文件 | 没有输出,文件不进回收站 |
Linux 命令成功时通常什么都不输出,没有报错就是成功。这周不要练 rm -rf,它会不提示地删掉整个目录。
SSH 远程登录
SSH 用来登录另一台机器。这周先登录自己的电脑,等连开发板时,把 localhost 换成 用户名@板子IP 就行。
先按上面的表启动 SSH 服务,然后运行:
ssh localhost
第一次连接会问是否信任,输入 yes 回车,再输入你的 Ubuntu 或 Mac 登录密码。登录成功后运行 whoami 看一眼,再输入 exit 退出。
自查
参考教程:菜鸟教程:Linux · 菜鸟教程:grep · 菜鸟教程:tail · CSDN:30 个常用 Linux 命令和实战场景 · MIT 计算机教育中缺失的一课(中文)
第 3 步:Git 和 GitHub
Git 记录代码的每一次改动,GitHub 是放代码的网站。项目的代码以后都要经过分支和合并请求,所以这一步用自己的练习仓库走一遍。
代码会经过四个位置:改文件时在工作区,git add 放进暂存区,git commit 存进本地仓库,git push 送到 GitHub。不确定现在是什么状态时,就运行 git status,它还会提示下一步能做什么。
告诉 Git 你是谁
每台电脑只需设置一次。邮箱用你注册 GitHub 的邮箱。
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
git config --global init.defaultBranch main
git config --global core.editor nano
第一次提交
.gitignore 列出不进仓库的文件。虚拟环境、缓存和生成的日志都能重新生成,不需要保存。
cd ~/senseguard-week1
printf '.venv/\n__pycache__/\ndata/*.log\n' > .gitignore
echo "# SenseGuard week 1" > README.md
git init
git add .gitignore README.md scripts
git commit -m "chore: init project"
最后一条会输出类似 3 files changed 的提示,说明提交成功。
造一次冲突,再解决它
两个分支改了同一行,Git 不知道听谁的,就会冲突。下面故意造一次,以后真遇到就不慌了。分三段依次运行:
先在 main 分支上建一个文件。
echo "雷达帧率:待定" > notes.txt
git add notes.txt && git commit -m "docs: add notes"
开一个新分支,把这一行改成 10 fps。git switch -c 的意思是新建分支并切换过去。
git switch -c set-fps
echo "雷达帧率:10 fps" > notes.txt
git add notes.txt && git commit -m "docs: set fps to 10"
回到 main,把同一行改成 20 fps,再合并。这时会看到 CONFLICT,这正是我们要的结果。
git switch main
echo "雷达帧率:20 fps" > notes.txt
git add notes.txt && git commit -m "docs: set fps to 20"
git merge set-fps
用 nano notes.txt 打开文件,内容是这样的:
<<<<<<< HEAD
雷达帧率:20 fps
=======
雷达帧率:10 fps
>>>>>>> set-fps
======= 上面是当前分支的内容,下面是要合并进来的内容。解决冲突就是决定最后留什么:把文件改成只剩你想要的一行,三行标记也要删掉。保存后提交:
git add notes.txt && git commit -m "merge: resolve fps conflict"
git log --oneline --graph
在输出的图里看到两条线分开又合拢,就成功了。
把代码推到 GitHub
- 在 github.com 注册账号。
- 生成 SSH 密钥,提示时一路回车。它相当于你这台电脑的身份证,配好之后推送不用输密码。
ssh-keygen -t ed25519 -C "你的邮箱"
cat ~/.ssh/id_ed25519.pub
- 复制第二条命令输出的整行内容。这是公钥,可以公开。没有
.pub后缀的是私钥,不要发给任何人。 - 在 GitHub 右上角头像打开 Settings > SSH and GPG keys > New SSH key,粘贴后保存。
- 测试连接。第一次会问是否信任,输入
yes。看到Hi 你的用户名!就成功了。
ssh -T git@github.com
- 在 GitHub 新建仓库,名字填
senseguard-week1,选 Public,不要勾选添加 README。 - 把本地仓库和它关联并推送,“你的用户名”换成自己的:
git remote add origin git@github.com:你的用户名/senseguard-week1.git
git push -u origin main
刷新 GitHub 页面,能看到你的文件就完成了。
自查
参考教程:Learn Git Branching(网页互动练习) · 菜鸟教程:Git · 廖雪峰:Git 教程 · B 站:40 分钟学会 Git · CSDN:GitHub 配置 SSH Key(新手版) · CSDN:Git 冲突处理 · Pro Git 中文版
第 4 步:Python 和 FFT 小作业
这是这周唯一要交的作业:用 NumPy 生成“正弦 + 噪声”,用 FFT 找出频率,画图,提交 PR。这就是雷达信号处理最小的一步。FMCW 雷达的差频信号也是正弦,频率和距离成正比,找到频谱上的峰,就找到了距离。
先弄懂三个词
- 采样率: 每秒记录多少个点。1000 Hz 就是每秒记 1000 个点。
- 频率: 信号每秒振动多少次。50 Hz 就是每秒振动 50 次。
- FFT: 把“随时间变化的波形”换算成“每个频率有多强”。一段信号混着噪声时,波形上看不清,换到频谱上就是一个突出的峰。
看不太明白,就先看 B 站这个 3Blue1Brown 的傅里叶变换动画。
建虚拟环境
虚拟环境把这个项目用的 Python 包关在项目目录里,不影响系统和其他项目。
cd ~/senseguard-week1
python3 -m venv .venv
source .venv/bin/activate
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple numpy matplotlib
激活后,提示符前面会多出 (.venv)。每开一个新窗口,都要重新运行一次 source .venv/bin/activate。安装命令里用的是清华镜像,国内下载更快。
写作业
先开一个分支,作业都在这个分支上做:
git switch -c fft-homework
新建 scripts/fft_homework.py,复制下面的骨架,然后按注释把六步补全。每个人的频率不同:f0 等于 20 加学号后两位。
import numpy as np
import matplotlib.pyplot as plt
fs = 1000 # 采样率(Hz)
duration = 1.0 # 信号时长(秒)
f0 = 20 + 37 # 把 37 换成你的学号后两位
noise = 0.8 # 噪声大小
# 1. 生成时间轴 t:np.arange(0, duration, 1 / fs)
# 2. 生成信号 x:np.sin(2 * np.pi * f0 * t) 加上噪声
# 噪声写法:noise * np.random.default_rng().normal(size=t.size)
# 3. 算频谱:np.abs(np.fft.rfft(x))
# 4. 算每个点对应的频率:np.fft.rfftfreq(t.size, 1 / fs)
# 5. 用 np.argmax 找频谱最高点的下标,打印这个下标对应的频率
# 6. 用 plt.subplots(2, 1) 上下画两张图:
# 上图是前 0.2 秒的波形,下图是频谱,用 plt.savefig("output/fft.png") 保存
运行:
python scripts/fft_homework.py
打印出的频率和 f0 相差不超过 1 Hz,就算写对了。用文件管理器打开 output/fft.png,下面那张图应该有一个突出的尖峰。图上的文字用英文,默认字体显示不了中文。这周统一用 savefig 存图,WSL 上 plt.show() 可能不弹窗口。
做一个小实验
把 fs 改成 f0 的 1.6 倍(取整数),再跑一次,看看峰跑到了哪里。把结果和你认为的原因写进 README.md,然后把 fs 改回 1000,再跑一遍。
答案不用很专业,写出你自己的理解就好。组会上会一起讲这个现象,它叫混叠。
提交 Pull Request
git add scripts output README.md
git commit -m "feat: add fft homework"
git push -u origin fft-homework
- 打开 GitHub 上你的仓库,页面顶部会出现 Compare & pull request 按钮,点它。没出现的话,点 Pull requests > New pull request,选择
fft-homework分支。 - 确认方向是
fft-homework合并到main。 - 标题写“第一周 FFT 作业”,描述里写一句你找到的频率,点 Create pull request。
- 把这个 PR 的链接发到飞书群,先不要点 Merge。
如果你还没用过 Python,先花半小时看菜鸟教程的基础语法和循环部分。作业只用到赋值和函数调用,不需要先学完 Python。
自查
参考教程:菜鸟教程:Python3 · 菜鸟教程:虚拟环境 · 菜鸟教程:NumPy · 菜鸟教程:Matplotlib 多图 · CSDN:NumPy 傅里叶变换函数 · NumPy 官方入门 · CSDN:GitHub Pull Request 流程详解(它讲的是 Fork 别人仓库的情况,我们在自己仓库里提,跳过 Fork 和克隆两步)
卡住了怎么办
卡住 30 分钟还没解决,就发到飞书群,带上你的系统、运行的命令和完整报错。这不算丢人,早说早解决。
| 你看到的 | 原因 | 怎么办 |
|---|---|---|
wsl --install 提示虚拟化未开启 |
BIOS 里关了虚拟化 | 重启进 BIOS,打开 Intel VT-x 或 AMD-V |
No such file or directory |
当前目录不对,或文件名拼错 | 用 pwd 和 ls 确认,回到 ~/senseguard-week1 |
python: command not found |
没激活虚拟环境 | 运行 source .venv/bin/activate,或者用 python3 |
externally-managed-environment |
在虚拟环境外运行了 pip install |
同上,激活后再装 |
No module named 'numpy' |
新窗口没激活虚拟环境 | 同上 |
Connection refused(连 localhost) |
本机 SSH 服务没启动 | 按差异表启动后重试 |
Permission denied (publickey) |
GitHub 上没加对公钥 | 重新复制 .pub 的内容,在 GitHub 添加 |
| 连 GitHub 超时 | 22 端口不通 | 用下面的配置改走 443 端口 |
| 打开了看不懂的编辑器界面 | Git 在等你写提交说明 | 在 nano 里按 Ctrl+X 退出 |
改走 443 端口:运行 nano ~/.ssh/config,写入下面内容后保存,再测试一次。
Host github.com
Hostname ssh.github.com
Port 443
User git
GitHub 还是连不上,就换成 Gitee,流程相同,并在群里说一声。
Yocto、ROS 2、驱动开发、深度学习、串口实时绘图这些,这周都不用碰,等后面的方向任务用到时再学。
四个组的产出会直接进入立项书迭代、结题报告和产品定义。周末召开见面会,每组汇报。
一、通用要求(每组必读)
- 每条信息必须标注来源链接;【官方数据】【媒体报道】【机构预测】等标签分开标注,不得混用。
- 不许直接贴大模型回答——AI 只能用于列框架,事实必须点开原文核实。
- 文件命名:【主题_提交日期】,如“竞品调研_1113”。
- 同时需要提交至飞书群文件“调研产出”。
- 截止时间:调研汇报会:11月11日(下周三)。
二、竞品调研组(2人)
调研对象:Aqara FP2、Vayyar Care、Nobi、天与“松椿果”、Neteera 130H(每人先过全部5家,再各自深挖2—3家);另在电商平台搜索“毫米波 跌倒 检测”,销量前10的同类产品一并过一遍。
每家查清以下 9 项:
- 感知方式与安装方式(毫米波/光学/穿戴;吸顶/壁挂/摆放);
- 覆盖能力(单台覆盖面积、能否隔墙、一套住房需要几台);
- 功能清单(存在检测/跌倒/呼吸心率/睡眠/联动);
- 隐私策略(有无摄像头、数据存于何处、能否本地运行);
- 定价(设备价+订阅价,哪些功能锁在订阅内);
- 付费模式(买断/租赁/订阅)与销售渠道;
- 用户真实评价:好评3条+差评3条,重点扒“误报、漏报、老人不接受”;
- 适用场景(家庭/机构)与目标人群;
- 一句话对比:我们的产品相对它,赢在哪、输在哪。
产出: ①竞品对比总表(Excel,一行一家×9列);②每家一页拆解卡;③“三学三避”总结(3个值得学的设计、3个要避开的坑)。
信息渠道: 产品官网(英文站信息更全)、电商详情页与评论区、Reddit/亚马逊评论、B站与YouTube评测。
三、政策市场调研组(1人)
A. 政策线
摘录《国办发〔2024〕1号:关于发展银发经济增进老年人福祉的意见》中与智慧养老、居家养老、科技适老相关的条目;梳理工信部、民政部近两年智慧健康养老试点与产品推广目录;查询北京市适老化改造与补贴政策。
B. 数据线(每条核实到原始出处)
60岁以上人口数与占比(国家统计局最新公报);空巢/独居老年人规模(民政部口径,官方数据与媒体报道分开标注);老年人跌倒发生率(疾控中心或学术文献)。
C. 市场线
智慧养老/智能家居市场规模预测(找2—3家不同机构口径,区分“预测”与“实际”);60GHz消费级毫米波模组价格行情(淘宝/立创商城查询)。
产出: 一页“需求与市场证据卡”——每条证据=原文摘录+出处链接+发布日期,标注三类标签。
四、用户调研组(2人)
核心问题:谁用、谁买、谁接警、愿意花多少钱——家庭与机构场景有何差异。
A. 访谈(重点)
设计子女视角5问、老人视角5问、机构/护理员视角5问(初稿组内互审后发群里定稿);每人完成1—2户试访(条件:家有60岁以上老人且有独处时段)。
访谈记录模板:年龄段/场景(不记真实姓名)→ 现在如何解决看护问题 → 对“无摄像雷达”的第一反应 → 愿意支付多少(月费或一次性)→ 出事后通知给谁、希望多久响应 → 最大的顾虑。
B. 补充调研
电商“老人看护摄像头/跌倒报警器”评价区:归纳用户抱怨与称赞各10条;查找1—2篇养老机构采购或运营的公开案例。
产出: ①访谈提纲v1;②访谈记录2—3份;③“需求优先级排序”一页纸(无感/隐私/误报/响应/价格五项按场景排序,写明依据)。
C. 后续调研计划
结合项目节点直接把后续调研的整体安排想好:访谈对象与数量目标(家庭≥5户、机构1—2家,对齐中期检查与结题要求)、渠道来源(社区/居家养老服务中心/亲戚邻里/线上问卷补充)、组内分工、逐周时间表与阶段目标。
五、技术调研组(2人)
A. 雷达技术线
60GHz 与 77—79GHz、24GHz 的对比(家用看护为何多选60GHz:体积/功耗/法规/点云能力);FMCW 测距测速原理(用大白话+图讲清楚);主流可购模组盘点:TI IWR系列、Seeed MR60系列、矽典微、海凌科等,各查输出形式(点云/仅存在)、接口协议、价格、官方文档质量。
B. 开源方案线
GitHub 搜索 mmWave radar fall detection、radar vision fusion,盘点星数较高的3—5个项目(雷达型号/算法/效果/许可协议/可复现性);跌倒检测两类算法思路(规则特征 vs 机器学习)各找1—2篇代表作;非接触呼吸心率监测的实现思路。
产出: ①模组选型对比表(Excel);②开源方案盘点表;③一篇“技术路线科普”,下次例会做5分钟分享(讲给全组听,不许照念论文)。
信息渠道: 模组官方 Wiki 与 datasheet、GitHub、立创商城、知网/Google Scholar、B站技术区。