https://github.com/tudelft/paparazzi
Tip revision: f8bc50707e3e36ead903000b6ca58e54663cac0e authored by Dennis van Wijngaarden on 25 March 2024, 13:11:57 UTC
[rot_wing] fix pusher motor effectiveness
[rot_wing] fix pusher motor effectiveness
Tip revision: f8bc507
settings_tool.py
#!/usr/bin/env python
from __future__ import absolute_import, print_function
from ivy.std_api import *
import logging
import sys
import pprz_env
sys.path.append(pprz_env.PAPARAZZI_SRC + "/sw/lib/python")
from settings_xml_parse import PaparazziACSettings
_SHOW_IVY_MSGS_ = False
class IvySettingsInterface(PaparazziACSettings):
def __init__(self, ac_ids):
PaparazziACSettings.__init__(self, ac_ids[0])
self.update_callback = None
self.InitIvy()
self.ac_ids = ac_ids
def ProcessMessage(self, message_values, fromRemote):
# Extract aircraft id from message and ignore if not matching
msg_ac_id = int(message_values[0])
if (msg_ac_id != self.ac_ids[0]):
return
# Extract setting value
setting_index = int(message_values[1])
setting_value = message_values[2]
if _SHOW_IVY_MSGS_:
print("Got setting with index: %s value %s " % (setting_index, setting_value))
# Store value from message
self.lookup[setting_index].value = setting_value
# Callback (if present)
if self.update_callback != None:
self.update_callback(setting_index, setting_value, fromRemote)
# Called for DL_VALUE (from aircraft)
def OnValueMsg(self, agent, *larg):
# Extract field values
message_values = list(filter(None, larg[0].split(' ')))
message_values = message_values[0:1] + message_values[2:]
self.ProcessMessage(message_values, True)
# Called for DL_SETTING (from ground)
def OnSettingMsg(self, agent, *larg):
# Extract field values
message_values = list(filter(None, larg[0].split(' ')))
self.ProcessMessage(message_values, False)
def RegisterCallback(self, callback_function):
self.update_callback = callback_function
def InitIvy(self):
# initialising the bus
IvyInit("settings_app", # application name for Ivy
"", # ready message
0, # main loop is local (ie. using IvyMainloop)
lambda x,y: y, # handler called on connection/deconnection
lambda x,y: y # handler called when a diemessage is received
)
# starting the bus
logging.getLogger('Ivy').setLevel(logging.WARN)
IvyStart(pprz_env.IVY_BUS)
IvyBindMsg(self.OnValueMsg, "(^.* DL_VALUE .*)")
IvyBindMsg(self.OnSettingMsg, "dl DL_SETTING (.*)")
def SendSetting(self, setting_index):
for ac_id in self.ac_ids:
IvySendMsg("dl DL_SETTING %s %s %s" % (ac_id, setting_index, self.lookup[setting_index].value))
def OnClose(self):
IvyStop()
def main():
ac_id = [ 11 ]
ivy_interface = IvySettingsInterface(ac_id)
if __name__ == '__main__':
main()