繁体   English   中英

Ardupilot - 无人机套件设置车辆的当前位置

[英]Ardupilot - Dronekit Setting the Current Location of the Vehicle

大家好,希望你们一切都好。

我正在做一个项目,我通过 SQL 服务器从 Android 设备接收 GPS 数据(经度和纬度)。 我想做的是将这个经度 - 纬度数据发送到我在 Ardupilot 的 SITL 车辆。 我考虑过这样使用 Dronekit Python API:

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)

但是,当我从 SITL 和 Mission Planner(也从我的代码的打印语句)检查时,位置没有改变; 模拟器只是忽略了 Dronekit 发送的那些命令。 有没有一种工作方法可以完成我想做的事情? 我试图更改用于启动模拟的 sim_vehicle.py 脚本。 但我只能更改车辆的起始/起始位置。 我无法在 SITL 和 Mission Planner 上更改车辆的当前位置。

这是不正确的。 您正在修改连接到 SITL 的车辆 object 的属性,而不是向实际的自动驾驶仪发送任何命令。

vehicle.location.global_frame.lat = location[0]
vehicle.location.global_frame.lon = location[1]

你想要做的是将模式设置为 GUIDED 并使用 dronekit 中的simple_goto function 使无人机移动到 lat/lon/alt 坐标。

否则,您也可以发送此 MAVLink 命令SET_POSITION_TARGET_GLOBAL_INT来引导它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM