Linux下Node.js安装与环境变量配置:从PATH原理到cnpm全局安装

前两天刚在群里帮一个朋友排查问题,他下载了 Node.js 压缩包,解压后心里想着装好了,结果在终端里敲node -v,系统只回了一句command not found。这种场景我见过太多次:教程里写着“安装 Node.js 并配置环境变量”,几行命令带过去,但很多人卡在 PATH 上完全摸不着头脑。这篇文章就围绕“Linux 中安装 Node.js 并配置环境变量,最后全局安装 cnpm”这条完整链路展开,从选版本、选目录、改环境变量到装 cnpm 逐个讲透。无论你是刚摆脱 Windows 依赖的 Linux 新手,还是在服务器上反复折腾环境的老手,照着下面的思路走,基本不会再被环境变量坑到。

1. 安装方式选型:为什么我更推荐用二进制包

1.1 系统自带的包管理器版本通常不够用

很多 Linux 新手第一反应是用系统自带的包管理器安装,比如 Debian/Ubuntu 上用apt install nodejs,CentOS 上用yum install nodejs。这样做确实方便,但你敲完命令以后可以再看一眼版本号,大概率会发现版本远低于官方当前建议的 LTS 版本。为什么?因为软件源里的包版本更新节奏很慢,发行版为了稳定,往往只收录已经经过充分验证的旧版本。

举个例子,我几年前在一台 Ubuntu 上执行apt install nodejs,装完以后node -v看到的版本连两位数都不到,而当时官方 LTS 已经到了 v18 系列。更麻烦的是,有些新版本的 npm 包依赖fs/promises、结构化克隆这类较新的运行时能力,老版本跑起来直接报错,一查原因全是版本太旧。如果只是写点脚本、跑跑简单的工具,旧就旧点,但你要做前端工程、跑 CI、部署服务,版本落后带来的坑会一个接一个。

可能有人会问:那我从第三方的软件源装行不行?例如有些用户会去添加额外的仓库。可行,但等于给系统引入了一层第三方的源管理,依赖关系不一定干净,还有后续升级路径不透明的问题。对于生产环境,我很少这么干。

1.2 二进制包、nvm、源码编译到底怎么选

在 Linux 上装 Node.js,主要就三条路:

  • 官方二进制包:从官网下载编译好的 tar 包,解压后配置 PATH 就能直接用。这是我在生产环境里最常用的一招,因为版本完全是可控的,你想用 LTS 的 v20、v22、还是稍新的版本,自己选,下载完解压即用,不需要系统上的编译工具链,也不需要额外管理一个包仓库。
  • nvm:Node Version Manager,用来在同一台机器里管理多个 Node 版本。它特别适合你在本机开发时要不断切换版本的情况。但要注意,nvm 有个隐患:它是靠往 shell profile 里写脚本、在每次打开终端时加载来实现切换的。如果你的 Node 服务是交给 systemd 这种不经过交互式 shell 的进程管理器跑的,nvm 里的路径未必会被加载到,服务起来以后经常出现找不到 node 的情况。所以我的习惯是:个人开发机用 nvm,服务器上用二进制包。
  • 源码编译:下载源代码,自己./configure && make && make install。不是不能用,但整个过程耗时比较长,还要先装一堆 gcc、make、python 之类的基础构建工具。除非你用的是特殊 CPU 架构,或者确实需要自定义编译参数,否则纯粹属于自虐。

综合下来,大多数人的需求都能被官方二进制包覆盖。下面整篇文章默认用的就是这条路,后面的命令我都按这个方案来写。

2. 下载与解压:安装目录的规划思路

2.1 版本怎么挑:LTS 还是 Current

你打开 Node.js 官网的下载页,会看到两个大分类:LTS 和 Current。简单解释一下:

  • LTS(Long Term Support):长期支持版本,偶数版本号,官方承诺在较长时间内持续提供修复。服务器、生产环境、长期项目优先选它。
  • Current(当前版本):奇数版本号,新功能最先出现在这里,但迭代快,稳定性不如 LTS,适合尝鲜。你要是拿 Current 跑到线上,过几个月可能就要被迫更新大版本,不值得。

