Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

四旋翼无人机制作简易教程

发表于 2019-03-25 | 更新于 2019-07-08

四轴飞行器又称四旋翼、四转子,是一种多轴飞行器,有四个旋翼来悬停、维持姿态及平飞。和固定翼飞机不同,它通过旋翼提供的推力使飞机升空。它的四个旋翼大小相同,分布位置接近对称。对于简单的设计来说,仅仅通过调整不同旋翼之间的相对速度来调节不同位置的推力,并克服每个旋翼之间的反扭力矩,就可以控制飞机维持姿态、或完成各种机动飞行。下面简单介绍四旋翼无人机的制作过程。

无人机硬件装配

组装一件无人机所需配件及其连接示意图如图1所示。

四旋翼无人机机硬件连接图

图1 四旋翼无人机机硬件连接图

所需配件主要有:

  • 机身骨架
  • 一对正浆和一对反浆。注意浆的固定方向与电机旋转方向要一致。
  • 遥控器及接收机
  • 无刷电机及电调
  • ppm sum receiver
  • pixhawk 1,内含安全开关和蜂鸣器
  • gps
  • 锂电池
  • 云台和摄像头(可选)
  • telemetry无线收发装置与图传(可选)

无人机软件调试

遥控器与接收机之间对码

遥控器和接收机之间是配对的,使用之前必须对码,可根据遥控器的使用说明书进行操作。其连接示意图如图2所示。

航模遥控器与接收机对码示意图

图2 航模遥控器与接收机对码示意图

电子调速器的油门行程和进角设置

电子调速器主要控制马达的转速,其调试连接示意图如图3所示。

电子调速器连接示意图

图3 电子调速器连接示意图

如图3所示将电子调速器连接后,即开始设置油门行程和电子调速器进角。设置油门行程即让电子调速器知道遥控器的油门输入范围。而电子调速器进角有高中低之分,类似于汽车档位。低进角速度慢但扭力大,高进角速度快但扭力小,一般设置电子调速器中进角即可满足大多数要求。具体设置说明参照电子调速器使用说明书。

pixhawk飞控平台的设置

Pixhawk是PX4飞行堆栈的标准微控制器平台。在pixhawk硬件平台上可运行PX4和ArduPilot两种不同的自动驾驶仪软件套件。如果在pixhawk平台上安装px4自驾仪软件,则使用QGroundControl地面站软件进行设置;如果在pixhawk平台上安装ArduPilot自驾仪软件,则使用MissionPlanner地面站软件进行设置。

Pixhawk和GPS按照方向捆绑好后,按照地面站软件的指示进行设置。设置好之后,长按Pixhawk的安全开关,再将遥控器油门拉动底并推向最右方,即可解锁Pixhawk。

参考链接

  1. 四轴飞行器,by wikipedia.
  2. PX4 autopilot, by px4 homepage.
  3. Crazepony开源四轴飞行器,by crazepony.
  4. ArduPilot,by wikipedia.
  5. PX4 autopilot,by wikipedia.
  6. 从建模分析到控制器设计,四轴飞行器是怎样炼成的?,by 机器人.

FlightGear多人服务器的本地安装配置

发表于 2019-03-20

FGMS或FlightGear多人游戏服务器是FlightGear的独立网络服务器,并根据GPL许可。 它允许通过FGFS内的网络与其他飞行员一起飞行。

FGMS服务器列表类型主要有:

  • 中继服务器 - 网络中的其他服务器。 每个都必须有完整的列表(减去自己)以获得适当的网络功能。
  • 交叉馈送服务器 - 服务器从本地用户和其他服务器接收的所有内容都将转发到交叉馈送服务器。 用于在同一主机上运行多个连接的fgms实例,例如用于提供跟踪和未跟踪服务,而不会产生额外的外部流量。
  • 跟踪服务器 - 服务器每10秒向跟踪器发送一个每个本地用户的摘要更新。
  • HUB服务器 - 通常服务器不会将从服务器接收的数据包发送到其他中继。 HUB服务器将数据从服务器发送到它知道的所有中继。

