aboutsummaryrefslogtreecommitdiff
path: root/apps/multirotor_att_control/multirotor_att_control_main.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/multirotor_att_control/multirotor_att_control_main.c')
-rw-r--r--apps/multirotor_att_control/multirotor_att_control_main.c37
1 files changed, 19 insertions, 18 deletions
diff --git a/apps/multirotor_att_control/multirotor_att_control_main.c b/apps/multirotor_att_control/multirotor_att_control_main.c
index f3c0746e0..ba7f08bc8 100644
--- a/apps/multirotor_att_control/multirotor_att_control_main.c
+++ b/apps/multirotor_att_control/multirotor_att_control_main.c
@@ -91,12 +91,12 @@ static void *rate_control_thread_main(void *arg)
struct actuator_controls_s actuators;
- int gyro_sub = orb_subscribe(ORB_ID(sensor_gyro));
+ int att_sub = orb_subscribe(ORB_ID(vehicle_attitude));
int rates_sp_sub = orb_subscribe(ORB_ID(vehicle_rates_setpoint));
- struct pollfd fds = { .fd = gyro_sub, .events = POLLIN };
+ struct pollfd fds = { .fd = att_sub, .events = POLLIN };
- struct gyro_report gyro_report;
+ struct vehicle_attitude_s vehicle_attitude;
struct vehicle_rates_setpoint_s rates_sp;
memset(&rates_sp, 0, sizeof(rates_sp));
float gyro_lp[3] = {0.0f, 0.0f, 0.0f};
@@ -104,16 +104,17 @@ static void *rate_control_thread_main(void *arg)
while (!thread_should_exit) {
/* rate control at maximum rate */
/* wait for a sensor update, check for exit condition every 1000 ms */
-// int ret = poll(&fds, 1, 1000);
-//
-// if (ret < 0) {
-// /* XXX this is seriously bad - should be an emergency */
-// } else if (ret == 0) {
-// /* XXX this means no sensor data - should be critical or emergency */
-// printf("[mc att control] WARNING: Not getting gyro data, no rate control\n");
-// } else {
- /* get data */
- orb_copy(ORB_ID(sensor_gyro), gyro_sub, &gyro_report);
+ int ret = poll(&fds, 1, 1000);
+
+ if (ret < 0) {
+ /* XXX this is seriously bad - should be an emergency */
+ } else if (ret == 0) {
+ /* XXX this means no sensor data - should be critical or emergency */
+ printf("[mc att control] WARNING: Not getting gyro data, no rate control\n");
+ } else {
+ /* get current angular rate */
+ orb_copy(ORB_ID(vehicle_attitude), att_sub, &vehicle_attitude);
+ /* get current rate setpoint */
bool rates_sp_valid = false;
orb_check(rates_sp_sub, &rates_sp_valid);
if (rates_sp_valid) {
@@ -126,14 +127,14 @@ static void *rate_control_thread_main(void *arg)
if (state.flag_control_rates_enabled) {
/* lowpass gyros */
// XXX
- gyro_lp[0] = gyro_report.x;
- gyro_lp[1] = gyro_report.y;
- gyro_lp[2] = gyro_report.z;
+ gyro_lp[0] = vehicle_attitude.rollspeed;
+ gyro_lp[1] = vehicle_attitude.pitchspeed;
+ gyro_lp[2] = vehicle_attitude.yawspeed;
multirotor_control_rates(&rates_sp, gyro_lp, &actuators);
orb_publish(ORB_ID_VEHICLE_ATTITUDE_CONTROLS, actuator_pub, &actuators);
}
-// }
+ }
usleep(2000);
}
@@ -355,7 +356,7 @@ int multirotor_att_control_main(int argc, char *argv[])
mc_task = task_spawn("multirotor_att_control",
SCHED_RR,
SCHED_PRIORITY_MAX - 15,
- 2048,
+ 4096,
mc_thread_main,
NULL);
exit(0);