Setting Home and/or EKF origin¶
This page explains how MAVLink can be used by a ground station or companion computer to get or set the home or EKF origin.
Home vs EKF Origin¶
The vehicles “Home” position is the location (specified as a latitude, longitude and altitude above sea level) that the vehicle will return to in RTL mode. For most vehicles this location is set to the vehicle’s current location each time the vehicle is armed but it may also be moved at any time. Moving home can be useful in situations where the user wishes RTL mode to return the vehicle to a different location than it took off from.
The “EKF origin” is the location that the EKF (aka AHRS) uses for internal calculations. This location is normally set to the vehicle’s location soon after the GPS provides a good quality location. Once set the EKF origin cannot be moved. Users are not normally aware of the EKF origin’s location unless they are using Non-GPS navigation on a vehicle with no GPS attached (without a GPS, the user must specify the EKF origin using the ground station).
Whenever the Home or EKF origin is updated the vehicle will send a HOME_POSITION or GPS_GLOBAL_ORIGIN message (respectively) on all active mavlink channels.
The home will also be sent in response to a MAV_CMD_GET_HOME_POSITION sent within a COMMAND_LONG or COMMAND_INT message.
MAV_CMD_DO_SET_HOME within COMMAND_INT¶
Set the home location by sending a COMMAND_INT with the command and parameter fields set as specified for the MAV_CMD_DO_SET_HOME command.
Command Field | Type | Description |
---|---|---|
target_system | uint8_t | System ID |
target_component | uint8_t | Component ID of flight controller or just 0 |
frame | uint8_t | MAV_FRAME_GLOBAL=0 |
command | uint16_t | MAV_CMD_DO_SET_HOME=179 |
current | uint8_t | 0 (not used) |
autocontinue | uint8_t | 0 (not used) |
param1 | float | 1=use current location, 0=use specified location |
param2 | float | not used |
param3 | float | not used |
param4 | float | not used | param5 | int32_t | Latitude in degrees * 10^7 | param6 | int32_t | Longitude in degrees * 10^7 | param7 | float | Altitude in meters |
Examples
The example commands below can be copy-pasted into MAVProxy (aka SITL) to test this command. Before running these commands enter, “module load message”
Example MAVProxy/SITL Command |
Description |
---|---|
|
set home to the vehicle’s current location |
|
set home to the specified location |
MAV_CMD_DO_SET_HOME within COMMAND_LONG¶
Set the home location by sending a COMMAND_LONG with the command and parameter fields set as specified for the MAV_CMD_DO_SET_HOME command. Note that this method sets the home position with less accuracy than the COMMAND_INT method from above.
Command Field | Type | Description |
---|---|---|
target_system | uint8_t | System ID |
target_component | uint8_t | Component ID of flight controller or just 0 |
command | uint16_t | MAV_CMD_DO_SET_HOME=179 |
confirmation | uint8_t | 0 |
param1 | float | 1=use current location, 0=use specified location |
param2 | float | not used |
param3 | float | not used |
param4 | float | not used | param5 | float | Latitude in degrees | param6 | float | Longitude in degrees | param7 | float | Altitude in meters |
Examples
The example commands below can be copy-pasted into MAVProxy (aka SITL) to test this command. Before running these commands enter, “module load message”
Example MAVProxy/SITL Command |
Description |
---|---|
|
set home to the vehicle’s current location |
|
set home to the specified location |
SET_GPS_GLOBAL_ORIGIN¶
Sets the location used by the EKF/AHRS for internal calculations. This location is normally automatically set soon after the GPS first returns a good location. The operator may be required to set this manually if Non-GPS navigation is used. Once set the EKF origin cannot be moved.
The message definition can be found here
Command Field | Type | Description |
---|---|---|
target_system | uint8_t | System ID |
latitude | int32_t | Latitude * 1e7 |
longitude | int32_t | Longitude * 1e7 |
altitude | int32_t | Altitude above sea level in millimeters (i.e. meters * 1000) |
time_usec | uint64_t | Timestamp (UNIX Epoch time or time since system boot) in microseconds (us) |
Example
The example command below can be copy-pasted into MAVProxy (aka SITL) to test this command. Before running these commands enter the following
module load message
param set EK3_SRC1_POSXY 0
param set EK3_SRC1_VELXY 0
param set EK3_SRC1_VELZ 0
Example MAVProxy/SITL Command |
Description |
---|---|
|
set EKF origin to lat,lon of -35.36,149.16 and 600m above sea level |