特别呼号:

  • “obsXXXX”(用您喜欢的任何字符替换X)允许连接的FlightGear客户端查看全球所有其他MP飞行员(位置数据和聊天消息),但对他们和MPmap保持不可见。
  • “mpdummy”阻止在FGTracker上跟踪飞行员。 不推荐 - 如果多个用户使用此呼号,服务器将忽略一些用户。 改为连接到未跟踪的服务器。

安装配置FGMS服务器

下载FGMS服务器源码

1
git clone git://git.code.sf.net/p/fgms/src fgms-src

安装配置FGMS服务器源码

1
2
3
4
5
6
7
8
9
cd fgms-src
mkdir build
cd build
cmake ..
make
cd ..
cp contrib/etc/fgms_production.skel.conf build/fgms.cfg
cd build
./fgms

安装配置FGMS跟踪服务器源码

下载FGMS跟踪服务器源码

1
git clone git://git.code.sf.net/p/fgms/fgtracker fgms-fgtracker

FlightGear联网飞行配置

联机前,请选择合适的服务器名(通常是mpserver0?.flightgear.org)和端口号(通常是5000),然后按照以下方式启动FlightGear。

使用向导程序

在向导程序上专门有一个联网飞行选项,只要选中选项,填入服务器名和端口号以及你的昵称就可以了,你的昵称最长可以使7个字符。同时必须确定AI models选项选中,否则无法看到别的联网飞机。

使用命令行方式

基本命令如下:

1
2
3
4
--multiplay=out,10,<server>,<portnumber>
--multiplay=in,10,<client>,<portnumber>
--callsign=<anything>
--enable-ai-models

备注:

  1. 为端口号,比如5000.
  2. 为服务器名,比如mpserver01.flightgear.org.
  3. 是你的计算机名,或者是你的联网的IP地址,比如本地IP地址192.168.0.1
  4. 是你自己的昵称, 最多7个字符比如NFGFS.
    当程序开始运行后,你可以在服务器地图上看到自己,如果看不到,检查一下程序是否有报错信息,按照下面将要介绍的内容检查错误。

参考链接

  1. Howto:Multiplayer,by flightgear home.
  2. FlightGear Multiplayer Server,by flightgear home.

Linux平台编译安装测试JSBSim

发表于 2019-03-20 | 更新于 2019-11-16

JSBSim是一个开源跨平台的飞行动力学模型(FDM)软件库,用于模拟航空航天飞行器的飞行动力学。 该库已被纳入飞行模拟软件包FlightGear和OpenEaagles。 它也可以从一个小型独立程序调用,以创建批处理模拟工具。 JSBSim是用C ++编写的,使用XML配置文件。下面介绍如何在Linux平台编译按照测试JSBSim。

基础知识

cmake

代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。

Make是最常用的构建工具,诞生于1977年,主要用于C语言的项目。但是实际上 ,任何只要某个文件有变化,就要重新构建的项目,都可以用Make构建。

Make工具有很多,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。

CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。一些使用 CMake 作为项目架构系统的知名开源项目有 VTK、ITK、KDE、OpenCV、OSG 等。

在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:

  1. 编写 CMake 配置文件 CMakeLists.txt 。
  2. 执行命令 cmake PATH 或者 ccmake PATH 生成 Makefile。其中, PATH 是 CMakeLists.txt 所在的目录。
  3. 使用 make 命令进行编译。

编译JSBSim

下载JSBSim源代码

1
git clone https://github.com/JSBSim-Team/jsbsim.git

编译JSBSim

1
2
3
4
5
6
7
8
9
10
11
12
# 跳转到jsbsim源码目录
cd jsbsim
# 创建build文件夹用于编译jsbsim
mkdir build
cd build
# 生成Makefile文件
cmake ..
# 编译
make
# 编译完成后跳转到jsbsim所在目录测试
cd src
./jsbsim

测试jsbsim

1
2
3
4
# 跳转到jsbsim源码目录
cd jsbsim
# 测试jsbsim
./build/src/JSBSim scripts/c1723.xml

参考链接

  1. JSBSim, by wikipedia.
  2. Make 命令教程,by 阮一峰
  3. CMake 入门实战,by hahack.
  4. JSBSim使用教程, by 32768.
  5. cmake 添加头文件目录,链接动态、静态库,by 王彬彬.
  6. cmake:install制作简单的安装脚本,by 10km.

FlightGear飞行模拟器中创建新飞机的方法

发表于 2019-03-17 | 更新于 2021-02-08

FlightGear中创建新飞机粗略地分成四步:创建飞机的3D模型,创建飞机的飞行动力学模型,创建飞机操作动画,实现飞机各子系统。具体而言,又可分成两个主要的开发领域:飞行动力学模型开发和飞机3D模型开发。

飞机3D模型开发

主要包括飞机外形、驾驶舱的3D模型开发,为飞行动力学模型设计的动画,声音等。

加载飞机模型

通过OpenSceneGraph,FlightGear支持许多不同的3D文件格式,包括VRML1,AC3D,DXF等等。 但是,.ac是大多数FG模型中使用的标准。

主FlightGear属性树中的属性/ sim / model / path控制将加载的模型; 它需要一个字符串值,从$ FG ROOT给出模型的相对路径。

加载新模型的最简单方法是使用–prop:命令行选项在启动时设置属性; 例如,要使用已安装在$ FG_ROOT / Models / my-cessna.ac中的3D飞机模型,您可以像这样调用FlightGear(在类Unix系统下):

1
fgfs --prop:/sim/model/path=Models/my-cessna.ac

(注意:通常模型使用的所有纹理必须出现在同一目录中。如果my-cessna.ac使用纹理cessna01.rgb和cessna02.rgb,你还应该在$ FG_ROOT / Models /中安装这些纹理。

如果要将3D模型永久设置为飞机的默认值而不是在命令行上指定,则需要编辑飞机设置文件。 在$ FG_ROOT / Aircraft /目录中有一系列以-set.xml结尾的文件,例如c172-set.xml,dc3-yasim-set.xml和beech99-uiuc-set.xml。 当您使用–aircraft选项启动FlightGear时,它会从其中一个文件中读取属性; 例如

1
fgfs --aircraft=dc3-yasim

将$ FG_ROOT / Aircraft / dc3-yasim-set.xml中的属性加载到主FlightGear属性树中。 这些文件与$ FG_ROOT / preferences.xml和FlightGear保存文件具有相同的XML属性列表格式。 对于任何单机类型,可能有许多具有不同启动条件,声音,面板,3D模型等的XML文件,因此您最好复制现有的,重命名它,然后更改模型内部路径元素内的值SIM卡:

1
2
3
4
5
6
7
8
<PropertyList>
<sim>
<model>
<path>Models/my-cessna.ac</path>
<texture-path>./Textures</texture-path>
</model>
</sim>
</PropertyList>

飞机动力学模型开发

FlightGear主要使用JSBSim 和 YASim两个开源的飞行动力学模型,也有极少数使用UIUC飞行动力学模型。

YASim

FDM是控制模拟器内飞行物理的数学模型。 物理3D飞机模型与飞行动力学无关 - 实质上它只是一张要看的图片。 这是FDM决定模型如何飞行。

为何选择YASim? YASim使用飞机的几何形状来生成基本飞行特征。 虽然这表明了一种“现实的”或开箱即用的方法,但在获得接近现实主义的结果之前,这只是一种粗略的近似,需要进行大量的调整。 如果您的飞机有稳定的飞行数据,例如风洞数据,或者您希望最终生成超逼真的模拟,那么JSBSim可能是更好的方法。 如果你缺乏这样的数据但是知道飞机的几何形状并且能够获得与真实飞行员相同的飞行特性和限制,那么YASim可以提供足以满足大多数模拟需求的解决方案。

JSBSim

JSBSim是一个开源飞行动力学模型(FDM)软件库,用于模拟航空航天飞行器的飞行动力学。 该库已被纳入飞行模拟软件包FlightGear和OpenEaagles。 它也可以从一个小型独立程序调用,以创建批处理模拟工具。 JSBSim自1996年以来一直在开发和使用,并且已经构建在当今使用的所有最流行的平台上,包括运行Linux,Macintosh和Microsoft Windows操作系统的平台。 JSBSim是用C ++编写的,使用XML配置文件。

飞机模型开发规范说明

规则和指导

  • FlightGear中的所有图像的大小应为2的幂(例如64 * 64,128 * 256或16 * 1024)。大多数计算机无法处理大于4096像素的纹理。从FlightGear 1.9开始,图像不再需要以.rgb格式保存。现在.png是FlightGear开发人员中最常用的.png。

  • 请注意,我们在代码中使用空格,一些开发人员使用相应的选项卡,以使我们的代码易于(呃)阅读。每一行开始一个新标签,我们按空格键一次,这样你就可以得到一种楼梯。只要您在所有文件中始终如一地使用它,使用何种方法并不重要。但是JSBSim FDM使用的XML文件必须使用空格而不是制表符。

  • 在大多数操作系统上,文件名和目录区分大小写。 Windows不区分大小写,因此当您在Windows计算机上进行开发时,您不会发现任何问题。在其他操作系统上,“波音”和“波音”之间存在差异。由于FlightGear用于多个平台,请确保您的代码正确使用大写字母!

目录结构说明

创建一个新的飞机模型,应该在$FG_ROOT/Aircraft/路径下创建文件夹,以飞机名称命名。例如在$FG_ROOT/Aircraft/路径下创建一个Su30的文件夹,开始构建Su30飞机模型。在飞机根目录下,其目录结构如下:

  • -set.xml file

描述飞机依赖关系的最重要文件是aircraft-set.xml文件。

  • .xml file (FDM)

该文件包含飞机的整个(或部分)飞行动力学模型。有YASim、JSBSim、UIUC三种不同的飞行动力学模型,他们都有自己的优缺点。

由于数据有限,YASim通常被认为是最好的方式。 当您访问真实的风洞数据和/或需要更多灵活性时,JSBSim可能是更好的选择。

  • Engines/ directory

仅适用于JSBSim飞机。 在此目录中,存储引擎和推进器/螺旋桨文件。

  • Models/ directory

该目录包含所有与模型相关的文件; 例如纹理,模型和动画文件(.xml)。 在-set.xml文件中,我们将路径设置为一个.xml文件。 该文件应链接(间接)到飞机所需的每个其他模型文件(包括可能的3D驾驶舱)。 整个飞机可以建模为一个文件,但大多数开发人员更喜欢拆分。 例如,驾驶舱可以由几个文件构建,每个文件只存在一个仪器或面板。 这样很容易(重新)移动飞机的某些部件。 您可以像这样设置模型文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<PropertyList>

<path>Aircraft.ac</path>

<model>
<name>Cockpit</name>
<path>Aircraft/.../Models/cockpit.xml</path>
<offsets>
<x-m> -5.25</x-m>
<y-m> 0.00</y-m>
<z-m> 1.30</z-m>
</offsets>
</model>

<animation>
<type>rotate</type>
<object-name>AileronLeft</object-name>
<property>/controls/flight/aileron</property>
<factor>-65</factor>
<center>
<x-m> 2.09</x-m>
<y-m>-5.50</y-m>
<z-m>-1.50</z-m>
</center>
<axis>
<x>1</x>
<y>0</y>
<z>0</z>
</axis>
</animation>

</PropertyList>

cockpit.xml文件可以包含相似结构,所有工具都是单独的模型。 模型的数量不受限制,动画的数量也不限。

  • Nasal/ directory

所有针对飞机的Nasal脚本都放在此目录中,但某些系统或仪器特定的Nasal脚本除外。 如果某个Nasal脚本对所有飞机都有用(例如天气或多人相关),它可以放在$ FG_ROOT / Nasal目录中。 可以在$ FG_ROOT / Aircraft / Generic目录中找到可在多架飞机上使用的Nasal脚本(例如空中加油)。

  • Sounds/ directory

声音对于增加你实际进入模拟的感觉非常重要。 在此目录中,存储了特定于飞行器的所有声音文件。 可以在多个飞机上使用的声音(例如,点击开关或雷声)可在$ FG_ROOT / Sounds目录中找到。

  • Tutorials/ directory

FlightGears教程系统是学习如何启动飞机引擎等的有用功能。 它允许您创建一个分步教程,指导用户完成某个过程。 它甚至可以指示应按下哪些开关!

参考链接

  1. Howto:Make an aircraft,by flightgear home.
  2. Howto:3D Aircraft Models,by flightgear home.
  3. Howto:Animate models,by flightgear home.
  4. YASim,by flightgear home.
  5. JSBSim,by flightgear home.
  6. Welcome to the aircraft developer portal!,by flightgear.
  7. Howto:Creating 3D instruments,by flightgear.

FlightGear安装飞机和场景的方法

发表于 2019-03-13

FlightGear可安装额外的飞行器和地景。

安装地景

FlightGear的详细地景可以覆盖整个世界。默认的FlightGear安装包只包括旧金山周边一小块区域,因此想要飞到其他地方,得下载额外的地景。

每一块地景被打包成一个压缩包,每经纬度10度为一块。每一个压缩包以10×10经纬度命名,如w130n50.tgz。

下载FlightGear地景参考链接1。下载后的地景复制到$FG_ROOT/Scenery或者$FG_SCENERY下。

使用如下命令解压地景,将在$FG_ROOT/Scenery产生Objects和Terrain两个文件夹,分别为卫星地图和地形数据。

1
2
3
cd $FG_ROOT/Scenery
tar -xvf e110n30.tgz
rm e110n30.tgz

安装飞行器

默认的FlightGear安装包只有少数几个飞行器,可以从参考链接2中获得大量的飞行器。

下载的飞行器复制到$FG_ROOT/Aircraft文件夹下。

参考链接

  1. 下载FlightGear地景, by flightgear.
  2. 下载FlightGear飞行器, by flightgear.

Python爬虫获取网页链接

发表于 2019-03-13

最近研究开源飞行模拟器,想将其世界地景全部下载下来。一个个手动下载太麻烦,于是想先用python的requests和Beautiful Soup组件获取地景链接,再以每行一个地景链接写入文本文档,最后使用axel多线程自动下载每一个地景包。

基础知识

requests组件

Requests是一个Python HTTP库,在Apache 2许可证下发布。该项目的目标是使HTTP请求更简单,更人性化。

下面是示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
>>> import requests
>>> r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
>>> r.status_code
200
>>> r.headers['content-type']
'application/json; charset=utf8'
>>> r.encoding
'utf-8'
>>> r.text # doctest: +ELLIPSIS
u'{"type":"User"...'
>>> r.json() # doctest: +ELLIPSIS
{u'private_gists': 419, u'total_private_repos': 77, ...}

Beautiful Soup组件

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。Beautiful Soup会帮你节省数小时甚至数天的工作时间。

Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是 lxml。

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment。

  • Tag 对象与XML或HTML原生文档中的tag相同,有最重要的属性: name和attributes。
  • BeautifulSoup 对象表示的是一个文档的全部内容,但并不是真正的HTML或XML的tag,所以它没有name和attribute属性。
  • Beautiful Soup用 NavigableString 类来包装tag中的字符串。
  • Comment 对象是一个特殊类型的 NavigableString 对象:

下面是BeautifulSoup的一个简单示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from bs4 import BeautifulSoup
soup = BeautifulSoup(html_doc)

print(soup.prettify())
# <html>
# <head>
# <title>
# The Dormouse's story
# </title>
# </head>
# <body>
# <p class="title">
# <b>
# The Dormouse's story
# </b>
# </p>
# <p class="story">
# Once upon a time there were three little sisters; and their names were
# <a class="sister" href="http://example.com/elsie" id="link1">
# Elsie
# </a>
# ,
# <a class="sister" href="http://example.com/lacie" id="link2">
# Lacie
# </a>
# and
# <a class="sister" href="http://example.com/tillie" id="link2">
# Tillie
# </a>
# ; and they lived at the bottom of a well.
# </p>
# <p class="story">
# ...
# </p>
# </body>
# </html>

axel工具

axel是Linux下一个不错的HTTP/ftp高速下载工具。支持多线程下载、断点续传,且可以从多个地址或者从一个地址的多个连接来下载同一个文件。适合网速不给力时多线程下载提高下载速度。

axel语法:

1
axel [options] url1 [url2] [url...]

axel选项:

1
2
3
4
5
6
7
8
9
10
11
12
--max-speed=x , -s x         最高速度x
--num-connections=x , -n x 连接数x
--output=f , -o f 下载为本地文件f
--search[=x] , -S [x] 搜索镜像
--header=x , -H x 添加头文件字符串x(指定 HTTP header)
--user-agent=x , -U x 设置用户代理(指定 HTTP user agent)
--no-proxy , -N 不使用代理服务器
--quiet , -q 静默模式
--verbose ,-v 更多状态信息
--alternate , -a Alternate progress indicator
--help ,-h 帮助
--version ,-V 版本信息

代码实现

获取地景链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import requests
from bs4 import BeautifulSoup

# 下载指定URI链接
def getUriContent(uri):
try:
fgWorldScenery = requests.get(link, timeout=10)
except requests.exceptions.HTTPError as errh:
print ("Http Error:",errh)
except requests.exceptions.ConnectionError as errc:
print ("Error Connecting:",errc)
except requests.exceptions.Timeout as errt:
print ("Timeout Error:",errt)
except requests.exceptions.RequestException as err:
print ("OOps: Something Else",err)
else:
print("Http Request Success!")
return fgWorldScenery.text

# 获取所有地景链接,存入列表
def getTargetLinks(html):
soup = BeautifulSoup(html)
list=[]
#print(soup.prettify())
for child in soup.find_all('area'):
list.append(child['href'])
print("Get Target Links Success!")
return list

# 将地景链接逐行写入文件
def writeToFile(linkList):
file = open('./sceneLink.txt','w')
for link in linkList:
file.write(link)
file.write('\t\n')
print("Write Target Link To File Success!")
file.close()

if __name__ == "__main__":
link = "http://www.flightgear.org/legacy-Downloads/scenery-v2.12.html"
html=getUriContent(link)
linkList=getTargetLinks(html)
writeToFile(linkList)

下载世界地景

1
2
3
4
for line in $(cat sceneLink.txt)
do
axel -n 10 $line
done

参考链接

  1. requests快速上手,by requests.
  2. Python 基础教程, by runoob.
  3. Python之父教你写main()函数,by 编程派.
  4. Beautiful Soup 4.2.0 文档,by BeautifulSoup.
  5. FlightGear安装飞机和场景的方法,by jack huang.
  6. axel命令,by Linux命令大全.

Git_Clone大项目超过1G失败解决方案

发表于 2019-03-09

SourceForge.net,又称SF.net,是开源软件的开发者进行开发管理的集中式场所,也是全球最大开源软件开发平台和仓库。FlightGear的源代码就托管在该平台。最近在使用Git克隆FlightGear的子项目fgdata时,老是到1G时失败。具体情况如下:

1
2
3
4
5
6
7
8
9
# git clone fgdata大项目时超过1G就会出错
$ git clone https://git.code.sf.net/p/flightgear/fgdata
Cloning into 'fgdata'...
remote: Counting objects: 61455, done.
remote: Compressing objects: 100% (27321/27321), done.
error: RPC failed; curl 56 GnuTLS recv error (-110): The TLS connection was non-properly terminated.
fatal: The remote end hung up unexpectedly
fatal: early EOF
fatal: index-pack failed

经多种方案尝试,使用如下方法可避免该问题:

1
$ git clone git://git.code.sf.net/p/flightgear/fgdata

参考链接

  1. FGdata downloading error,by flightgear forum.
  2. SourceForge Support,by sourceforge.
  3. git clone 太慢怎么办?, by aneasystone.

Flightgear在Linux/Debian中的下载编译安装教程

发表于 2019-03-08 | 更新于 2021-01-26

编译安装

使用如下脚本在Linux/Debian操作系统下从源代码构建开源飞行模拟器FlightGear.

1
2
3
4
5
6
7
8
9
cd  <your working directory for building FlightGear>
wget -O download_and_compile.sh http://sourceforge.net/p/flightgear/fgmeta/ci/next/tree/download_and_compile.sh?format=raw
chmod +x download_and_compile.sh
mkdir -p stable
mkdir -p next
cd stable
../download_and_compile.sh -s
cd ../next
../download_and_compile.sh -p n

需要注意的是,该脚本git clone fgdata时超过1G时就会报错退出,解决方案见链接4。

此外,如果之前安装过FlightGear的旧版本,编译过程也有可能报错,清理之前旧版本之后即可解决问题。

启动模拟器

启动FlightGear命令如下:

1
2
3
cd <your working directory for building FlightGear>
cd stable
./run_fgfs.sh

fgfs常用选项

fgfs为flightgear的飞行模拟器主程序,在命令行中输入fgfs –launcher即可打开启动器,选择飞机、位置等配置,然后开始模拟飞行。下面介绍fgfs的一些常用选项。

  • –launcher

    打开启动器。

  • –fg-root=path

    告诉flightgear到path下寻找数据文件,如飞机、地景等。

  • –fg-scenery=path

    告诉flightgear到path下寻找地景文件。

  • –fg-aircraft=path

    告诉flightgear到path下寻找飞机文件。

  • –language=code

    指定会话语音, 例如 pl, nl, it, fr, en, de。

  • –aircraft= 飞行器

    载入特定飞行器。

  • –show-aircraft

    打印可用的飞行器列表。

参考链接

  1. Howto:Get Local Copies of Flightgear Source Code,by flightgear wiki.
  2. Scripted Compilation on Linux Debian/Ubuntu, by flightgear wiki.
  3. Building FlightGear,by flightgear wiki.
  4. Git_Clone大项目超过1G失败解决方案,by jack huang.
  5. Building using CMake - Windows,by flightgear.
  6. Visual Studio之RelWithDebInfo模式,“被忽视”的编译模式,by inter_peng.

博弈论简介

发表于 2019-02-26 | 更新于 2021-08-13

博弈论(英语:game theory),又译为对策论,经济学的一个分支,1944年冯·诺伊曼与奥斯卡·摩根斯特恩合著《博弈论与经济行为》,标志着现代系统博弈理论的的初步形成,因此他被称为“博弈论之父”。博弈论被认为是20世纪经济学最伟大的成果之一。目前在生物学、经济学、国际关系、计算机科学、政治学、军事战略和其他很多学科都有广泛的应用。

概述

博弈论考虑游戏中的个体的预测行为和实际行为,并研究它们的优化策略。表面上不同的相互作用可能表现出相似的激励结构(incentive structure),所以它们是同一个游戏的特例。其中一个有名有趣的应用例子是囚徒困境。

具有竞争或对抗性质的行为称为博弈行为。在这类行为中,参加斗争或竞争的各方各自具有不同的目标或利益。为了达到各自的目标和利益,各方必须考虑对手的各种可能的行动方案,并力图选取对自己最为有利或最为合理的方案。比如日常生活中的下棋,打牌等。博弈论就是研究博弈行为中斗争各方是否存在着最合理的行为方案,以及如何找到这个合理的行为方案的数学理论和方法。

分类

博弈论知识结构

图1 博弈论知识结构

动态博弈

动态博弈是指参与人的行动有先后顺序,而且行动在后者可以观察到行动在先者的选择,并据此作出相应的选择。

静态博弈

静态博弈是指博弈中参与者同时采取行动,或者尽管参与者行动的采取有先后顺序,但后行动的人不知道先采取行动的人采取的是什么行动。

完全信息静态博弈

纳什均衡

纳什均衡,又称为非合作博弈均衡,是博弈论的一个重要术语,以约翰·纳什命名。在一个博弈过程中,无论对方的策略选择如何,当事人一方都会选择某个确定的策略,则该策略被称作支配性策略。如果两个博弈的当事人的策略组合分别构成各自的支配性策略,那么这个组合就被定义为纳什均衡。

术语

  • 局中人(players):在一场竞赛或博弈中,每一个有决策权的参与者成为一个局中人。只有两个局中人的博弈现象称为“两人博弈”,而多于两个局中人的博弈称为 “多人博弈”。

  • 策略(strategies):一局博弈中,每个局中人都有选择实际可行的完整的行动方案,即方案不是某阶段的行动方案,而是指导整个行动的一个方案,一个局中人的一个可行的自始至终全局筹划的一个行动方案,称为这个局中人的一个策略。如果在一个博弈中局中人都总共有有限个策略,则称为“有限博弈”,否则称为“无限博弈”。

  • 得失(payoffs):一局博弈结局时的结果称为得失。每个局中人在一局博弈结束时的得失,不仅与该局中人自身所选择的策略有关,而且与全局中人所取定的一组策略有关。所以,一局博弈结束时每个局中人的“得失”是全体局中人所取定的一组策略的函数,通常称为支付(payoff)函数。

  • 次序(orders):各博弈方的决策有先后之分,且一个博弈方要作不止一次的决策选择,就出现了次序问题;其他要素相同次序不同,博弈就不同。

  • 博弈涉及到均衡:均衡是平衡的意思,在经济学中,均衡意即相关量处于稳定值。在供求关系中,某一商品市场如果在某一价格下,想以此价格买此商品的人均能买到,而想卖的人均能卖出,此时我们就说,该商品的供求达到了均衡。所谓纳什均衡,它是一稳定的博弈结果。

参考链接

  1. 博弈论,by wikipedia.
  2. 博弈论, by 智库百科.
  3. 漫画:什么是 “智猪博弈” ?,by 小灰.
  4. Matlab_对策论、微分稳定方程,by Lanyun.
  5. Minimax算法及实例分析,by witnessai1.
  6. 庞特里亚金最大化原理,by wikipedia.
  7. AI的博弈论,一份插图教程,by 磐创AI.

Linux代理工具简介

发表于 2019-02-23 | 更新于 2022-05-20

下面介绍两个Linux代理工具shadowsock和proxychains。

shadowsock

Shadowsocks可以指一种基于Socks5代理方式的加密传输协议,也可以指实现这个协议的各种开发包。当前包使用Python、C、C++、C#、Go语言等编程语言开发,大部分主要实现(iOS平台的除外)采用Apache许可证、GPL、MIT许可证等多种自由软件许可协议开放源代码。Shadowsocks分为服务器端和客户端,在使用之前,需要先将服务器端部署到服务器上面,然后通过客户端连接并创建本地代理。

1
2
3
4
# 安装方法
sudo apt-get install shadowsocks
# 使用方法
nohup /usr/bin/sslocal -c /etc/shadowsocks/server.json

proxychains

ProxyChains是一个开源代理工具,能够强制使任何应用的TCP连接使用SOCKS4,SOCKS或者HTTP(S)代理进行连接。

1
2
3
4
5
6
7
8
# 安装配置
sudo apt install proxychains
sudo gedit /etc/proxychains.conf
socks5 127.0.0.1 1080
# 使用方法
proxychains firefoxt
proxychains aria2c
proxychains wget

参考链接

  1. Shadowsocks,by wikipedia.
  2. SOCKS,by wikipedia.
  3. 将 Tor socks 转换成 http 代理,by linux 中国.
  4. Linux 科学上网,by fanzhongwei.
  5. Debian系列——Ubuntu18.04为例,by github.
上一页1…424344…53下一页

Jack Huang

521 日志
67 标签
© 2025 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse