APM飞控本身已经做的很完善了,但是如果要做某些个性化的应用,我们就需要修改其源代码来满足自己的需求。相应的地面站程序也可以自行修改。但是改动过后的代码是不能直接用到飞机上飞的,不然铁定会炸机。所以我们需要在电脑上模拟一个仿真的环境来验证修改后的代码确实有我们所期望的性能。APM的代码中集成了仿真程序,只需要做一些简单的设置就可以方便地搭建出一个运行在电脑上的完全模拟真实飞行的仿真环境。
这些步骤主要是参考了ArduPilot官网上的说明:http://dev.ardupilot.com/wiki/simulation-2/sitl-simulator-software-in-the-loop/setting-up-sitl-on-linux/
但是还有一些细节问题如果没注意到的话,也会让整个搭建过程不能成功。
一、仿真环境
1、首先需要有ardupilot的源代码,可以到github上下载:https://github.com/diydrones/ardupilot/tree/ArduCopter-3.2.1因为我的飞控板用的APM2.8,所以飞控程序的最高版本就是3.2.1,如果是其他的飞控板,需要下载对应版本的飞控程序。
如果电脑中安装了git,也可以直接使用这个命令从github仓库中克隆源代码:
git clone git://github.com/diydrones/ardupilot.git
我的飞控程序是跑在ubuntu上的,所以对应的命令是:
sudo apt-get install python-matplotlib python-serial python-wxgtk2.8 python-lxml
sudo apt-get install python-scipy python-opencv ccache gawk git python-pip python-pexpect
sudo pip install pymavlink MAVProxy
MAVProxy是一个纯Python语言写的地面站程序,非常好用,对于我这种非程序员的业余爱好者,像Mission Planner这种C#写的地面站,要把源码读懂然后修改实在是太复杂。Python相对就简单很多了,MAVProxy程序量也不大,可以hold住。
3、添加一些目录到系统的搜索路径中。
官网上说的是将目录添加进.bashrc文件中,但我添加进去后发现不起作用,不知道是哪里出了问题。所以我每次启动APM仿真前都在命令窗口中手动添加搜索路径:
export PATH=$PATH:$HOME/ardupilot/Tools/autotest
首先将命令窗口定位到你需要仿真的文件夹,比如我需要仿真Copter程序,则定位到ardupilot/ArduCopter地址。
第一次运行前需要把各项参数都恢复到默认值,以后当参数被改的乱七八糟的时候,也可以用这条命令恢复。
sim_vehicle.sh -w
sim_vehicle.sh --console --map --aircraft test
连接MAVProxy地面站
目的:在MAVProxy中添加自定义模块后,利用仿真环境对其性能进行验证。
方法:在ubuntu系统中运行Ardupilot仿真程序,在Windows下运行修改过的MAVProxy程序,利用内网将两者连接。
步骤:
1、下载MAVProxy源代码:
https://github.com/Dronecode/MAVProxy
2、添加自定义模块
3、设置网络环境:
确保运行MAVProxy的Windows电脑和运行ArduPilot仿真程序的Ubuntu电脑在同一内网环境中(两个电脑的IP地址前两段相同)。
查找运行MAVProxy的Windows电脑的网络IP地址,比如为192.168.3.101
在使用
sim_vehicle.sh --console --map --aircraft test
启动仿真程序后,输入
output add 192.168.3.101:14550
或者直接在包括在启动选项中:
sim_vehicle.sh --console --map --aircraft test --out 192.168.3.101:14550
在仿真程序运行过程中可以使用output命令查询当前的Link状态
4、修改MAVProxy/MAVProxy/MAVProxyWinLAN.bat 文件
cd ..\
python setup.py build install --user
python .\MAVProxy\mavproxy.py --master=192.168.3.101:14550 --console --map
pause
将其中master后面的IP替换为运行MAVProxy的电脑的IP地址。
双击MAVProxyWinLAN.bat文件后自动将改动后的代码build后运行。如果IP设置正确的话,将能够实现与ubuntu上ArduPilot仿真程序相互通信。
PS:
如果觉得设置都正确但是仍然不能相互连通,两台电脑可以试着互相ping:
ping 对方机器的IP