Author: openrobots@laas.fr

# uavpos component

openrobots@laas.fr
1.4

## Ports

### uav_input (out)

Data structure `struct ::or_uav::input` `uav_input` `struct ::or::time::ts` `ts` `long` `sec` `long` `nsec` `boolean` `intrinsic` `optional< struct ::or::rb3d::force >` `thrust` `double` `x` `double` `y` `double` `z` `optional< struct ::or::t3d::att >` `att` `double` `qw` `double` `qx` `double` `qy` `double` `qz` `optional< struct ::or::t3d::avel >` `avel` `double` `wx` `double` `wy` `double` `wz` `optional< struct ::or::t3d::aacc >` `aacc` `double` `awx` `double` `awy` `double` `awz`

Attitude/thrust control input.

### wrench_measure (in)

Data structure `struct ::or_wrench_estimator::state` `wrench_measure` `struct ::or::time::ts` `ts` `long` `sec` `long` `nsec` `boolean` `intrinsic` `optional< struct ::or::rb3d::force >` `force` `double` `x` `double` `y` `double` `z` `optional< struct ::or::rb3d::force_cov >` `force_cov` `double` `cov[6]` `optional< struct ::or::rb3d::torque >` `torque` `double` `x` `double` `y` `double` `z` `optional< struct ::or::rb3d::torque_cov >` `torque_cov` `double` `cov[6]`

Provides current wrench measurements.

This port contains the current wrench exerted by the UAV according to the propeller measurements and the geometric model.

### state (in)

Data structure `struct ::or_pose_estimator::state` `state` `struct ::or::time::ts` `ts` `long` `sec` `long` `nsec` `boolean` `intrinsic` `optional< struct ::or::t3d::pos >` `pos` `double` `x` `double` `y` `double` `z` `optional< struct ::or::t3d::att >` `att` `double` `qw` `double` `qx` `double` `qy` `double` `qz` `optional< struct ::or::t3d::vel >` `vel` `double` `vx` `double` `vy` `double` `vz` `optional< struct ::or::t3d::avel >` `avel` `double` `wx` `double` `wy` `double` `wz` `optional< struct ::or::t3d::acc >` `acc` `double` `ax` `double` `ay` `double` `az` `optional< struct ::or::t3d::aacc >` `aacc` `double` `awx` `double` `awy` `double` `awz` `optional< struct ::or::t3d::pos_cov >` `pos_cov` `double` `cov[6]` `optional< struct ::or::t3d::att_cov >` `att_cov` `double` `cov[10]` `optional< struct ::or::t3d::att_pos_cov >` `att_pos_cov` `double` `cov[12]` `optional< struct ::or::t3d::vel_cov >` `vel_cov` `double` `cov[6]` `optional< struct ::or::t3d::avel_cov >` `avel_cov` `double` `cov[6]` `optional< struct ::or::t3d::acc_cov >` `acc_cov` `double` `cov[6]` `optional< struct ::or::t3d::aacc_cov >` `aacc_cov` `double` `cov[6]`

### reference (in)

Data structure `struct ::or_rigid_body::state` `reference` `struct ::or::time::ts` `ts` `long` `sec` `long` `nsec` `boolean` `intrinsic` `optional< struct ::or::t3d::pos >` `pos` `double` `x` `double` `y` `double` `z` `optional< struct ::or::t3d::att >` `att` `double` `qw` `double` `qx` `double` `qy` `double` `qz` `optional< struct ::or::t3d::vel >` `vel` `double` `vx` `double` `vy` `double` `vz` `optional< struct ::or::t3d::avel >` `avel` `double` `wx` `double` `wy` `double` `wz` `optional< struct ::or::t3d::acc >` `acc` `double` `ax` `double` `ay` `double` `az` `optional< struct ::or::t3d::aacc >` `aacc` `double` `awx` `double` `awy` `double` `awz` `optional< struct ::or::t3d::jerk >` `jerk` `double` `jx` `double` `jy` `double` `jz` `optional< struct ::or::t3d::snap >` `snap` `double` `sx` `double` `sy` `double` `sz`

## Services

### set_saturation (attribute)

Inputs `struct ::uavpos::ids::servo_s::sat_s` `sat` `double` `x` `double` `v` `double` `ix`

### set_servo_gain (attribute)

Inputs `struct ::uavpos::ids::servo_s::gain_s` `gain` `double` `Kpxy` `double` `Kpz` `double` `Kvxy` `double` `Kvz` `double` `Kixy` `double` `Kiz`

### set_mass (attribute)

Inputs `double` `mass`

### set_xyradius (attribute)

Inputs `double` `rxy` Maximum lateral thrust (N)

### set_emerg (attribute)

Inputs `struct ::uavpos::ids::servo_s::emerg_s` `emerg` `double` `descent` (default `"0.1"`) Vertical acceleration for emergency descent (m/s²) `double` `dx` (default `"0.05"`) Position uncertainty threshold (m) `double` `dv` (default `"0.2"`) Linear velocity uncertainty threshold (m/s)

Set thresholds for emergency descent.

