Hello everybody, hope you are all doing well.
I am doing in a project in which I receive GPS data (Longitude, and Latitude) from an Android device via an SQL server. What I am trying to do is to send this Longitude - Latitude data to my SITL vehicle in Ardupilot. I thought about using Dronekit Python API as such:
from dronekit import connect, VehicleMode import time import mysql.connector import time #--- Start the Software In The Loop (SITL) import dronekit_sitl # sitl = dronekit_sitl.start_default() #(sitl.start) #connection_string = sitl.connection_string() mydb = mysql.connector.connect( host="******", user="******", password="*****", database="koordinat" ) mycursor = mydb.cursor() #--- Now that we have started the SITL and we have the connection string (basically the ip and udp port)... print("Araca bağlanılıyor") vehicle = connect('tcp:127.0.0.1:5762', wait_ready=False, baud = 115200) vehicle.wait_ready(True, raise_exception=False) #-- Read information from the autopilot: #- Version and attributes vehicle.wait_ready('autopilot_version') print('Autopilot version: %s'%vehicle.version) #- Does the firmware support the companion pc to set the attitude? print('Supports set attitude from companion: %s'%vehicle.capabilities.set_attitude_target_local_ned) vehicle.mode = VehicleMode("GUIDED") vehicle.armed = True while(True): mycursor.execute("SELECT * FROM koordinat WHERE 1") location = str(mycursor.fetchall()) location = location.split(",") location[0] = location[0].replace("[", "") location[0] = location[0].replace("(", "") location[0] = location[0].replace("'", "") location[1] = location[1].replace("[", "") location[1] = location[1].replace(")", "") location[1] = location[1].replace("'", "") location[1] = location[1].replace(")", "") # Converting the longitude and latitude to float, before assigning to the vehicle GPS data: location[0] = float(location[0]) location[1] = float(location[1]) # Setting the location of the vehicle: vehicle.location.global_frame.lat = location[0] vehicle.location.global_frame.lon = location[1] print('Konum:', str(vehicle.location.global_frame.lat)+str(","), str(vehicle.location.global_frame.lon)+str(","), str(vehicle.location.global_frame.alt)) #- When did we receive the last heartbeat print('Son bilgi gelişi: %s'%vehicle.last_heartbeat) time.sleep(1)
However, when I check from the SITL and Mission Planner (also from the print statement from my code) the location does not change; the simulator simply ignores those commands sent by the Dronekit. Is there a working method to accomplish what I am trying to do? I tried to change the sim_vehicle.py script which I use to start the simulation on SITL. But I was only able to change the starting/home location of the vehicle. I was not able to change the current location of the vehicle on SITL and Mission Planner.
Since I receive the Longitude and Latitude information from an SQL server via. Python, I need to be able to send these GPS inputs on Python. Can you show me a way to do that; if it is possible to accomplish that on Dronekit, what should my message be like?
I asked about this on the Discord channel, and I was told that I may use GPS_INPUT for that purpose, however I could not figure that out because I was not able to find a similar example online.