基于Cygwin的Windows开发环境
WARNING
此开发环境由社区提供支持和维护(详见社区支持的开发环境)。 它可能与当前版本的PX4兼容,也可能不兼容。
该工具链以前曾被推荐使用,但由于打包问题,在PX4 v1.12及更高版本中无法使用。 建议优先使用基于Windows WSL2的开发环境。
有关核心开发团队支持的开发环境和工具的信息,请参阅工具链安装。
该工具链非常轻便,而且容易安装和使用。 根据本文的指示构建的开发环境可以用于编译:
- 基于NuttX的硬件(如Pixhawk等)
- jMAVSim仿真环境
安装说明
从以下位置下载最新版本的即用型MSI安装程序:Github发布页面 或 亚马逊S3(快速下载)。
运行安装程序,选择你想要的安装位置,然后让它完成安装:
在安装结束时勾选 “克隆PX4代码仓库,使用jMAVSim构建并运行仿真” 选项(这可以简化入门流程)。
INFO
如果你错过了这一步,你将需要手动克隆PX4-Autopilot代码仓库。
:::
WARNING
在撰写本文时,安装程序缺少一些依赖项(并且目前无法重新构建安装程序以添加这些依赖项 - 请参阅PX4-windows-toolchain#31)。
要自行添加这些依赖项:
进入到工具链的安装目录(默认C:\PX4)
运行 run-console.bat(双击)以启动类似Linux的Cygwin bash控制台
在控制台中输入以下命令:
shpip3 install --user kconfiglib jsonschema future
入门指南
该工具链使用一个经过特殊配置的控制台窗口(通过运行 run-console.bat 脚本启动),在这个窗口中你可以调用常规的PX4构建命令:
进入到工具链的安装目录(默认C:\PX4)
运行 run-console.bat(双击)以启动类似Linux的Cygwin bash控制台(你必须使用这个控制台来构建PX4)。
在控制台中克隆PX4 PX4-Autopilot代码仓库:
INFO
如果你在安装程序中勾选了 “克隆PX4代码仓库,使用jMAVSim构建并运行仿真” 选项,则可以跳过此步骤。 克隆操作只需要进行一次!
:::
# 将PX4-Autopilot代码仓库克隆到主文件夹,并并行加载子模块
git clone --recursive -j8 https://github.com/PX4/PX4-Autopilot.git
现在你可以使用该控制台和PX4-Autopilot代码仓库来构建PX4了。
例如,要运行JMAVSim:
sh# 进入PX4-Autopilot代码仓库 cd Firmware # 使用jMAVSim构建并运行软件在环(SITL)仿真以测试设置 make px4_sitl jmavsim
然后控制台将显示:
Gazebo依赖项
一旦你完成了命令行工具链的设置:
- 安装QGroundControl每日构建版本
- 继续阅读构建说明。
故障处理
Windows与Git的特殊情况
防病毒软件和其他后台文件监控工具可能会显著减慢工具链的安装速度以及PX4的构建速度。
你可能需要在构建期间暂时关闭它们(风险自担)。
Windows与Git的特殊情况
Windows的CR+LF与Unix的LF行结尾对比
我们建议你在使用此工具链处理的每个代码仓库中强制使用Unix风格的LF行结尾(并且使用一个在保存更改时能保留这种行结尾的编辑器,例如Eclipse或VS Code)。 即使本地检出的源文件的行结尾是CR+LF,编译也能正常工作,但在Cygwin环境中有些情况(例如执行Shell脚本)需要Unix风格的行结尾(否则你会得到类似 $'\r': Command not found.
这样的错误)。 幸运的是,当你在代码仓库的根目录中执行以下两条命令时,git可以为你处理这个问题:
git config core.autocrlf false
git config core.eol lf
如果你在多个代码仓库中使用此工具链,你也可以为你的机器全局设置这两个配置:
git config --global ...
不建议这样做,因为这可能会影响你在Windows机器上对其他(不相关)git的使用。
Unix执行权限
在Unix系统中,每个文件的权限中有一个标志,用于告诉操作系统该文件是否允许被执行。 在Cygwin环境下的_git_支持并关注这个标志位(尽管Windows NTFS文件系统并不使用它)。 这常常会导致_git_发现权限方面的 “误报” 差异。 产生的差异可能如下所示:
diff --git ...
old mode 100644
new mode 100755
我们建议在Windows上全局禁用权限检查以避免这个问题:
git config --global core.fileMode false # 为机器全局禁用执行位检查
对于由于本地配置而出现此问题的现有代码仓库,还需执行以下操作:
# 移除该代码仓库的本地选项以应用全局选项
git config --unset core.filemode
# 移除所有子模块的本地选项
git submodule foreach --recursive git config --unset core.filemode