基于MobileSDKV4版固件开发大疆无人机手机端遥控器(3)
点击上方蓝色字体,关注我们第三篇文章准备单独拿出来写,因为在大疆为
2023-06-15第三篇文章准备单独拿出来写,因为在大疆为人机的所有功能中,航线规划的功能最为复杂,也相当的繁琐,这里需要说仔细一点,可能会将代码进行多步分解。
在地图中手动选择点位选择完成航线打点;若打点位置错了可进行点位删除。
可对航线点位进行设置,如飞行高度,速度(慢速:3m/s;中速: 7m/s;高速:10 m/s)、任务结束后操作及航向,点击[设置]按钮完成设置。
【资料图】
设置完成后会显示总距离及飞行总时间。
点击[上传]按钮,进行航线上传。可以进入本地存储中选择航线文件进行上传,航线文件为 .kml结尾。
点击 [开始]按钮,则可对航线进行执行。若中途需要暂停也可点击[暂停]安装进行暂停操作。
按钮即可进入航线管理界面。
点击[获取]按钮,即可将航线信息展示到地图界面中。
创建activity_setting_route.xml及SettingRouteActivity文件。
include>Button>Button>Button>Button>Button>Button>LinearLayout>TextView>TextView>TextView>TextView>TextView>LinearLayout>RelativeLayout>LinearLayout> publicclassSettingRouteActivityextendsBaseActivityimplementsAMap.OnMarkerClickListener,View.OnClickListener,AMap.OnMapClickListener,LocationSource,AMapLocationListener,AMap.InfoWindowAdapter{@BindView(R.id.layout_route)ViewmViewLayoutToolbar;@BindView(R.id.ll_route)LinearLayoutmLinearLayout;@BindView(R.id.tv_toolbar_title)TextViewmTextViewToolbarTitle;//@BindView(R.id.map)//MapViewmMapView;@BindView(R.id.btn_delete)ButtonmButtonDelete;@BindView(R.id.btn_finish)ButtonmButtonFinish;@BindView(R.id.btn_setting)ButtonmButtonSetting;@BindView(R.id.btn_upload)ButtonmButtonUpload;@BindView(R.id.btn_start)ButtonmButtonStart;@BindView(R.id.btn_stop)ButtonmButtonStop;@BindView(R.id.ll_information)LinearLayoutmLinearLayoutInformation;@BindView(R.id.tv_height)TextViewmTextViewHeight;@BindView(R.id.tv_speed)TextViewmTextViewSpeed;@BindView(R.id.tv_count)TextViewmTextViewCount;@BindView(R.id.tv_distance)TextViewmTextViewDistance;@BindView(R.id.tv_time)TextViewmTextViewTime;privateMapViewmMapView;privateOnLocationChangedListenermListener;privateAMapLocationClientmlocationClient;privateAMapLocationClientOptionmLocationOption;privatedoubleD_latitude,D_longitude;privateUiSettingsmUiSettings;privateAMapaMap;privateMarkerdroneMarker=null;privatefloataltitude=100.0f;privatefloatmSpeed=10.0f;privatebooleanisAdd=false;privatefinalMapmMarkers=newConcurrentHashMap();privateMarkermClickMarker;privateListwaypointList=newArrayList<>();privateListmLatLng=newArrayList<>();privateListmPointInfo=newArrayList<>();publicstaticWaypointMission.BuilderwaypointMissionBuilder;privateFlightControllermFlightController;privateWaypointMissionOperatorinstance;privateWaypointMissionFinishedActionmFinishedAction=WaypointMissionFinishedAction.NO_ACTION;privateWaypointMissionHeadingModemHeadingMode=WaypointMissionHeadingMode.AUTO;privateSQLiteHelpermSQLiteHelper;privateStringFinishedAction,HeadingMode;//自定义窗体ViewinfoWindow=null;intspeed_RG_id=0;intactionAfterFinished_RG_id=0;intheading_RG_id=0;//kimstaticReadKmlreadKml=newReadKml();privatestaticListsampleList=readKml.getCoordinateList();@OverridepublicvoidinitViews(){mLinearLayout.setVisibility(View.VISIBLE);mTextViewToolbarTitle.setText("航线规划");IntentFilterfilter=newIntentFilter();filter.addAction(ReceiverApplication.FLAG_CONNECTION_CHANGE);registerReceiver(mReceiver,filter);mMapView=findViewById(R.id.map);mMapView.onCreate(InstanceState);initMapView();addListener();onProductConnectionChange();}@OverrideprotectedvoidonResume(){super.onResume();initFlightController();mMapView.onResume();}/***方法必须重写*/@OverrideprotectedvoidonSaveInstanceState(BundleoutState){super.onSaveInstanceState(outState);mMapView.onSaveInstanceState(outState);}@OverrideprotectedvoidonPause(){super.onPause();mMapView.onPause();deactivate();}@OverrideprotectedvoidonDestroy(){super.onDestroy();unregisterReceiver(mReceiver);removeListener();mMapView.onDestroy();if(null!=mlocationClient){mlocationClient.onDestroy();}}@OverridepublicvoidinitDatas(){}@OverrideprotectedvoidrequestData(){}privatevoidinitMapView(){if(aMap==null){aMap=mMapView.getMap();mUiSettings=aMap.getUiSettings();mUiSettings.setMyLocationButtonEnabled(true);mUiSettings.setScaleControlsEnabled(true);aMap.setOnMapClickListener(this);//addthelistenerforclickforamapobjectaMap.setLocationSource(this);aMap.setMyLocationEnabled(true);aMap.setInfoWindowAdapter(this);aMap.setOnMarkerClickListener(this);setupLocationStyle();}}privatevoidsetupLocationStyle(){//自定义系统定位蓝点MyLocationStylemyLocationStyle=newMyLocationStyle();//自定义定位蓝点图标myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.icv_gps_point_36dp));//自定义精度范围的圆形边框颜色myLocationStyle.strokeColor(Color.parseColor("#00000000"));//自定义精度范围的圆形边框宽度myLocationStyle.strokeWidth(5);//设置圆形的填充颜色myLocationStyle.radiusFillColor(Color.parseColor("#00000000"));//将自定义的myLocationStyle对象添加到地图上aMap.setMyLocationStyle(myLocationStyle);}@OnClick({R.id.img_kml_input,R.id.img_setting_route,R.id.img_start_fly,R.id.btn_delete,R.id.img_setting_clear,R.id.btn_finish,R.id.btn_setting,R.id.btn_upload,R.id.btn_start,R.id.btn_stop,R.id.img_back})@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.img_back:SettingRouteActivity.this.finish();break;caseR.id.img_kml_input:Intentintent=newIntent(Intent.ACTION_GET_CONTENT);intent.setType("*/*");//设置类型,我这里是任意类型,任意后缀的可以这样写。intent.addCategory(Intent.CATEGORY_OPENABLE);startActivityForResult(intent,MyStatic.REQUEST_CODE_FILE);break;caseR.id.img_setting_route:enableDisableAdd();break;caseR.id.img_setting_clear:runOnUiThread(newRunnable(){@Overridepublicvoidrun(){aMap.clear();mMarkers.clear();mPointInfo.clear();mLinearLayoutInformation.setVisibility(View.GONE);mButtonFinish.setVisibility(View.GONE);mButtonSetting.setVisibility(View.GONE);mButtonUpload.setVisibility(View.GONE);mButtonStart.setVisibility(View.GONE);mButtonStop.setVisibility(View.GONE);}});waypointList.clear();waypointMissionBuilder.waypointList(waypointList);break;caseR.id.img_start_fly:atyAction(WaypointActivity.class,MyStatic.REQUEST_CODE_ID);break;caseR.id.btn_delete:runOnUiThread(newRunnable(){@Overridepublicvoidrun(){aMap.clear();}});for(inti=0;i-90&&latitude<90&&longitude>-180&&longitude<180)&&(latitude!=0f&&longitude!=0f);}protectedBroadcastReceivermReceiver=newBroadcastReceiver(){@OverridepublicvoidonReceive(Contextcontext,Intentintent){onProductConnectionChange();}};privatevoidonProductConnectionChange(){initFlightController();}privatevoidaddListener(){if(getWaypointMissionOperator()!=null){getWaypointMissionOperator().addListener(eventNotificationListener);}}privatevoidremoveListener(){if(getWaypointMissionOperator()!=null){getWaypointMissionOperator().removeListener(eventNotificationListener);}}privateWaypointMissionOperatorListenereventNotificationListener=newWaypointMissionOperatorListener(){@OverridepublicvoidonDownloadUpdate(WaypointMissionDownloadEventdownloadEvent){}@OverridepublicvoidonUploadUpdate(WaypointMissionUploadEventuploadEvent){}@OverridepublicvoidonExecutionUpdate(WaypointMissionExecutionEventexecutionEvent){}@OverridepublicvoidonExecutionStart(){}@OverridepublicvoidonExecutionFinish(@NullablefinalDJIErrorerror){showToasts("Executionfinished:"+(error==null?"Success!":error.getDescription()));}};publicWaypointMissionOperatorgetWaypointMissionOperator(){if(instance==null){instance=DJISDKManager.getInstance().getMissionControl().getWaypointMissionOperator();}returninstance;}@OverridepublicvoidonMapClick(LatLngpoint){if(isAdd==true){markWaypoint(point);WaypointmWaypoint=newWaypoint(point.latitude,point.longitude,altitude);//AddWaypointstoWaypointarraylist;if(waypointMissionBuilder!=null){waypointList.add(mWaypoint);waypointMissionBuilder.waypointList(waypointList).waypointCount(waypointList.size());}else{waypointMissionBuilder=newWaypointMission.Builder();waypointList.add(mWaypoint);waypointMissionBuilder.waypointList(waypointList).waypointCount(waypointList.size());}mTextViewCount.setText("航点数:"+waypointMissionBuilder.getWaypointCount());mTextViewDistance.setText("总距离:"+Math.round(waypointMissionBuilder.calculateTotalDistance())+"m");mTextViewTime.setText("总时间:"+Math.round(waypointMissionBuilder.calculateTotalTime())+"min");}else{if(mClickMarker!=null&&mClickMarker.isInfoWindowShown()){mClickMarker.hideInfoWindow();mButtonDelete.setVisibility(View.GONE);}//showToasts("当前未开启增加点模式");}}privatevoidmarkWaypoint(LatLngpoint){MarkerOptionsmarkerOptions=newMarkerOptions();markerOptions.position(point);mPointInfo.add(newPointInfo(point.latitude,point.longitude));markerOptions.title("航点"+(mMarkers.size()+1));markerOptions.snippet("事件:");markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE));markerOptions.infoWindowEnable(true);Markermarker=aMap.addMarker(markerOptions);mMarkers.put(mMarkers.size(),marker);marker.showInfoWindow();if(mMarkers.size()>0){mLatLng.clear();PolylineOptionsPolylineOptions=newPolylineOptions();for(inti=0;i0){PolylineOptionsPolylineOptions=newPolylineOptions();PolylineOptions.addAll(mLatLng);PolylineOptions.width(10);PolylineOptions.color(Color.argb(255,1,1,1));aMap.addPolyline(PolylineOptions);}waypointMissionBuilder.waypointList(waypointList).waypointCount(waypointList.size());mTextViewCount.setText("航点数:"+waypointMissionBuilder.getWaypointCount());mTextViewDistance.setText("总距离:"+Math.round(waypointMissionBuilder.calculateTotalDistance())+"m");mTextViewTime.setText("总时间:"+Math.round(waypointMissionBuilder.calculateTotalTime())+"min");MyLog.d("航点数:"+waypointMissionBuilder.getWaypointCount());MyLog.d("总距离:"+waypointMissionBuilder.calculateTotalDistance());MyLog.d("总时间:"+waypointMissionBuilder.calculateTotalTime());mButtonDelete.setVisibility(View.GONE);}/***定位成功后回调函数*/@OverridepublicvoidonLocationChanged(AMapLocationamapLocation){if(mListener!=null&&amapLocation!=null){if(amapLocation!=null&&amapLocation.getErrorCode()==0){D_latitude=amapLocation.getLatitude();//获取纬度D_longitude=amapLocation.getLongitude();//获取经度mListener.onLocationChanged(amapLocation);//显示系统小蓝点aMap.moveCamera(CameraUpdateFactory.zoomTo(18));}else{StringerrText="定位失败,"+amapLocation.getErrorCode()+":"+amapLocation.getErrorInfo();Log.e("AmapErr",errText);}}}@Overridepublicvoidactivate(OnLocationChangedListenerlistener){mListener=listener;if(mlocationClient==null){try{mlocationClient=newAMapLocationClient(this);}catch(Exceptione){e.printStackTrace();}mLocationOption=newAMapLocationClientOption();//设置定位监听mlocationClient.setLocationListener(this);//设置为高精度定位模式mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置定位参数mLocationOption.setOnceLocation(true);mlocationClient.setLocationOption(mLocationOption);//此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,//注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求//在定位结束后,在合适的生命周期调用onDestroy()方法//在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除mlocationClient.startLocation();}}@Overridepublicvoiddeactivate(){mListener=null;if(mlocationClient!=null){mlocationClient.stopLocation();mlocationClient.onDestroy();}mlocationClient=null;}@OverridepublicViewgetInfoWindow(Markermarker){if(infoWindow==null){infoWindow=LayoutInflater.from(this).inflate(R.layout.amap_info_window,null);}render(marker,infoWindow);returninfoWindow;}/***自定义infoWindow窗口*/privatevoidrender(Markermarker,ViewinfoWindow){TextViewtitle=infoWindow.findViewById(R.id.info_window_title);TextViewcontent=infoWindow.findViewById(R.id.info_window_content);title.setText(marker.getTitle());content.setText(marker.getSnippet());}@OverridepublicViewgetInfoContents(Markermarker){returnnull;}@OverridepublicbooleanonMarkerClick(Markermarker){marker.showInfoWindow();mClickMarker=marker;mButtonDelete.setVisibility(View.VISIBLE);//aMap.moveCamera(CameraUpdateFactory.newCameraPosition(newCameraPosition(marker.getPosition(),18,0,0)));returntrue;}privatevoidshowSettingDialog(){LinearLayoutwayPointSettings=(LinearLayout)getLayoutInflater().inflate(R.layout.dialog_waypointsetting,null);finalTextViewwpAltitude_TV=(TextView)wayPointSettings.findViewById(R.id.altitude);RadioGroupspeed_RG=(RadioGroup)wayPointSettings.findViewById(R.id.speed);RadioGroupactionAfterFinished_RG=(RadioGroup)wayPointSettings.findViewById(R.id.actionAfterFinished);RadioGroupheading_RG=(RadioGroup)wayPointSettings.findViewById(R.id.heading);wpAltitude_TV.setText(Math.round(altitude)+"");if(speed_RG_id!=0){RadioButtonradioButton=(RadioButton)speed_RG.findViewById(speed_RG_id);radioButton.setChecked(true);}if(actionAfterFinished_RG_id!=0){RadioButtonradioButton=(RadioButton)actionAfterFinished_RG.findViewById(actionAfterFinished_RG_id);radioButton.setChecked(true);}if(heading_RG_id!=0){RadioButtonradioButton=(RadioButton)heading_RG.findViewById(heading_RG_id);radioButton.setChecked(true);}speed_RG.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener(){@OverridepublicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){if(checkedId==R.id.lowSpeed){mSpeed=3.0f;}elseif(checkedId==R.id.MidSpeed){mSpeed=5.0f;}elseif(checkedId==R.id.HighSpeed){mSpeed=10.0f;}speed_RG_id=checkedId;}});actionAfterFinished_RG.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener(){@OverridepublicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){MyLog.d("选择动作完成");if(checkedId==R.id.finishNone){mFinishedAction=WaypointMissionFinishedAction.NO_ACTION;FinishedAction="0";}elseif(checkedId==R.id.finishGoHome){mFinishedAction=WaypointMissionFinishedAction.GO_HOME;FinishedAction="1";}elseif(checkedId==R.id.finishAutoLanding){mFinishedAction=WaypointMissionFinishedAction.AUTO_LAND;FinishedAction="2";}elseif(checkedId==R.id.finishToFirst){mFinishedAction=WaypointMissionFinishedAction.GO_FIRST_WAYPOINT;FinishedAction="3";}actionAfterFinished_RG_id=checkedId;}});heading_RG.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener(){@OverridepublicvoidonCheckedChanged(RadioGroupgroup,intcheckedId){MyLog.d("选择标题");if(checkedId==R.id.headingNext){mHeadingMode=WaypointMissionHeadingMode.AUTO;HeadingMode="0";}elseif(checkedId==R.id.headingInitDirec){mHeadingMode=WaypointMissionHeadingMode.USING_INITIAL_DIRECTION;HeadingMode="1";}elseif(checkedId==R.id.headingRC){mHeadingMode=WaypointMissionHeadingMode.CONTROL_BY_REMOTE_CONTROLLER;HeadingMode="2";}elseif(checkedId==R.id.headingWP){mHeadingMode=WaypointMissionHeadingMode.USING_WAYPOINT_HEADING;HeadingMode="3";}heading_RG_id=checkedId;}});newAlertDialog.Builder(this).setTitle("航点设置").setView(wayPointSettings).setNeutralButton("设置",newDialogInterface.OnClickListener(){publicvoidonClick(DialogInterfacedialog,intid){StringaltitudeString=wpAltitude_TV.getText().toString();altitude=Integer.parseInt(nulltoIntegerDefalt(altitudeString));MyLog.e("altitude"+altitude);MyLog.e("speed"+mSpeed);MyLog.e("mFinishedAction"+mFinishedAction);MyLog.e("mHeadingMode"+mHeadingMode);configWayPointMission();}}).setCancelable(false).create().show();}StringnulltoIntegerDefalt(Stringvalue){if(!isIntValue(value))value="0";returnvalue;}booleanisIntValue(Stringval){try{val=val.replace("","");Integer.parseInt(val);}catch(Exceptione){returnfalse;}returntrue;}privatevoidconfigWayPointMission(){if(waypointMissionBuilder==null){waypointMissionBuilder=newWaypointMission.Builder().finishedAction(mFinishedAction).headingMode(mHeadingMode).autoFlightSpeed(mSpeed).maxFlightSpeed(mSpeed).flightPathMode(WaypointMissionFlightPathMode.NORMAL);}else{waypointMissionBuilder.finishedAction(mFinishedAction).headingMode(mHeadingMode).autoFlightSpeed(mSpeed).maxFlightSpeed(mSpeed).flightPathMode(WaypointMissionFlightPathMode.NORMAL);}if(waypointMissionBuilder.getWaypointList().size()>0){for(inti=0;i-1){refreshMapPoint(Id);}break;case102:if(data.getData()!=null){Uriuri=data.getData();//得到uri,后面就是将uri转化成file的过程。Stringimg_path=uri.getPath();try{if(!TextUtils.isEmpty(img_path)){readKml.parseKml(img_path);addSampleMarker();}}catch(Exceptione){e.printStackTrace();}}break;default:break;}}privatevoidrefreshMapPoint(intid){aMap.clear();mMarkers.clear();mPointInfo.clear();mLinearLayoutInformation.setVisibility(View.GONE);mButtonFinish.setVisibility(View.GONE);mButtonSetting.setVisibility(View.GONE);mButtonUpload.setVisibility(View.GONE);mButtonStart.setVisibility(View.GONE);mButtonStop.setVisibility(View.GONE);waypointList.clear();mSQLiteHelper=newSQLiteHelper(SettingRouteActivity.this);Cursorc=mSQLiteHelper.doSelectWaypoint(id);if(c!=null){if(c.moveToNext()){MyLog.d("航点:"+"{"pointInfo":"+c.getString(1)+"}");mPointInfo.addAll(GsonUtil.GsonToBean("{"pointInfo":"+c.getString(1)+"}",Root.class).getPointInfo());altitude=c.getFloat(2);mSpeed=c.getFloat(3);switch(c.getString(4)){case"0":mHeadingMode=WaypointMissionHeadingMode.AUTO;break;case"1":mHeadingMode=WaypointMissionHeadingMode.USING_INITIAL_DIRECTION;break;case"2":mHeadingMode=WaypointMissionHeadingMode.CONTROL_BY_REMOTE_CONTROLLER;break;case"3":mHeadingMode=WaypointMissionHeadingMode.USING_WAYPOINT_HEADING;break;case"4":mHeadingMode=WaypointMissionHeadingMode.TOWARD_POINT_OF_INTEREST;break;}switch(c.getString(5)){case"0":mFinishedAction=WaypointMissionFinishedAction.NO_ACTION;break;case"1":mFinishedAction=WaypointMissionFinishedAction.GO_HOME;break;case"2":mFinishedAction=WaypointMissionFinishedAction.AUTO_LAND;break;case"3":mFinishedAction=WaypointMissionFinishedAction.GO_FIRST_WAYPOINT;break;case"4":mFinishedAction=WaypointMissionFinishedAction.CONTINUE_UNTIL_END;break;}}}for(inti=0;i0){mLatLng.clear();PolylineOptionsPolylineOptions=newPolylineOptions();for(inti=0;i0){for(inti=0;i 创建activity_waypoint.xml和WaypointActivity文件。
include>View>androidx.recyclerview.widget.RecyclerView>LinearLayout> @Layout(R.layout.activity_waypoint)publicclassWaypointActivityextendsBaseActivityimplementsView.OnClickListener{@BindView(R.id.layout_waypoint)ViewmViewLayoutToolbar;@BindView(R.id.ll_waypoint)LinearLayoutmLinearLayout;@BindView(R.id.tv_toolbar_title)TextViewmTextViewToolbarTitle;@BindView(R.id.rv_waypoint)RecyclerViewmRecyclerView;privateSQLiteHelpermSQLiteHelper;privateListmWaypointInfo=newArrayList<>();privateWaypointAdaptermWaypointAdapter;privateListmWaypointId=newArrayList<>();privateStringStrId="";@OverridepublicvoidinitViews(){mLinearLayout.setVisibility(View.VISIBLE);mTextViewToolbarTitle.setText("航线管理");MyStatic.isChoose=false;}@OverridepublicvoidinitDatas(){mSQLiteHelper=newSQLiteHelper(WaypointActivity.this);Cursorc=mSQLiteHelper.doSelect();if(c!=null){while(c.moveToNext()){mWaypointInfo.add(newWaypointInfo(c.getInt(0),c.getString(1),c.getFloat(2),c.getFloat(3),c.getString(4),c.getString(5),c.getString(6),c.getInt(7),c.getInt(8),c.getInt(9),c.getString(10)));}}c.close();mSQLiteHelper.close();mWaypointAdapter=newWaypointAdapter(R.layout.item_waypoint);mWaypointAdapter.setNewData(mWaypointInfo);initRv(mRecyclerView,mWaypointAdapter);mWaypointAdapter.setOnItemChildClickListener(newBaseQuickAdapter.OnItemChildClickListener(){@OverridepublicvoidonItemChildClick(BaseQuickAdapteradapter,Viewview,intposition){Intentintent=newIntent();intent.putExtra("id",mWaypointInfo.get(position).getId());setResult(RESULT_OK,intent);finish();}});mWaypointAdapter.setOnCheckboxCheckedListener(newWaypointAdapter.OnCheckboxCheckedListener(){@OverridepublicvoidOnCheckboxChecked(booleanisCheck,intposition){if(isCheck){mWaypointId.add(position);}else{if(mWaypointId.contains(position)){mWaypointId.remove(position);}}}});}@OverrideprotectedvoidrequestData(){}@OnClick({R.id.img_way_choose,R.id.img_way_delete,R.id.img_back})@OverridepublicvoidonClick(Viewv){switch(v.getId()){caseR.id.img_way_choose:if(MyStatic.isChoose){MyStatic.isChoose=false;}else{MyStatic.isChoose=true;}if(mWaypointAdapter!=null){mWaypointAdapter.notifyDataSetChanged();}break;caseR.id.img_way_delete:if(mWaypointId.size()>0){for(inti=0;i 以上代码仅供参考,如果想了解更多的大疆无人机二次开发过程可以私信我,源代码因为涉及到商业使用不能给大家共享,有什么问题我可以帮你解决。
标签:
点击上方蓝色字体,关注我们第三篇文章准备单独拿出来写,因为在大疆为
2023-06-15
前不久被日媒曝光的知名日本女星广末凉子6月14日亲口承认出轨并发布亲
2023-06-15
A股三大指数早盘走势分化,截至午盘,旅游、酒店、传媒等板块涨幅居前
2023-06-15
以下是五洲新春在北京时间6月15日11:09分盘口异动快照:6月15日,五洲
2023-06-15
当前大家对于反恐24小时第二季都是颇为感兴趣的,大家都想要了解一下反
2023-06-15
东北网6月15日讯6月7日,为期5天的第十九届中国(深圳)国际文化产业博览
2023-06-15
今日上市:飞沃科技---中国经济网北京6月15日讯今日,飞沃科技在深交所
2023-06-15
阳江日报讯(通讯员 余振昌)6月13日,团阳春市委在河镇云帘小学举行“
2023-06-15
格隆汇6月15日丨有投资者在互动平台向天准科技688003提问公司在无人驾
2023-06-15
前段时间,女星李小冉接受采访时,直言自己已经“年过半百”了,对于网
2023-06-15
女生总感到疲倦一查竟发现自己是“瘦胖子”医生表示:判断是否肥胖,体
2023-06-15
据悉,郑州开展补链强链工作的主要内容是:拟用3年时间,重点围绕“双
2023-06-15
所以,这一点和摩羯座很相似,可以说,巨蟹座只要不被对方招惹,一般来
2023-06-15
e4热水器故障的解决方法:1、由于热水器内的水温度太高导致的问题,可
2023-06-15
据名记罗马诺报道,法兰克福中卫恩迪卡已经完成罗马体检,下周官宣。据
2023-06-15
一、云南省临沧市天气预报1、双江县气象台2023年6月10日05时42分发布暴
2023-06-14
日前,双流区2023年金融支持实体经济促稳提质活动在空港·云展示中心举
2023-06-14
简论旌夏之用自古习俗之产生必出于因,非出于脑补。自周以后文过饰非之
2023-06-14
潍坊广电新媒体讯如果说“创一代”从白手起家到“商业帝国”,是一段艰
2023-06-14
置身于这片土地,让所有的情绪都化为“有一种生活叫云南的怒江”。
2023-06-14
汽车讯据外媒报道,丰田正在为下一代电动车开发系列新固态电池,并彻底
2023-06-14
今天来聊聊褐在文言文中的意思,解褐的文章,现在就为大家来简单介绍下
2023-06-14
打造“四个一”工程吴家山四小赴一场“古今对话”的廉洁之旅---武汉市
2023-06-14
中国日报6月14日电(记者马思)随着数字化进程加快,企业数字化体系的
2023-06-14
2023年6月13日,启迪环境发布了关于公司被纳入失信被执行人名单的公告
2023-06-14
来为大家解答以上的问题。曹清国,清国介绍这个很多人还不知道,现在让
2023-06-14
6月14日,山东地区炼厂企业硫磺报价平稳,固体硫磺主流价格在870-900元
2023-06-14
技小知识,几个科技小常识很多人还不知道,现在让我们一起来看看吧!1
2023-06-14
社区请来专业“灭虫团队”解民忧,天山区,绿化带,园林局
2023-06-14
App6月14日消息,翠华控股涨超17%,皇玺集团涨超7%,呷哺呷哺涨近5%,
2023-06-14
站在悬崖的边上,每日优鲜已经到了退市的边缘。6月13日,每日优鲜发布
2023-06-14
时尚是指在衣服的选择、摆放、着装上体现时尚元素的一种风格。注重服装
2023-06-14
人民网北京6月14日电(记者王连香)据中国国家铁路集团有限公司消息,
2023-06-14
协同通信(01613)早盘放量飙涨,一度涨超130%。截至发稿,涨69 41%,报0
2023-06-14
novideo自2022年1月试营业以来,吸引游客14多万人次,旅游团队230余个
2023-06-14
事情得从现金流量表说起。解读新商业的财经新媒体,报道资本市场,解读上
2023-06-14
6月14日,安宏基天曜府登记人名册公示,此次共204批客户成功登记;项目
2023-06-14
batteryiscriticallylow什么意思,lowbattery什么意思这个很多人还不知
2023-06-14
【光大证券:无惧油价短期波动建议把握今年确定性较强的业绩驱动的“三
2023-06-14
用声音“隔空”送药至病灶部位
2023-06-14
此外,泽连斯基表示支持格罗西的提议,即派遣国际原子能机构专家组访问
2023-06-14
国际油价13日显著上涨---新华社纽约6月13日电(记者刘亚南)国际油价13
2023-06-14
证书拍照怎么好看?怎么把证书摆放得好看、有艺术感,让人赏心悦目?下
2023-06-14
相信大家对加固工程资料填写范例,加固工程需要做哪些资料的问题都很疑
2023-06-14
今天上午,记者从国家发改委新闻发布会上获悉:人社部力争到“十四五”
2023-06-14
日前,浙江义乌一起引发广泛社会关注的“教师打伤学生”事件,带给我们
2023-06-13
同花顺F10数据显示,2023年6月13日三特索道(002159)新增“湖北国企改
2023-06-13
6月13日,五菱全球银标第三款车——五菱佳辰混动版车型正式上市。新车
2023-06-13
商报全媒体讯(椰网 海拔新闻记者李兴民摄影报道)“太感谢你们了,没
2023-06-13
1、第二天中午和晚上都会重播的。2、网上也有的。本文就为大家分享到这
2023-06-13
亲子阅读、排练舞蹈、打球健身、交流书法……6月12日,乌鲁木齐市六道
2023-06-13
2023年湖北交通投资集团有限公司公司债券已注册
2023-06-13
6月13日,记者在宁夏石嘴山市举办的新闻发布会上了解到,由石嘴山市人
2023-06-13
前5月混基跌幅冠军:中航新起航灵活配置混合跌33%
2023-06-13
金融界6月13日消息新华百货(行情600785,诊股)公告,股东上海宝银与天风
2023-06-13
海报新闻首席记者李子骄记者李硕琳报道6月12日,有网友发布视频称,广
2023-06-13
鲁南地区甲醇出厂价格参考在1950元 吨附近厂提现汇,临沂送到价格参考
2023-06-13
六月,小麦进入成熟收获季。在南通如皋城北街道田源家庭农场的千余亩麦
2023-06-13
近期纯碱盘面走势受情绪和资金面影响较大,叠加宏观利好预期,盘面呈现
2023-06-13
阿斯顿·马丁(AstonMartin)正在为其Vantage跑车的首款Roadster敞篷跑车
2023-06-13
国芯科技(688262)06月13日在投资者关系平台上答复了投资者关心的问题。
2023-06-13
1、1 Asecretmakesawomanwoman ——5261Vermouth2 真相永远只有一个
2023-06-13
国内现货锡市场1 锡锭主流报价区间207500-210000元 吨,均价208750元
2023-06-13
“我是李佳琦,你们的魔鬼又来啰!”在美ONE超级618启动大会的现场,李
2023-06-13
以WPS为例,Word中分隔符的位置在页面布局菜单下,文字方向的右边位置
2023-06-13
1、读作mǔ。2、读作wú,有的也读作mǔ 古时“母”、“毋”二字通假,
2023-06-13
近日,江西疾控微信公众号发布提示,每年春夏之际,在警惕野生蘑菇及野
2023-06-13
近日,沙特阿拉伯旅游部长AhmedAlKhateeb表示,沙特未来十年将投入超过
2023-06-13
6月11日,中国铁路微信公众号发布《关于不法分子假冒国铁集团名义行骗
2023-06-13
今夜国内油价大概率不调了
2023-06-13
“现在来看,我们在欧洲和美国并购业务上的教训还是很深刻的。同时,在
2023-06-13
华商网要闻频道是整合华商报媒体资源,为陕西用户提供24小时全面及时的
2023-06-13
【环球网报道】综合“德国之声”、日本《产经新闻》报道,当地时间12日
2023-06-13
期间重仓股调仓次数共有27次,其中盈利次数为15次,胜率为55 56%;翻倍
2023-06-13
钢柱支撑住宅和商业结构。钢柱和其他框架部件构成了住宅和企业的结构骨
2023-06-13
1、宇宙分成九维空间,每个空间之间由一个临界点连接,时间与空间的关
2023-06-13
近乎傍晚白哲才找到具体位置。白哲目送着电车离开,他摇了摇头,叹了口
2023-06-13
IT之家6月12日消息,据中国铁路官方,贵阳至南宁高速铁路(以下简称:
2023-06-12
中新社大连6月12日电(记者杨毅)随着“地中海尼米莎三号”轮12日靠泊大
2023-06-12
6月12日,外交部发言人汪文斌主持例行记者会。有记者问:据报道,巴西
2023-06-12
位于淮河北岸的驻马店乃全国闻名的粮油生产基地,每年的“三夏”季节从
2023-06-12
近年来大量的生物类实验涌现出来,在科学研究发展的同时,生物类实验室的
2023-06-12
1、赶快看看嫦娥原来是一个美丽善良的村姑,她勤劳朴实活泼可爱,尤其
2023-06-12
维生素e是人体所必需的一种营养成分,食用后能给机体补充营养,同时还
2023-06-12
6月12日,江苏新海石化有限公司工业硫磺(液硫)报价640元 吨,5月30日
2023-06-12
1、我们看到的故事,刚好都是勇海和活海穿这两件衣服的时候,他们穿没
2023-06-12
1、2009年5月18日,安徽省人民政府办公厅以皖政办〔2009〕36号印发《安
2023-06-12
今年6月是全国第22个安全生产月,为贯彻落实“人人讲安全、个个会应急
2023-06-12
微软宣布,PCGamePass将会在今年晚些时候登陆GeForceNow,这可以扩展对
2023-06-12
近日,省联社烟台审计中心与烟台市住建局举行战略合作暨党建共建签约仪
2023-06-12
同花顺数据中心显示,省广集团6月9日获融资买入3519 72万元,占当日买
2023-06-12
日常炒菜我们常会切点肉丝与各种蔬菜一起炒,比如肉丝炒芹菜,尖椒炒肉
2023-06-12
南方财经6月12日电,截至6月9日,上交所融资余额报7896 39亿元,较前一
2023-06-12
此外,在行为规范方面,北京商报记者在上周末调查走访时发现,部分北京
2023-06-12
下一轮西海岸队将在6月18日前往客场挑战中甲升班马济南兴洲,对手阵中
2023-06-11
1、可能是一起的吧你的电脑肯定坏了。本文就为大家分享到这里,希望小
2023-06-11
1941年,被誉为“苏联之声”的尤里·列维坦在广播中宣布了纳粹德国入
2023-06-11
来为大家解答以上的问题。黛色霜青百度百科,黛色霜青这个很多人还不知
2023-06-11
■“免试入学”骗局在招生录取诈骗中,最常见的就是不法分子打着招生机
2023-06-11
记者从中国国家铁路集团有限公司(下称“国铁集团”)获悉,6月10日,国铁
2023-06-11Copyright © 2015-2022 中公水产网版权所有 备案号:沪ICP备2022005074号-18 联系邮箱:5855973@qq.com