至于 npm 的问题,不用单独操心。官方二进制包里自带对应版本的 npm,装好 Node 以后 npm 也就一起可用了。有一点要提一下:在下载时看清楚架构,uname -m看一下你的 CPU 架构是 x86_64 还是 aarch64(ARM),对应下载linux-x64还是linux-arm64的包。我第一次帮别人配 ARM 服务器时装成了 x64 包,程序直接提示“无法执行二进制文件”,后来才反应过来架构搞错了。

2.2 建议放在哪个目录

解压之前,先决定 Node 装到哪。我建议统一放到一个独立目录,比如/usr/local/node或/opt/nodejs。为什么不直接解压到/usr/local/lib/nodejs?其实也行,关键是保持路径清晰,别今天丢一个目录、明天解压到另一个目录,最后自己都忘了 bin 文件在哪。

以/usr/local/node为例,下载和解压命令是:

# 先创建一个干净的下载目录 cd /root # 下载时把 v22.x.x 换成当时实际的 LTS 版本号 wget https://nodejs.org/dist/v22.x.x/node-v22.x.x-linux-x64.tar.xz mkdir -p /usr/local/node tar -xJf node-v22.x.x-linux-x64.tar.xz -C /usr/local/node --strip-components=1

这里有个小细节经常被忽略:--strip-components=1表示解压时剥离掉压缩包里的第一层目录。压缩包解开以后原本结构是node-v22.x.x/这个文件夹,加了这个参数后会把里面所有文件直接放到/usr/local/node下,不会多套一层目录。这样后续取路径非常舒服,你直接看/usr/local/node/bin/node就是 node 的完整路径。

...

验证一下解压是否成功,可以直接用全路径执行:

/usr/local/node/bin/node -v

如果这一步能正常输出版本号,说明二进制文件本身没有问题,接下来就差让 shell 找到它。

2.3 软链接方案和 PATH 方案怎么取舍

也有人会告诉你“不需要配 PATH,直接建软链接就行”:

ln -s /usr/local/node/bin/node /usr/bin/node ln -s /usr/local/node/bin/npm /usr/bin/npm

这种方案的优点是简单隐蔽,但它有个很大的缺点:将来升级 Node 时,要么重新做一遍软链接,要么软链接失效以后出现很诡异的问题。更麻烦的是,如果系统里原本通过包管理器装过 Node,/usr/bin下可能已经存在同名的 node,软链接会直接覆盖冲突,搞半天既升级不了旧包,又把系统默认命令的状态弄乱了。

所以我的态度很明确:手动安装的 Node,就用 PATH 方案。PATH 不碰系统原有的命令目录,只在系统查找命令时告诉它“我的 Node 在这里,你要找 node 就来这里找”,清爽且安全。下面就把 PATH 这件事说透。

3. 环境变量配置:把“为什么”一次性讲透

3.1 PATH 到底是一个什么东西

PATH 说穿了就是一个由冒号分隔的目录列表。你在终端输入node -v时,shell 并不会把整个磁盘翻一遍去找 node 这个文件,而是按照 PATH 里列出的目录从左到右一个个找,找到就直接执行,找不到就报command not found。

这个机制很像你在一个大型商场里找某家店:你并不会每层每个角落都逛一遍,而是先查商场导视牌,看看它在几层几区,然后直奔过去。PATH 就是 shell 的导视牌。如果导视牌上根本没写你装 Node 的那个楼层,shell 自然找不到。

刚才我们用全路径/usr/local/node/bin/node -v验证过,Node 明明能跑,但仅仅因为 PATH 里没有/usr/local/node/bin,它就不被识别。理解了这个原理,后面的配置就一点都不玄了。

3.2 三种配置位置怎么选:/etc/profile、/etc/profile.d、~/.bashrc

在 Linux 里配置环境变量,常见位置有这么几个:

  • /etc/profile:系统级配置,登录时加载。直接往里写也行,但把系统级的环境变量堆在一个文件里会越来越乱,不推荐。
  • /etc/profile.d/xxx.sh:/etc/profile 会按顺序加载这个目录下的所有.sh脚本。这是我最推荐的全系统配置位置,可读性高,以后不想用了直接删文件即可。
  • ~/.bashrc:当前用户级配置,每次打开交互式 shell 时加载。适合只给当前用户配置环境变量的场景,不污染系统设置。

