news 2026/10/5 1:32:25

NAO V6 开发环境配置指南:从Python SDK到Choregraphe模拟器实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
NAO V6 开发环境配置指南:从Python SDK到Choregraphe模拟器实战

NAO V6 的开发环境配置这件事,我前前后后折腾了不止一次,从最初拿到机器人不知道从哪下手,到后来帮实验室和几个朋友团队搭建了一套能稳定复用的流程,中间踩过的坑比想象中多。今天这篇就把 NAO V6 开发环境配置的全过程拆开来讲,从工具选型、Python 环境、网络连接到第一个可运行的脚本,该注意的细节全部写在下面。文末我还会把整理好的文件清单和目录结构列出来,照着做基本不会出大问题。

适合看这篇的读者有三类:刚拿到 NAO V6 机器人、正在配环境的实验室新人;准备基于 NAO 做二次开发但被 SDK 版本搞晕的开发者;以及手头没有实体机器人、想先用模拟器写逻辑的爱好者。不管你是 Windows、macOS 还是 Linux,核心思路完全一致,我会在关键节点标注三个系统的差异。

1. 项目概述:NAO V6 开发环境配置的完整思路

1.1 为什么要专门梳理一遍开发环境

NAO V6 不像普通嵌入式设备那样插上 USB 就能开干。它本身运行着一套基于 Linux 的 NAOqi 操作系统,你写的代码要么通过 Choregraphe 图形化编排后上传到机器人,要么通过 Python 或 C++ SDK 在电脑侧连接机器人、调用 NAOqi 提供的各种 API 去控制动作、语音、视觉、传感器。这两条路的前提都一样:电脑端必须有一套和机器人端 NAOqi 版本匹配的开发环境。

我遇到过不少朋友卡在第一步,症状很典型:SDK 下载下来了,Python 装好了,import naoqi 却直接报错;或者 Choregraphe 装好了,却一直连不上机器人。这些问题十有八九不是机器人坏了,而是电脑端环境没配对。版本不匹配、环境变量没配、网络不在同一网段、防火墙拦了端口,任何一个环节出问题都会让你怀疑人生。所以把开发环境当成一个独立的小项目来对待,按步骤走,是最省时间的做法。

1.2 NAO V6 的软件栈构成

NAO V6 这一代机器人的软件栈其实可以拆成三层来看:

  • 机器人端系统:NAOqi OS,基于 Linux 内核,负责底层驱动、传感器采集、行为管理和网络服务,对外暴露 NAOqi API。V6 出厂搭载的 NAOqi 版本一般是 2.9.x,这个版本号直接决定了你电脑端该用哪个 SDK。
  • 开发端工具:Choregraphe 可视化编程软件,支持拖拽式行为框图设计,也可以直接内嵌 Python 脚本块;同时支持连接实体机器人或启动内置模拟器。
  • 开发端 SDK:NAOqi Python SDK 和 C++ SDK,本质上是把 NAOqi API 封装成了本地可调用的库。Python SDK 在 2.8.x 时代仍要求 Python 2.7,2.9.x 开始才逐步支持 Python 3,这是个非常重要的坑。

明白了这三层结构,配置环境就不再是东一榔头西一棒子了。你只需要把电脑端工具链配好,再保证电脑和机器人之间的网络通路畅通,剩下就是调用 API 写逻辑的问题了。

2. 开发环境总体设计与工具选型

2.1 选型思路:模拟器优先,实机验证

我的建议是,环境搭建阶段就把模拟器和实机两条链路都打通,但日常开发默认用模拟器。原因很简单:机器人反复开关机、充电、连接调试,对硬件寿命和开发效率都不友好。Choregraphe 自带的模拟器能模拟大部分行为模块,包括动作、语音、传感器的基础反馈,足够你验证逻辑。

实机验证则放在两个节点:一是环境刚配好时跑一个最简单的“自检脚本”,确认电脑能通过 NAOqi API 控制真实机器人;二是完成一个完整行为模块后,上实机看动作效果和参数调优。这条“模拟器开发、实机验收”的路径,能帮你省掉大量无效等待。

2.2 工具版本匹配,是环境配置的命门

NAO V6 配套的工具版本,我直接把我实测可用的组合列出来:

组件推荐版本说明
NAOqi OS(机器人端)2.9.x(以机器人内置为准)可通过系统设置查看
Choregraphe2.8.6 或更高支持 V6,自带模拟器
Python SDK2.8.x / 2.9.x 对应版本注意区分 Python 2.7 与 3.x 版本包
Python 解释器2.7.18 或 3.x(按 SDK 决定)老 SDK 只认 2.7
操作系统Windows 10/11、macOS、Ubuntu三者均支持

这里要特别强调版本匹配:Choregraphe 的版本号、Python SDK 的版本号和机器人端 NAOqi 的版本号,三者之间不能差太远。比如机器人端是 NAOqi 2.9.5,你却用 2.1.x 的 Python SDK,连上之后大部分 API 的返回结构都对不上,排查起来非常痛苦。我在文末整理的文件包里,会把对应版本的下载入口和校验方式一并标注清楚。

2.3 为什么不建议一上来就选 C++ SDK

NAO 的 C++ SDK 性能更好,但它带来的额外复杂度是:需要配置交叉编译工具链、需要在电脑上装对应架构的依赖库、还要处理编译产物和机器人端的兼容性。对于绝大多数实验室项目和课程作业来说,Python SDK 已经完全够用,NAOqi 的 Python API 覆盖了动作、语音、视觉、对话、导航等几乎所有能力,而且写起来直观、改起来快。

如果你是做运动控制底层算法或者需要极致性能的实时控制,那再考虑 C++。我认识的做 NAO 步态算法的朋友确实用 C++,但那是少数场景。对刚入门的人来说,先跑通 Python 链路,再决定要不要引入 C++,是投入产出比最高的路线。

3. 分步配置实操:从零开始搭建可用环境

3.1 第一步:下载并整理所需文件

配置环境最容易乱的就是文件管理。我建议在工作目录下建一个清晰的目录结构,所有工具和脚本都归档好,后面排错时能省一半时间:

nao-dev/ ├── installers/ # Choregraphe 安装包、Python 安装包 ├── sdks/ # Python SDK、C++ SDK(解压后) ├── config/ # 环境变量脚本、网络配置脚本 ├── examples/ # 测试脚本、示例工程 └── docs/ # 官方文档、版本对照表、README

下载时注意:Choregraphe 和 SDK 都要从官方开发者站点下载,认准版本号。有些第三方网站会提供整合包,但我不建议用,因为你不知道里面是什么版本、有没有被改动过。下载完成后,先核对文件 MD5 或 SHA256 值,再开始安装,这一步虽然啰嗦,但能避免很多诡异问题。

3.2 第二步:安装 Python 并配置虚拟环境

如果你的 SDK 是 2.8.x 版本,那对应的 Python SDK 包是基于 Python 2.7 编译的,这时候必须装 Python 2.7.18。如果拿到的是 2.9.x 版本且标注支持 Python 3,那建议装 Python 3.6 到 3.8 之间的版本,太新的版本会因为某些依赖库不兼容而出问题。

装完 Python 后,我强烈建议用虚拟环境隔离 NAO 开发环境,避免和系统 Python 冲突。具体操作:

# 创建虚拟环境 python -m venv naoenv # 激活环境(Windows) naoenv\Scripts\activate # 激活环境(macOS/Linux) source naoenv/bin/activate

然后把 Python SDK 解压后的路径加入环境变量。以 Windows 为例,需要把 SDK 中的lib目录和根目录都加入PYTHONPATH,否则import naoqi会找不到模块:

# Windows 临时设置(建议写入系统环境变量) set PYTHONPATH=D:\nao-dev\sdks\pynaoqi-python2.7-2.9.x\lib;D:\nao-dev\sdks\pynaoqi-python2.7-2.9.x # macOS/Linux 临时设置 export PYTHONPATH=/path/to/naoqi-sdk/lib:/path/to/naoqi-sdk

提示:把 PYTHONPATH 写入系统环境变量时,记得同时保留系统原有的 PYTHONPATH,用分号(Windows)或冒号(macOS/Linux)拼接,不要覆盖。踩过这个坑的人绝对不止我一个。

验证 SDK 是否可用,打开 Python 交互终端执行:

import naoqi from naoqi import ALProxy print(naoqi.__file__)

如果能看到模块路径打印出来,说明 SDK 导入成功,Python 环境这一关就过了。

3.3 第三步:安装 Choregraphe 并配置连接

Choregraphe 是图形化开发的核心工具。安装过程不再赘述,重点是安装完成后的连接配置。

启动 Choregraphe 后,先设置机器人 IP。有两种方式:

  • 在连接面板中直接填入机器人的 IP 地址;
  • 通过“编辑 -> 偏好设置”里配置默认连接参数,这样每次启动都会自动尝试连接。

实体机器人默认开放 9559 端口给 NAOqi 服务,Choregraphe 和 Python SDK 都是通过这个端口通信的。机器人在同一局域网内,建议使用静态 IP,避免 DHCP 分配变化导致经常改配置。

连接之前,先做两步确认:

  1. 用 ping 命令测试电脑到机器人的网络连通性:ping 192.168.1.100(改成你的机器人 IP),看丢包率和延迟。
  2. 检查防火墙是否放行 9559 端口。Windows 系统尤其容易在这里出问题,需要在防火墙高级设置里添加入站规则,把 Choregraphe 或 Python 的访问权限打开。

如果暂时没有实体机器人,可以点 Choregraphe 工具栏的模拟器按钮,它会启动一个虚拟机器人,界面里能看到 NAO 的 3D 模型和传感器反馈面板。模拟器模式下的开发流程和实机几乎一致,只是部分硬件相关参数需要后续在实机上重新校准。

3.4 第四步:编写并运行第一个测试脚本

环境配好之后,先用一个最简单的脚本验证全链路是否通畅。下面的脚本做了两件事:连接 NAO 的语音合成服务,让机器人说一句话;再读取它的电量,证明传感器数据通路正常:

import time from naoqi import ALProxy ROBOT_IP = "192.168.1.100" ROBOT_PORT = 9559 # 语音合成 tts = ALProxy("ALTextToSpeech", ROBOT_IP, ROBOT_PORT) tts.say("Hello, NAO. This is my first test.") # 读取电量 battery = ALProxy("ALBattery", ROBOT_IP, ROBOT_PORT) level = battery.getBatteryCharge() print("Battery level: {}%".format(level)) time.sleep(1)

如果机器人成功开口说话,并且打印出电量数值,那恭喜,你的 NAO V6 开发环境已经全部打通了。之后你可以在这个基础上继续叠加动作、视觉、对话等模块。

再进一步,试试让它做一个简单的动作,比如点头:

motion = ALProxy("ALMotion", ROBOT_IP, ROBOT_PORT) motion.wakeUp() # 唤醒机器人(电机上电) motion.angleInterpolation( ["HeadPitch"], [0.3, -0.1], [1.0, 2.0], True )

注意:wakeUp()会让机器人从休眠状态进入待命状态,电机全部上电。如果是第一次操作,建议把机器人放在地面或者防倾倒的支架上,防止它做出意料之外的动作。rest()则会让它回到休眠状态,测试完毕记得调用。

4. 常见问题与排查技巧实录

4.1 问题一:import naoqi 报 ModuleNotFoundError

这个错误绝大多数情况是 PYTHONPATH 没配对,或者 Python 版本和 SDK 不匹配。先确认你用的 Python 版本和 SDK 要求的版本是否一致,再看sys.path里有没有 SDK 路径:

import sys for p in sys.path: print(p)

如果 SDK 路径没出现,回到 3.2 节重新配置环境变量。如果是版本不匹配,去官方站点重新下载对应版本。还有一种情况:虚拟环境里装过别的包,导致 naoqi 模块被某个同名目录遮蔽,检查一下虚拟环境的 site-packages 里有没有残留的 naoqi 目录。

4.2 问题二:Choregraphe 一直连不上机器人

先从下往上排查:

  1. 机器人和电脑是否在同一网段?用ipconfig(Windows)或ifconfig(macOS/Linux)查看电脑 IP,和机器人 IP 对比前三位是否一致。
  2. 机器人是否处于可连接状态?NAO V6 在休眠状态下网络服务可能仍在运行,但如果之前被设定的“飞行模式”之类的策略限制,会导致端口不可达。
  3. 9559 端口是否被防火墙拦截?临时关闭防火墙测试一下,如果能连上就说明是规则问题,再去细化放行规则。
  4. 是否用了错误的 IP?机器人 IP 可以在 Choregraphe 连接面板左下角扫描发现,或者在机器人 Web 管理页面查看,建议以这两个来源为准,不要凭记忆输入。

4.3 问题三:模拟器能跑,实机动作异常

这是最典型的环境差异问题。模拟器里 NAO 的运动学和物理反馈是理想模型,实机则有电机扭矩、重心偏移、地面摩擦力等因素影响。我的经验是:写动作时先把幅度、速度参数调小一半,在实机上观察实际表现,再逐步逼近目标参数。特别是angleInterpolation这类直接控制关节角度的 API,参数差一点,实机上的视觉效果就完全不同。

另外,实机运行时记得调用ALMotion的setStiffnesses把相关关节的刚度打开,否则电机会处于松垮状态,动作执行会失败或者很怪异。模拟器不会暴露这个问题,实机必现。

4.4 问题四:机器人连接时好时坏

如果你的手机、电脑、机器人共用一个 WiFi,而且路由器是家用级的,很容易出现并发连接数超限导致 NAO 掉线。解决办法是给机器人单独拉一根网线连路由器 LAN 口,同时给电脑也走有线或 5G 频段。还有一个容易被忽略的点:NAO V6 的 WiFi 天线功率一般,和路由器的距离、遮挡物都会影响稳定性,别让机器人隔着一堵承重墙和路由器通信。

5. 从环境配置到第一个完整行为模块

5.1 用行为框图搭一个“自我介绍”流程

环境跑通之后,我建议用 Choregraphe 搭一个完整的行为流程,来巩固对开发流程的理解。比如一个“自我介绍”行为:

  • 开始事件触发后,先用ALTextToSpeech说“大家好,我是 NAO”;
  • 同时让ALMotion执行一个抬手的动作;
  • 停顿 2 秒;
  • 播放一段默认动画或再做一个鞠躬动作;
  • 最后回到闲置状态。

在 Choregraphe 里,这个流程就是几个盒子(Box)用连线串起来的事。把语音盒子和动作盒子并联在同一个输入端口下,它们就会并行执行。串联则用顺序连线,保证一个执行完再执行下一个。这个过程能帮你理解 Choregraphe 的时序模型,也方便后续把行为导出成 Python 代码来细看。

5.2 配置过程中的几条心得

最后分享几个我实际使用中的体会,都是文档里不会写的:

第一,环境配置不是一次性的。Choregraphe 和 SDK 升级、机器人 NAOqi 系统重置、电脑系统大版本更新,都可能导致之前配好的环境突然失效。建议把 3.1 节的文件包和配置脚本纳入版本管理,团队内部共享时,新手按照 README 走一遍就能恢复环境,不用每次重新摸索。

第二,所有连接类的配置,优先写成配置文件而不是硬编码在脚本里。我习惯在项目里放一个config.yaml或robot_config.py,统一管理 IP、端口、用户名密码,需要切换机器人的时候只改一处,不会因为 IP 散落在各处而出错。

第三,善用 NAOqi 的日志和调试接口。ALLogger模块可以设置各模块的日志级别,当你觉得某个行为表现不正常时,把日志级别调到 DEBUG,能看到完整的调用链和参数,排查效率比对着代码猜高得多。

配置 NAO V6 开发环境这件事,本质上就是三步:版本配对、网络打通、写通一个测试脚本。把这三步按顺序走完,后面的开发就是自由的。我整理的文件包里包含了安装包索引、配置脚本、示例代码和版本对照表,覆盖了 Windows 和 macOS 两种环境,你需要的其实就是按照这篇文章的顺序,一步步把环境跑起来。动手吧,配好之后你会发现,NAO 的世界比想象中有意思得多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/5 1:31:39

工业嵌入式MRAM选型与驱动:MR25H40CDF与ATmega644A实战

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

作者头像 李华
网站建设 2026/10/5 1:30:29

用HTML+CSS自动生成可编辑PPTX:从模板到批量的工程化实践

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

作者头像 李华
网站建设 2026/10/5 1:30:09

工业级MRAM存储方案:MR25H40CDF与PIC18F4525的SPI驱动实战

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

作者头像 李华
网站建设 2026/10/5 1:29:08

Windows内置打印驱动程序详解:从体系结构到排障实战

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

作者头像 李华
网站建设 2026/10/5 1:28:58

QSTEM+DrProbe实战:从Fe3O4模型到第一张STEM模拟图

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

作者头像 李华
网站建设 2026/10/5 1:28:33

CAN总线开发实战:位时序、采样点与故障排查全解析

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

作者头像 李华