forked from ArduPilot/MAVProxy
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
5 changed files
with
704 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
''' | ||
AI Chat Module | ||
Randy Mackay, December 2023 | ||
This module allows MAVProxy to interface with OpenAI Assitants | ||
''' | ||
|
||
from MAVProxy.modules.lib import mp_module | ||
from MAVProxy.modules.lib import mp_settings | ||
from MAVProxy.modules.lib.mp_settings import MPSetting | ||
from MAVProxy.modules.lib import mp_util | ||
from MAVProxy.modules.lib.wx_loader import wx | ||
from MAVProxy.modules.mavproxy_chat import chat_window | ||
from threading import Thread | ||
from pymavlink import mavutil | ||
import time | ||
|
||
if mp_util.has_wxpython: | ||
from MAVProxy.modules.lib.mp_menu import MPMenuItem | ||
from MAVProxy.modules.lib.mp_menu import MPMenuSubMenu | ||
|
||
class chat(mp_module.MPModule): | ||
def __init__(self, mpstate): | ||
|
||
# call parent class | ||
super(chat, self).__init__(mpstate, "chat", "OpenAI chat support") | ||
|
||
# register module and commands | ||
self.add_command('chat', self.cmd_chat, "chat module", ["show"]) | ||
|
||
# add user settable settings | ||
self.chat_settings = mp_settings.MPSettings( | ||
[ ('verbose', bool, False), | ||
]) | ||
|
||
# keep reference to mpstate | ||
self.mpstate = mpstate | ||
|
||
# init mavlink message counters | ||
self.packets_mytarget = 0 | ||
self.packets_othertarget = 0 | ||
|
||
# add menu to map and console | ||
if mp_util.has_wxpython: | ||
menu = MPMenuSubMenu('Chat', | ||
items=[ | ||
MPMenuItem('Show', 'show', 'show chat input window'), | ||
]) | ||
map = self.module('map') | ||
if map is not None: | ||
map.add_menu(menu) | ||
console = self.module('console') | ||
if console is not None: | ||
console.add_menu(menu) | ||
|
||
# create chat window | ||
self.chat_window = chat_window.chat_window(self.mpstate) | ||
|
||
# show help on command line options | ||
def usage(self): | ||
return "Usage: chat <show>" | ||
|
||
# control behaviour of the module | ||
def cmd_chat(self, args): | ||
if len(args) == 0: | ||
print(self.usage()) | ||
elif args[0] == "show": | ||
self.show() | ||
else: | ||
print(self.usage()) | ||
|
||
# show chat input window | ||
def show(self): | ||
self.chat_window.show() | ||
|
||
# handle incoming mavlink packets | ||
def mavlink_packet(self, m): | ||
if m.get_type() == 'GLOBAL_POSITION_INT': | ||
if self.settings.target_system == 0 or self.settings.target_system == m.get_srcSystem(): | ||
self.packets_mytarget += 1 | ||
else: | ||
self.packets_othertarget += 1 | ||
|
||
# initialise module | ||
def init(mpstate): | ||
return chat(mpstate) |
Oops, something went wrong.