视频预览:3架无人机在环仿真
3架仿真
jmavsim本地坐标启动教程
1.首先执行仿真命令
n414@414:~/001/Firmware$ make px4_sitl_default jmavsim
出现左边界面就说明该仿真是可以进行仿真的!由于我在自己写的代码里面启动,所以出现右边提示,正常是不出现的。
接下来,正式执行命令:
n414@414:~/001/Firmware$ export PX4_HOME_LAT=32.141985431
n414@414:~/001/Firmware$ export PX4_HOME_LON=118.528072900
n414@414:~/001/Firmware$ export PX4_HOME_ALT=(海拔高度用默认就可以,不需要自己添加)
以上,坐标经纬度需要根据自己所在的位置进行添加修改
下面就选择使用多少架无人机进行仿真实验
n414@414:~/001/Firmware$ ./Tools/sitl_multiple_run.sh 10//首先需要开启的
最后面的数字需要根据自己的需求进行更改!
n414@414:~/001/Firmware$ ./Tools/jmavsim_run.sh -l
第一架的编号可以采用上面这条指令!
n414@414:~/001/Firmware$ ./Tools/jmavsim_run.sh -p 4561 -l
开启第二架可以使用上面这条指令!编号是4561,依次进行添加!
重新添加新的无人机需要开启新的终端,并且每次在启动仿真的时候需要先输入定位的位置!
二、获取实时经纬度点
本教程基于二次开发的QGC进行点经纬度坐标的获取,即数据仅可通过地面站获取,由于本地面站是实验室内部资料,无法共享!
通过点击QGC地面站自带地图获取实时经纬度坐标,获取代码如下:(文件:preplanview.qml)
输出位置:(文件:PrePlanController.cpp)
//"A"代表总区域,"S"代表划分出的子区域,"T"代表子区域规划的路径,"H"代表起降点,"M"代表目标,"W"代表威胁
void PrePlanController::addAreaPoint(const QString typeName, const int seq, double pointLat, double pointLong,bool isSendSignal,int pointMapX,int pointMapY,QString findWMVeiche,QString findWMTime)
{
qDebug()<<"类型:"<<typeName<<"Lat"<<QString::number(pointLat,'f',10)<<"Lon"<<QString::number(pointLong,'f',10);
AreaDataType* obj=getArea(typeName,seq);
double radius1=AreaDataType::const_radius; //测试用
if(typeName=="M")radius1=AreaDataType::const_radius;
if(obj==nullptr)
{
obj=new AreaDataType();
obj->init(typeName,seq);
if(typeName=="A") //区域
{
obj->setDisplayColor("salmon");
obj->setPathColor("lightsalmon");
}
else if(typeName=="S")
{
obj->setDisplayColor("orange");
obj->setPathColor("brown");
}
else if(typeName=="T")
{
if(seq%2==0){
obj->setDisplayColor("goldenrod");
obj->setPathColor("gold");
}
else{
obj->setDisplayColor("green");
obj->setPathColor("lightgreen");
}
}
else if(typeName=="W")
{
obj->setDisplayColor("red");
}
else if(typeName=="M")
{
obj->setDisplayColor("green");
}
else if(typeName=="H")
{
obj->setDisplayColor("blue");
}
_areaList.append(obj);
emit addPointToAreaListChanged();
}
if(typeName=="H") //特例处理,起降点只能有一个
{
updateAreaPoint(getPointName(typeName,seq,0),pointLat,pointLong,pointMapX,pointMapY,radius1);
}
else
{
obj->addAreaPoint2(pointLat,pointLong,radius1,true,pointMapX,pointMapY,findWMVeiche,findWMTime);
//by gyg20201107
if(typeName=="W" || typeName=="M")
{
sendThreatTargetToWeb();
}
emit addPointToAreaListChanged();
}
}
//提示:
qDebug()<<"类型:"<<typeName<<"Lat"<<QString::number(pointLat,'f',10)<<"Lon"<<QString::number(pointLong,'f',10);
//需要添加QString::number(pointLat,'f',10),10是输出小数点后10位小数,否则qDebug()输出为默认位数