需要区分一下登录 shell 和非登录 shell:通过 SSH 登录通常是登录 shell,会加载/etc/profile以及它引用的 profile.d 脚本;而在桌面终端里新开一个标签页,很多时候是交互式非登录 shell,加载的是~/.bashrc。所以如果你发现“登录时 node 能用,开个新终端又找不到了”,十有八九是只配了一边。

追求省心的话,我推荐改成全局配置文件 /etc/profile.d,然后把当前用户的 ~/.bashrc 也补上一行作为兜底,这样无论从哪种方式进 shell,node 都能被找到。

3.3 具体配置写法与生效步骤

创建一个专门给 Node 用的环境变量脚本:

cat > /etc/profile.d/nodejs.sh <<'EOF' export NODE_HOME=/usr/local/node export PATH=$NODE_HOME/bin:$PATH EOF

这段脚本做了两件事:定义NODE_HOME指向 Node 的安装目录;把$NODE_HOME/bin加到 PATH 的最前面。

注意我最开始就提醒过的细节:export关键字不能漏。只写PATH=...的话,PATH 只是当前 shell 的一个局部变量,不会传递给 shell 接下来要启动的子进程,而 node 命令实际上是被 shell 启动的子进程,继承不到这个变量就会继续找不到路径。说白了,export 相当于把变量“贴到公告栏上公示”,让所有后来启动的进程都能看到。

接下来让配置生效。很多人喜欢开个新终端,这当然可以;如果不想重新登录,直接执行:

source /etc/profile

source的作用是在当前 shell 里重新执行一遍脚本,让新增的变量立刻生效,不需要退出重进。然后检查一下 PATH:

echo $PATH

如果看到开头已经有/usr/local/node/bin,就说明配置成功了。再输入:

node -v npm -v

正常情况下,此时应该都能正常输出版本号。再用which node看路径,如果显示/usr/local/node/bin/node,那么恭喜,环境的第一个阶段彻底搞定。

4. 验证安装与全局安装 cnpm

4.1 安装成功后的第一轮验证清单

环境配置完,别急着装 cnpm,先做一轮系统性的确认。我整理了一个一条命令跑完的检查序列:

node -v npm -v which node which npm echo "NODE_HOME=$NODE_HOME"

这五句的输出对齐以后,应该能明确看出三件事:版本号正常、node/npm 脚本在 PATH 覆盖的目录里、NODE_HOME 变量非空。如果哪一步不对,再倒退到对应环节排查,不要继续往下走,否则后面连报错都分不清是环境问题还是 cnpm 本身的问题。

4.2 为什么需要 cnpm,和镜像源有什么关系

npm 默认使用的源是官方源。正常情况下没毛病,但某些网络环境下,官方源的下载速度真的很感人,一个包卡半天,超时、重试轮番上阵。我不夸张地说,有些同事第一次用 npm 装个项目依赖,装了一个多小时还没装完,最后发现是卡在网络拉取上。

cnpm 的定位是给 npm 换一个更快、更稳定的镜像源。它本质上还是一个 npm 客户端,但内置的 registry 地址指向了同步了官方仓库内容的镜像站,下载速度通常会有质的提升。镜像站的同步机制不一定要求用户手动干预,多数时候你改一个地址就能直接缓解问题。其实即便不用 cnpm,手动把 npm 的 registry 指过去也能达到类似效果。这里给两套思路:

# 方式一:直接安装 cnpm 命令行工具 npm install -g cnpm --registry=https://registry.npmmirror.com # 方式二:先把 npm 的默认源换掉,再正常安装 npm config set registry https://registry.npmmirror.com npm install -g cnpm

方式二的本质是把 npm 自身的源换掉,以后npm install也走镜像站,不装 cnpm 也能提速。而 cnpm 是另一套独立的命令,不过度依赖你改动 npm 的配置,适合想保持 npm 默认源、同时多一个快速通道的人来说。

4.3 全局安装 cnpm 并验证

安装命令按前面的方式一执行:

npm install -g cnpm --registry=https://registry.npmmirror.com

这里有一个经常出现的权限问题需要提前说明:Node 被解压到/usr/local/node以后,这个目录通常归属于 root。如果你的当前登录用户不是 root,执行全局安装时可能报EACCES: permission denied。解决办法要么用sudo npm install -g ...(前提是 sudo 能继承环境变量),要么干脆用 root 用户执行安装。我个人的建议是:如果是专用服务器、自己管理,直接以 root 执行最省心;如果是共享的开发机,更好的是把/usr/local/node的属主改成你的用户:sudo chown -R 用户名 /usr/local/node,这样以后全局安装再也不碰权限问题。

装完以后验证:

cnpm -v

正常会输出 cnpm 的版本号和对应的 npm 版本号。再确认一下它到底装到哪里了:

which cnpm

安装目录应该展示出/usr/local/node/bin/cnpm,这一步很关键,说明 cnpm 已经进入了 PATH,否则等下你敲cnpm install又要遇到 command not found。

4.4 cnpm 的日常用法和一点使用边界

cnpm 的常用命令和 npm 几乎一模一样,你需要掌握的就这么几个:

cnpm install # 安装 package.json 里的依赖 cnpm install <包名> # 安装某个包 cnpm update <包名> # 更新某个包 cnpm root # 查看全局包安装路径

个人使用习惯上,我会把 cnpm 当作“下载加速器”来用,而不是完全替代 npm。因为有些第三方 CLI 工具内部写死了调用 npm 命令,或者对 registry 做了自己的校验,你全局装了 cnpm 也不会影响那些工具;反过来,如果某些场景要求绝对走官方源,我还是会用回 npm。两种命令各司其职,不冲突。

5. 常见问题与排查速查

5.1 典型问题对照表

下面这展开是我实际从各种“求助帖+自己踩坑”里归纳的高频问题,直接列成速查表:

现象可能原因排查与解决
node -v 提示 command not foundPATH 未配置或未生效检查echo $PATH是否包含 node 所在路径;确认执行过source /etc/profile
source 以后工具能用,重开终端又失效只配置了 /etc/profile,没有配置 ~/.bashrc,或 profile.d 脚本未被加载确认脚本文件在 /etc/profile.d/ 下且以.sh结尾,并重新登录
全局安装提示 EACCES permission denied当前用户对 /usr/local/node 没有写权限用 root 安装,或sudo chown -R 当前用户 /usr/local/node
npm install 速度极慢、经常超时官方源在当前网络下连接质量差设置 npm registry 为镜像源,或直接用 cnpm 安装
自己下载了 arm64 包却报“无法执行二进制文件”下载了错误架构的包用uname -m确认架构,重新下载对应包
直接用软链接装了 node,升级后命令失效软链接指向旧路径,或目录被覆盖清理软链接,改用 PATH 方案管理
登录 shell 能看到 node,但 systemd 服务仍找不到systemd 服务环境默认不加载 /etc/profile 的环境变量在 service 文件的 Environment 配置里显式指定 PATH,如Environment=PATH=/usr/local/node/bin:/usr/bin:/bin

5.2 现场实录:一个容易被忽略的 profile.d 细节

有朋友照着我上面的方案配好/etc/profile.d/nodejs.sh,root 手动跑source /etc/profile明明一切正常,但只要重新登录就又失效,最后排查了一通发现是权限问题——profile.d 目录下的脚本虽然不需要可执行权限,但需要被 /etc/profile 成功读取到。如果你的脚本文件没有.sh后缀,或者文件权限过于严格,加载阶段可能被跳过,而手动 source 因为是由你自己直接执行,反而避开了加载规则的限制。

所以在写完脚本后,顺手给一条命令:

chmod +x /etc/profile.d/nodejs.sh

理论上只读也可以,但加一个可执行权限能减少很多兼容性上的小概率问题。别小看这一步,不少发行版的 profile 加载逻辑对不同配置文件的处理方式有细微差异。

5.3 现场实录:PATH 顺序引起的“幽灵 node”