`dx` and `dv` represent the maximum uncertainty tolerated in the input state (in) for position (`dx`) and linear velocity (`dv`), measured as 3 times the standard deviation. By default, `dx` is 5cm and `dv` 20cm/s. Beyond that threshold, an emergency descent is started.

As long as the emergency descent is active, the position error or linear velocity error are cancelled (i.e. the desired roll and pitch are set to 0) and a vertical acceleration of `descent` (by default -0.1 m/s²) is requested. The descent is based on the mass only, with no feedback, as the state is considered invalid.

### get_servo_parameters (attribute)

Outputs `struct ::uavpos::ids::servo_s` `servo` `struct ::uavpos::ids::servo_s::sat_s` `sat` `double` `x` `double` `v` `double` `ix` `struct ::uavpos::ids::servo_s::gain_s` `gain` `double` `Kpxy` `double` `Kpz` `double` `Kvxy` `double` `Kvz` `double` `Kixy` `double` `Kiz` `struct ::uavpos::ids::servo_s::emerg_s` `emerg` `double` `descent` `double` `dx` `double` `dv`

### get_body_parameters (attribute)

Outputs `struct ::uavpos::ids::body_s` `body` `double` `mass` `double` `rxy`

### get_reference (function)

Outputs `struct ::or_rigid_body::state` `reference` `struct ::or::time::ts` `ts` `long` `sec` `long` `nsec` `boolean` `intrinsic` `optional< struct ::or::t3d::pos >` `pos` `double` `x` `double` `y` `double` `z` `optional< struct ::or::t3d::att >` `att` `double` `qw` `double` `qx` `double` `qy` `double` `qz` `optional< struct ::or::t3d::vel >` `vel` `double` `vx` `double` `vy` `double` `vz` `optional< struct ::or::t3d::avel >` `avel` `double` `wx` `double` `wy` `double` `wz` `optional< struct ::or::t3d::acc >` `acc` `double` `ax` `double` `ay` `double` `az` `optional< struct ::or::t3d::aacc >` `aacc` `double` `awx` `double` `awy` `double` `awz` `optional< struct ::or::t3d::jerk >` `jerk` `double` `jx` `double` `jy` `double` `jz` `optional< struct ::or::t3d::snap >` `snap` `double` `sx` `double` `sy` `double` `sz`

### servo (activity)

Throws `exception ::uavpos::e_input`
Context In task `main` (frequency 1000.0 Hz) Reads port `reference (in)`

Track a desired position

### set_state (function)

Inputs `struct ::or::t3d::pos` `pos`: Position `double` `x` `double` `y` `double` `z` `struct ::or::t3d::att` `att`: Orientation `double` `qw` `double` `qx` `double` `qy` `double` `qz` `struct ::or::t3d::vel` `vel`: Linear velocity `double` `vx` `double` `vy` `double` `vz` `struct ::or::t3d::avel` `avel`: Angular velocity `double` `wx` `double` `wy` `double` `wz` `struct ::or::t3d::acc` `acc`: Acceleration `double` `ax` `double` `ay` `double` `az` `struct ::or::t3d::aacc` `aacc`: Angular acceleration `double` `awx` `double` `awy` `double` `awz` `struct ::or::t3d::jerk` `jerk`: Linear jerk `double` `jx` `double` `jy` `double` `jz` `struct ::or::t3d::snap` `snap`: Linear snap `double` `sx` `double` `sy` `double` `sz`
Context Interrupts `servo (activity)`

Set the desired state

### set_position (function)

Inputs `double` `x` `double` `y` `double` `z` `double` `yaw`
Context Interrupts `servo (activity)`

Set the desired position

### set_current_position (activity)

Throws `exception ::uavpos::e_input`
Context In task `main` (frequency 1000.0 Hz) Reads port `state (in)` Interrupts `servo (activity)`

Set the desired position

### set_velocity (function)

Inputs `double` `x` `double` `y` `double` `z` `double` `yaw`
Context Interrupts `servo (activity)`

Set the desired velocity

The controller will try to reach the given velocity and heading angular velocity. Note that for safety reasons, a watchdog will trigger after 500ms and reset the target velocity to zero.

### hover (function)

Context Interrupts `servo (activity)`

Stop tracking a desired position

This sets the current reference velocity and acceleration to 0, maintaining the current position and heading. Any dynamic reference tracking is cancelled (see servo (activity)).

### reset (function)

Context Interrupts `servo (activity)`

Stop control loop and wait for a new valid reference

This function is meant to reset the controller and stop controlling the robot. The component returns to the same state as when it is started, waiting for a first reference state provided either with set_state (function), set_position (function), set_velocity (function) or servo (activity) to track a dynamic reference.

### log (function)

Inputs `string<64>` `path` (default `"/tmp/uavpos.log"`) Log file name `unsigned long` `decimation` (default `"1"`) Reduced logging frequency
Throws `exception ::uavpos::e_sys` `short` `code` `string<128>` `what`

Log controller data

### log_stop (function)

Stop logging

### log_info (function)

Outputs `unsigned long` `miss` Missed log entries `unsigned long` `total` Total log entries

Show missed log entries

## Tasks

### main

Context Frequency 1000.0 Hz Updates port `uav_input (out)` Reads port `state (in)`