AVBP Mission plugin¶
The AVBP mission plugin is an aircraft plugin, built upon the standard Mission Manager, to supervise adaptive mapping missions.
It is defined in the cams_avbp.plugins.mission
module.
Scenario definition¶
AVBPMission
must de declared in the plugins section. The Missions
plugin is required and must be included first in the list. Example:
aircrafts:
200:
replay: false
type: 'pprz'
plugins:
# Other plugins ...
- Missions:
backup_file: '/PATH/TO/backup_200.bin'
Goto: *goto_defaults
Segment: *segment_defaults
- AVBPMission
User remote control¶
You can make remote procedure calls using the http API, that you can issue with a web browser or from the command line with curl
. For instance:
curl -v "http://127.0.0.1:8000/runtime/call_method/?uav_id=200&plugin=AVBPMission&method=stop"
calls the stop method of the uav 200 defined in the AVBPMission plugin.
Event handlers¶
Aircraft status handlers¶
Status messages originated in paparazzi related to the aircraft state and mission execution status.
def flight_param_callback(self, msg):
"""
Receive pprz FLIGHT_PARAM messages
http://docs.paparazziuav.org/latest/paparazzi_messages.html#FLIGHT_PARAM
"""
pass
def engine_status_callback(self, engineStatus):
"""
Receive pprz ENGINE_STATUS messages
http://docs.paparazziuav.org/latest/paparazzi_messages.html#ENGINE_STATUS
"""
pass
def mission_status_callback(self, missionStatus):
"""
Receive pprz MISSION_STATUS messages
http://docs.paparazziuav.org/latest/paparazzi_messages.html#MISSION_STATUS
"""
pass
def nav_status_callback(self, navStatus):
"""
Receive pprz NAV_STATUS messages
http://docs.paparazziuav.org/latest/paparazzi_messages.html#NAV_STATUS
"""
pass
def ap_status_callback(self, apStatus):
"""
Receive pprz AP_STATUS messages
http://docs.paparazziuav.org/latest/paparazzi_messages.html#AP_STATUS
"""
pass
Sensor sample handlers¶
Handler for the internal CAMS event "add_sample". It is called each time a sensor sample is disseminated from another plugin of the same UAV.
def add_sample(self, sample: ty.Union[AbstractSensorSample, SensorSample]):
"""Catch sensor samples coming from other plugins"""
pass
Interaction methods¶
These functions are not called periodically by CAMS, but manually by the operators to trigger certain actions. More can be defined provided by __pluginmethods__
is update accordingly.
def pause(self, *args, **kwargs):
"""Specific stop signal just for the AVBPMission plugin
You can activate this method manually with:
curl -v "http://127.0.0.1:8000/runtime/call_method/?uav_id=200&plugin=AVBPMission&method=pause
or browsing to http://127.0.0.1:8000/rpc (Call UAV plugin method)
"""
pass
def play(self, *args, **kwargs):
"""Specific start signal just for the AVBPMission plugin
You can activate this method manually with:
curl -v "http://127.0.0.1:8000/runtime/call_method/?uav_id=200&plugin=AVBPMission&method=play
or browsing to http://127.0.0.1:8000/rpc (Call UAV plugin method)
"""
pass
Available commands¶
The self
argument of every plugin method (declared in __pluginmethods__
) is the AircraftPprz from nephelae_paparazzi the plugin is attached to.
Create a mission¶
_logger.debug("Create a 'Goto' test mission")
goto_mission_params = {"wp_east": 500.0, "wp_north": 300.0, "wp_alt": 500.0}
mission = self.create_mission('Goto', insertMode=InsertMode.ReplaceAll,
**goto_mission_params)
_logger.debug("mission %s created", mission)
_logger.debug("Create a 'Segment' test mission")
segment_mission_params = {"segment_east_1": 500.0, "segment_north_1": 300.0,
"segment_east_2": 300.0, "segment_north_2": 500.0,
"segment_alt": 500.0}
mission = self.create_mission('Segment', insertMode=InsertMode.Append,
**segment_mission_params)
_logger.debug("mission %s created", mission)
These missions can either be validated with the gui (operator) OR
Updated by Rafael Bailon-Ruiz over 3 years ago · 13 revisions