另一个比较容易懵的场景是这样的:你明明把/usr/local/node/bin加到了 PATH 最前面,执行node -v时显示的版本却不是你自己装的版本。这种情况多半是你系统里原本还有一个 node,而且/usr/bin里的这个旧命令优先级更高,或者你的 PATH 拼接方式把新路径放在了变量末尾。

解决办法有两条:一是确保配置脚本里写的是PATH=$NODE_HOME/bin:$PATH,把新路径加在原有 PATH 前面,而不是PATH=$PATH:$NODE_HOME/bin。二是配置完以后用which -a node看看系统里所有能命中的 node 路径。如果真有多个 node,which node输出了/usr/bin/node,那就该检查你说的“新路径”是否确实排在了前面。

6. 版本升级、卸载和整体使用建议

6.1 以后想升级 Node 版本怎么做

用二进制包方案,升级其实很简单:下载新版本的 tar 包,解压后直接覆盖到同一目录/usr/local/node就行(建议先备份原目录里的全局包列表)。关键点是先把当前全局安装的包列出来,升级完再重新装回去,避免出现 npm 全局包和 node 版本不匹配的问题。常规做法:

npm list -g --depth=0 > /root/global-backup.txt # 下载新包并解压后 npm install -g $(cat /root/global-backup.txt | sed 's/├── //;s/└── //;s/@.*//')

这个命令有点粗糙,但思路没问题:先留底,再恢复。如果全局包不多,手动重新装可能更快更稳。

6.2 卸载 Node 的时候要做的几件事

如果是按 PATH 方案装的,卸载也更干净:删除/usr/local/node目录,再删掉/etc/profile.d/nodejs.sh,清理 ~/.bashrc 里加的兜底行,最后重新登录一遍。这样系统里就不会残留任何 node 相关命令路径。如果还做过软链接,记得把/usr/bin下那些你自己创建的 link 也删掉。

6.3 我的个人习惯性建议

最后说点我自己的使用习惯。如果是个人开发机,我其实更偏好 nvm,因为它切换版本确实方便,前端项目经常要在一个老项目一个新项目之间跳来跳去,nvm 一条命令切完不折腾。但到了服务器或者线上环境,我一律退回二进制包方案。理由在前面也提过:线上进程往往被 systemd、supervisor 这类非交互方式拉起,环境变量来源是系统级的配置文件,nvm 这种依赖用户 shell 加载的方式在线上环境里很容易翻车。与其等容器一重启才发现服务起来找不到 node,不如一开始就用最朴素、最可控的配置方案。

再分享一个小技巧:配置完环境变量以后,不要急着关终端,把上面那个验证清单跑完,然后用env | grep PATH再瞄一眼实际执行环境里的输出。有时候你在脚本里看着变量对,但真正进入子进程时被其他 shell 配置覆盖了也不一定。多花三十秒把输出和预期对齐,后面能省下的排查时间远不止这三十分钟。

相关新闻

轻量级可编程地图交互组件:lingbot-map设计与实践

轻量级可编程地图交互组件:lingbot-map设计与实践

1. 项目概述&#xff1a;一个轻量级、可嵌入的地理信息交互组件“lingbot-map”这个名字一出现&#xff0c;我就下意识在终端里敲了npm search lingbot-map和pypi search lingbot-map——结果是空的。再查 GitHub、GitLab 和国内主流开源平台&#xff0c;也没有匹配的公开仓库。…

2026/10/21 4:12:41 阅读更多 →
知识工作流自动化实践:用插件搭建输入到输出的完整闭环

知识工作流自动化实践:用插件搭建输入到输出的完整闭环

knowledge-work-plugins 这套东西&#xff0c;我断断续续折腾了小半年&#xff0c;从最初的几个零散脚本&#xff0c;到后来慢慢攒成一个像样的工具集&#xff0c;中间踩过的坑、推翻重来的设计&#xff0c;都挺值得拿出来聊聊的。很多做知识管理的人&#xff0c;工具换了一茬又…

2026/10/21 4:12:41 阅读更多 →
Kafka分区机制:高并发吞吐的基石与生产实践

Kafka分区机制:高并发吞吐的基石与生产实践

刚开始接触Kafka时&#xff0c;我对分区&#xff08;Partition&#xff09;的认知只停留在“一个Topic可以拆成多个分区”这个层面&#xff0c;直到某次压测让我吃了大亏&#xff1a;三个Broker的集群&#xff0c;Topic只建了三个分区&#xff0c;消费者组里却启动了九个消费线…

2026/10/21 4:12:41 阅读更多 →

最新新闻

论文数据炼金术:AI辅助从提取到清洗的全流程实战

论文数据炼金术:AI辅助从提取到清洗的全流程实战

写在前面&#xff1a;这篇东西不是软件广告&#xff0c;也不打算把某个工具吹成神话。它就来自我自己平时处理论文数据的一堆真实经历&#xff1a;从抓取文献里的零散数据&#xff0c;到清洗成一张能看能算的表&#xff0c;再到最后写出方法学和图表描述&#xff0c;中间踩过的…

2026/10/21 4:51:55 阅读更多 →
DeepSeek国产算力适配实战:从选型到部署的避坑指南

DeepSeek国产算力适配实战:从选型到部署的避坑指南

最近帮几家企业客户把 DeepSeek 系列模型搬到国产算力平台上&#xff0c;前前后后折腾了小一个月。这篇文章不是讲 DeepSeek 有多强——这些大家在官网和论文里都看得到。我想把国产算力适配过程中踩过的坑、筛选过的方案、做过的取舍判断写出来&#xff0c;给正在规划政务或企…

2026/10/21 4:51:55 阅读更多 →
视觉SLAM入门实战:ORB-SLAM2从零复现与避坑指南

视觉SLAM入门实战:ORB-SLAM2从零复现与避坑指南

1. 为什么值得花时间啃下这个视觉SLAM demo如果你正在做机器人、自动驾驶或者AR相关的开发&#xff0c;大概率绕不开一个词&#xff1a;视觉SLAM。而ORB-SLAM2&#xff0c;就是这个领域里被引用最多、工程完成度最高的开源方案之一。它用单目、双目或RGB-D相机就能实时算出相机…

2026/10/21 4:51:55 阅读更多 →
SSA-LSTM组合优化:单输入单输出时间序列预测实用指南

SSA-LSTM组合优化:单输入单输出时间序列预测实用指南

先明确一点&#xff1a;很多人一看到“优化算法 深度学习”就习惯性绕着走&#xff0c;觉得这是学术论文里才有的东西。实际上&#xff0c;把麻雀搜索算法&#xff08;SSA&#xff09;和LSTM网络结合这个思路&#xff0c;工程落地价值非常大&#xff0c;尤其是做单输入单输出&…

2026/10/21 4:51:55 阅读更多 →
战地风云2042 dll加载失败排查与修复全流程

战地风云2042 dll加载失败排查与修复全流程

打开战地风云2042时突然弹出一条dll加载失败的提示&#xff0c;很多人第一反应是赶紧搜这个dll的名字&#xff0c;找个网站把它下载下来&#xff0c;塞进系统目录里。这个动作我劝你千万别做&#xff0c;十次里有八次会把自己电脑弄出更大的问题。作为玩PC游戏快十年的老玩家&a…

2026/10/21 4:51:55 阅读更多 →
基于React18与TypeScript构建完整业务后台管理面板的实战复盘

基于React18与TypeScript构建完整业务后台管理面板的实战复盘

最近我在梳理手头的一个前端练习项目时&#xff0c;发现一个很有意思的代号挂在文件夹里——rea。它是我用 React 生态完整搭起来的一个业务管理面板 Demo&#xff0c;用来模拟日常后台系统中最高频的那些场景&#xff1a;列表展示、筛选搜索、数据详情、状态流转、主题切换等等…

2026/10/21 4:50:55 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事&#xff1a;AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里&#xff0c;按宣传口径&#xff0c;本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”&#xff0c;而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起&#xff1a;用户到底在追求什么“封号重开”这四个字&#xff0c;放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流&#xff0c;背后是大量的时间和精力成本。正常情况下&#xff0c;没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”&#xff0c;而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时&#xff0c;就意识到&#xff1a;单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →