如何从源码编译SITL

2023-05-16

从源码编译SITL(Windows)

知识共享许可协议本作品采用知识共享署名-相同方式共享 3.0 未本地化版本许可协议进行许可。

SITL简介和适用情况

SITL = Software in the loop,是著名无人机开源社区ArduPilot打造的开源软件模拟器。用户可以在不依托任何硬件的情况下,对固定翼(Plane)、旋翼机(Copter)和车辆(Rover)进行模拟。除了进行路径规划测试、参数设置测试、控制代码调试以外,SITL还可模拟风力、地形等外部环境,安装模拟光流、激光雷达等传感器,与其他设备通过串口、网络通信等等。

在通常情况下,如果你成功安装了python和pip,不论你身处何种平台,都可以使用pip install dronekit-sitl命令安装SITL。

但是,有时我们会遇到不得不从源码生成SITL的情况,例如需要使用更新版本、或者是还在测试阶段的固件(本文写成时,SITL支持到ArduCopter3.3,而我需要使用3.4版本以上的固件)。如果你有类似的需要,本文将向你介绍如何从源代码编译SITL。

概述

测试环境

  • Windows10 14393-64bit
  • Python 2.7-32bit

步骤

下载安装MAVProxy

MAVProxy是一款基于命令行、全功能、轻量级的地面站。它很适合开发者使用。当然,你也可以使用其他地面站如Mission Planner,但是,我还是建议你安装MAVProxy,因为它真的很好用。

  1. 下载最新Windows版本的MAVProxy(链接在此)
  2. 运行.exe,建议采用默认设置安装,以避免不必要的麻烦

下载安装Cygwin

Cygwin提供了在Windows平台上运行的类UNIX环境。在一开始,SITL是在Linux平台开发的,但有了Cygwin,就能够在Windows上编译运行了。

  1. 下载、运行Cygwin 32-bit installer(64位版本没有测试过)
  2. 以默认设置安装,直到看到“Select Packages”对话框。左上角的“Search”框可以进行搜索。找到Package后,点击左边的“Skip”,当Skip变为版本号后,即为选中。
  3. 选中以下Package
名称类别 名称 介绍(名称和介绍与窗口中最右边内容对应)
autoconfDevel autoconf: Wrapper scripts for autoconf commands
automakeDevel automake: Wrapper scripts for automake and aclocal
ccacheDevel ccache: A C compiler cache for improving recompilation
g++Devel gcc-g++ GNU Compiler Collection (C++)
gitDevel git: Distributed version control system
libtoolDevel libtool: Generic library support script
makeDevel make: The GNU version of the ‘make’ utility
gawkInterpreters gawk: GNU awk, a pattern scanning and processing language
libexpatLibs libexpat-devel: Expat XML parser library (development files)
libxml2-develLibs libxml2-devel: Gnome XML library (development)
libxslt-develLibs libxslt-devel: XML template library (development files)
python-develPython python-devel: Python2 language interpreter (python3 does not work yet)
procpsSystem procps-ng: System and process monitoring utilities (required for pkill)

选择完毕后一路OK,等待Package下载完成即可。

在Cygwin中设置PATH

  1. 打开Cygwin Termianl窗口。
    该步骤会在Cygwin的home目录下初始化文件。如果你使用了默认设置,那么目录应该为 C:\cygwin\home\你的用户名\

  2. 前往C:\cygwin\home\你的用户名\ ,用文本编辑器打开.bashrc

  3. .bashrc末尾加上
    export PATH=$PATH:$HOME/ardupilot/Tools/autotest

PATH会在你下一次启动Cygwin的时候自动加载。

安装Python包

已经在Windows版本的Python上安装了这些包?不要跳过此步骤!Cygwin相当于是一个虚拟环境,需要对这些包重新安装。
详见python的官方文档说明

打开Cygwin Terminal,运行

python -m ensurepip --user
python -m pip install --user future
python -m pip install --user lxml
python -m pip install --user uavcan

下载编译Ardupilot源码

在Cygwin Terminal中,进行以下操作

git clone git://github.com/ArduPilot/ardupilot.git
cd ardupilot
git submodule update --init --recursive

第三步的意义在于,ArduPilot项目内使用submodule方式包含了许多其他的开源项目。进行该操作可以下载所需的其他项目的源代码。该操作需要时间较长,请耐心等待。

一般而言,到这一步时,你正处在ArduPilot仓库的master分支。此时,版本通常是不稳定的测试版本;如果需要使用稳定的发布版本,需要切换分支。ArduPilot使用分支管理不同发布版本,在官方的GitHub页面可以查看分支。此处以Copter-3.5为例。

git fetch origin Copter-3.5: Copter-3.5
git checkout Copter-3.5

在终端(Terminal)中,切换到所需的目录,执行make操作。(此处以多旋翼ArduCopter为例。其他机型与此同理。但是,固定翼需要多做一步步骤。见http://ardupilot.org/dev/docs/sitl-native-on-windows.html#jsbsim-plane-only)

cd ~/ardupilot/ArduCopter
make sitl -j4

上述命令对4核的CPU最为适用。-j4中的4可以替换为你的电脑的CPU核心数,以获得最高性能。编译所需时间较长,需要耐心等待。

(可选)FlightGear 3D View

FlightGear 3D View能够提供可视化的3D模拟。见 http://ardupilot.org/dev/docs/sitl-native-on-windows.html#flightgear-3d-view-optional

此处略。

运行SITL和MAVProxy

此处使用MAVProxy作为地面站,对飞行器进行实时监控。同时,MAVProxy可以作为数据中介,将数据转发到其他地面站如Mission Planner,以及与用户编写的程序如Dronekit进行通信。

可以以如下方式运行SITL和MAVProxy(跟之前一样,-j后面的数字最好是你计算机CPU的核心数):

cd ~/ardupilot/ArduCopter
sim_vehicle.py -j4 --map --console

以上做法会自动启动MAVProxy。如果你只想启动SITL,使用命令

./ArduCopter.elf --home -35,149,584,270 --model quad

启动SITL后,可以通过tcp:127.0.0.1:5760连接到SITL。

错误参考

  1. 因为不想占用太多C盘空间,我在进行git clone git://github.com/ArduPilot/ardupilot.git的时候,cd到了D盘的一个位置。但是,这会导致某些配置的错误(具体哪些配置有误未知),使得无法编译。

  2. 因为已经在Windows的Python 2.7中事先pip install了相关package,因此我在安装时,跳过了上文中的安装Python包的步骤。事实证明,这是必要的,因此我在文中作了特别提示。

参考文档

ArduPilot官方文档,ArduPilot文档中step by step的指南,实际上做的很好。本文是基于该指南翻译并撰写的。

Ensurepip,Ensurepip操作说明

版本信息

1.0 20170521 initial commit

1.1 20170603 add license

1.2 20170702 add notes on switching between versions

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从源码编译SITL 的相关文章

  • 正点原子MiniFly V1.2学习笔记六---stabilizerTask

    第9个任务 xff0c 优先级5 xTaskCreate stabilizerTask 34 STABILIZER 34 450 NULL 5 NULL 一 任务函数 使用绝对延时 xff0c 周期执行任务 二 传感器数据是怎么传到这个任务
  • 正点原子MiniFly V1.2学习笔记七---configParamTask

    第6个任务 xff0c 优先级1 xff0c 最低优先级 配置参数任务 xTaskCreate configParamTask 34 CONFIG TASK 34 150 NULL 1 NULL 一 全局参数configParam 1 参数
  • C++码农要读的经典

    刚大四 xff0c 还在忙着找工作 xff0c 读过的书不是很多 xff0c 还有一些好书在读 xff0c 还有一些书将来必读 C语言程序设计 谭浩强版本 这个版本一致被人说误导子弟 xff0c 当然还有很多人推崇 我觉得这本书不是什么好书
  • 解读gazebo_ros_control gazebo_ros

    本篇的目的是想解读gazebo ros control 以及 gazebo ros 因为gazebo本身是独立于ros的 通过教程Intermediate Control plugin 以及教程 Category Write a plugi
  • vtaskstartscheduler(); //开启任务调度语句不执行

    项目场景 xff1a FreeRTOS实时嵌入式操作系统开发 基于stm32 第一章移植代码 问题描述 xff1a 任务调度器执行到vtaskstartscheduler 开启任务调度语句不执行 span class token keywo
  • python3中定义类变量,并使用类函数修改类变量的值

    定义类变量的方式有两种 1 在 init 中定义self elements 其中self elements是类变量名 a是传入Difference类的参数名 xff0c 这里的 init 作用是定义了类变量名 xff0c 将外部参数a传给类
  • printf函数的内涵以及造成的严重内存问题

    问题的引出 xff1a 在某型号的核心网络交换机设备中 xff0c 为调试方便 xff0c 实现了一个把内存内容从终端打印的功能 xff0c 也就是dump memory xff0c 屏幕的左边显示十六进制 xff0c 右边以ASCII形式
  • 关于docker那点事儿——Dockerfile编写

    Dockerfile编写 前言一 Dockerfile创建镜像二 Dockerfile常用指令三 示例1 Dockerfile构建nginx镜像2 Dockerfile构建微服务 四 CMD与ENTRYPOINT比较 前言 Dockerfi
  • SylixOS信号量(二进制信号量、 计数型信号量、 互斥信号量(简称互斥量)、 读写信号量)

    目录 二进制信号量 互斥信号量 计数器信号量 读写信号量 SylixOS 信号量 多个线程在读写某个共享数据 xff08 全局变量等 xff09 时必须通过某种方法实现共享数据的互斥访问或者同步访问 xff08 例如线程 B 等待线程 A
  • 什么是优先级反转及解决方法

    什么是优先级反转 优先级反转 xff0c 是指在使用信号量时 xff0c 可能会出现的这样一种不合理的现象 xff0c 即 xff1a 高优先级任务被低优先级任务阻塞 xff0c 导致高优先级任务迟迟得不到调度 但其他中等优先级的任务却能抢
  • STM32CubeMX在F103上的ADC注入通道配置异常问题

    前言 最近业余时间在搞无刷电机FOC的控制 xff0c 其中有一部分是关于流过电机三相绕组电流采集的 xff0c 需要用到STM32内置的ADC xff0c 核心是需要使用注入通道以确保ADC数据采集的实时性 xff0c 但是我在STM32
  • C++ static静态成员变量用法

    C 43 43 static静态成员变量用法 参考网址 xff1a 1 http c biancheng net cpp biancheng view 209 html 2 https www runoob com cplusplus cp
  • 解决AndroidStudio 控制台编译输出中文乱码,黑方块+问号之类的

    100 有效 解决AndroidStudio 控制台编译输出中文乱码 xff08 黑色方框问号 xff09 xff0c 亲测解决 xff01 xff08 转载 xff09 Pdx 666的博客 CSDN博客 背景在AndroidStudio
  • sphinx安装及简单使用

    sphinx安装及简单使用 如果你要编写技术文档 可以用 reStructuredText 或 Markdown 格式编辑文件 xff0c 然后使用 Sphinx 工具转换成 html PDF ePub等格式 xff0c 或者托管到 git
  • cmake之CMakelist.txt的使用

    文章目录 常用命令1 指定 cmake 的最小版本2 打印信息2 1 打印普通信息2 2 打印告警2 3 打印错误 3 项目名称4 设置变量5 查找指定的库文件6 设置包含的目录7 设置链接库搜索目录8 指定编译包含的源文件8 1 明确指定
  • python爬虫 记录一次爬取淘宝的过程

    淘宝可以说是一个检验爬虫技术是否过关的最强关卡了 xff0c 下面来打破它吧 淘宝的所有操作差不多都是在登录的状态下进行的 xff0c 这时候想要对淘宝进行请求获取信息就必须在登录的状态下进行了 方式一 xff1a xff08 seleni
  • 问题tensorflow.python.framework.errors_impl.ResourceExhaustedError:OOM

    tensorflow python framework errors impl ResourceExhaustedError 2 root error s found 0 Resource exhausted OOM when alloca
  • ROS安装超详细保姆级教程

    1 版本选择 ROS与Ubuntu版本是有着对应关系的 xff0c 其中Ubuntu1604 43 ROS Kinetic xff1b Ubuntu1804 43 ROS Melodic xff1b Ubuntu2004 43 ROS No
  • 2021年9月22号,实战烧写树莓派sd卡的系统

    1 下载格式化u盘的软件 xff0c 软件地址 xff0c 阿里云盘地址 xff1a https www aliyundrive com s ux2re9FFxd2 2 将有sd卡的读写盘插入电脑接口 3 打开软件 xff0c 点击格式化即
  • 工作流与BPM的区别

    一 工作流是什么 xff1f 根据国际工作流管理联盟 Workflow Management Coalition xff0c WFMC 的定义 xff0c 工作流就是 一类能够完全或者部分自动执行的经营过程 xff0c 它根据一系列过程规则

随机推荐

  • 被遗忘的软件产品形态

    从2010年以后 xff0c 很多公司开发的软件产品 xff0c 很少有客户端了 xff0c web2 0之后 xff0c 主流的业务系统基本上都是基于Web去构建业务系统 这几年见到的业务应用系统都是基于Web的构建的 而在To C市场
  • C端产品工作流程

    文章目录 发现需求需求分析用户需求定义产品需求定义构建产品方案收集需求确定产品功能 产品需求分类产品目标分解产品版本规划需求评审产品功能设计需求评审确定执行计划测试验收发布上线 发现需求 通过自身的体验发现需求 通过间接的体验发现需求 1
  • STM32cubeMX将STM32F767+LAN8720+LwIP+FreeRTOS的以太网实现

    通过STM32cubeMX将STM32F767 43 LAN8720 43 LwIP 43 FreeRTOS的以太网实现 本文使用了正点原子的阿波罗开发板 xff0c 接下来我将粗略的对STM32F767通过STM32cubeMX进行以太网
  • 数据产品经理有哪些

    文章目录 数据分析产品经理数据挖掘产品经理策略产品经理数据工程类产品 首先希望大家能重新认识经理这份工作 xff1a 大数据产品经理并不一定要数学能力强或者编程能力强 xff0c 只要你有用数据思考的方式 xff0c 有相信数据的信念 xf
  • 产品经理必备的20个常用工具

    原型设计工具 xff1a Axure 墨刀 思维导图工具 xff1a Xmind MindManager 流程图绘制工具 xff1a Viso ProcessOn 数据处理与分析工具 xff1a Excel Tableau 问卷调研工具 x
  • Hibernate根据实体类自动生成表的方法

    文章目录 第一种方法第二种方法参考 第一种方法 这种方法需要配置 hibernate cfg xml 的属性 hibernate hbm2ddl auto xff0c 该属性值的具体说明如下 xff1a 值说明update实体对应的表如果不
  • 微信账户如何解除对第三方应用的授权

    参考文章 xff1a https baijiahao baidu com s id 61 1754354599985802723 amp wfr 61 spider amp for 61 pc amp searchword 61 E5 B0
  • 进程间通信

    现在的嵌入式系统往往有并发的特征 xff0c 就像多任务操作系统的多进程一样 xff0c 其内核会提供几种机制处理任务间通信 xff0c 本文对四种常见通信模式进行了分析 xff0c 并对其各自的优劣作较细致的比较 目前 xff0c 越来越
  • HTTP请求返回状态码的不同含义

    用户通过 HTTP 访问一台正在运行Internet信息服务的服务器上的内容时 xff0c 会返回一个表示该请求的状态的数字代码 状态代码可以指明具体请求是否已成功 xff0c 还可以揭示请求失败的确切原因 1 信息提示 这些状态代码表示临
  • 异常检测及其分布集成

    异常检测算法种类繁多 xff0c 包括聚类 xff0c 树 xff0c 统计分布 xff0c 机器学习 xff0c 深度学习等多种形式 xff0c 下面对一些常见问题进行了自己的总结 xff1a 1 如何选型 xff1f 主要看算法原理和数
  • 关于FreeRTOS 任务运行中卡死在临界区vPortExitCritical()

    FreeRTOS创建任务正常运行 xff0c 偶尔出现任务卡死状态 xff0c 通过在线调试 xff0c 程序卡在vPortExitCritical 函数中 xff0c 在IAR Call Stack中观察到各任务都可能回调该接口 span
  • Ardupilot添加自定义日志(AP_LOG)

    1 在libraries AP Logger LogStructure h中添加自定义的结构体 span class token keyword struct span span class token class name PACKED
  • Ardupilot 编译Bootloader

    1 清理之前的编译中间文件 xff0c 一定要清理一下 xff0c 能避免很多奇怪的问题 span class token punctuation span span class token operator span waf distcl
  • 基于STM32CUBE的LWIP+FREERTOS+Socket构成的TCP服务器

    本实验基于STM32F767制作 一 实验目的 本实验主要目的是通过Socket网络编程方法完成通过以太网控制两个LED的亮灭的 xff0c 同理可用到继电器上控制其它高电压设备 二 实验步骤 1 首先先生成一个带有LWIP和FreeRTO
  • PX4 ---- Mixer

    文章目录 Mixer 混合控制 作用输入输出装载混控文件MAVROS代码解析总结示例MAINAUX Mixer 混合控制 作用 经过位置控制和姿态控制后 xff0c 控制量通过 actuator controls发布 xff0c 其中 co
  • PX4 ---- Indoor Flight

    文章目录 室内飞行ROS amp PX4Pose Data 飞机配置MAVROS 基于工训赛 VIO 飞行总结 室内飞行 ROS amp PX4 Pose Data 飞机配置 VIO 参考此处 xff0c 采用 T265 配置 相机与飞控机
  • PX4 -- EKF2

    文章目录 EKF2参数高度估计Range Finder滤波 单变量更新单变量更新对多变量的影响 EKF2 参数 EKF2 中有一类 GATE 参数 当测量值在 VAR GATE 范围内才会更新值 高度估计 四种高度控制方法 xff1a 气压
  • opencv4以上版本报错:CV_LOAD_IMAGE_COLOR和CV_BGR2HSV和CV_CAP_PROP_FRAME_WIDTH

    报错关于 xff1a CV LOAD IMAGE COLOR xff0c 加入头文件 span class token preprocessor property include span span class token string 3
  • 【原神】各角色Pixiv涩图统计(一). 最多的是谁? R18涩图谁最多?

    统计的结果请见第一篇文章 代码已经开源至GitHub 本文下面所有的爬虫项目都有详细的配套教程以及源码 xff0c 都已经打包好上传到百度云了 xff0c 链接在文章结尾处 xff01 扫码此处领取大家自行获取即可 讲真 这个应该是我做过的
  • 如何从源码编译SITL

    从源码编译SITL Windows 本作品采用知识共享署名 相同方式共享 3 0 未本地化版本许可协议进行许可 SITL简介和适用情况 SITL 61 Software in the loop xff0c 是著名无人机开源社区ArduPil