@@ -47,7 +47,7 @@ typedef enum
4747{
4848 RATE, // Channel is is in rate mode (mrad/s)
4949 ANGLE, // Channel command is in angle mode (mrad)
50- THROTTLE, // Channel is direcly controlling throttle max/1000
50+ THROTTLE, // Channel is controlling throttle setting, which will be converted to force
5151 PASSTHROUGH, // Channel directly passes PWM input to the mixer
5252} control_type_t ;
5353
@@ -58,13 +58,22 @@ typedef struct
5858 float value; // The value of the channel
5959} control_channel_t ;
6060
61+ typedef enum
62+ {
63+ X_AXIS,
64+ Y_AXIS,
65+ Z_AXIS,
66+ } rc_f_axis_t ;
67+
6168typedef struct
6269{
6370 uint32_t stamp_ms;
64- control_channel_t x;
65- control_channel_t y;
66- control_channel_t z;
67- control_channel_t F;
71+ control_channel_t Qx;
72+ control_channel_t Qy;
73+ control_channel_t Qz;
74+ control_channel_t Fx;
75+ control_channel_t Fy;
76+ control_channel_t Fz;
6877} control_t ;
6978
7079class CommandManager : public ParamListenerInterface
@@ -77,38 +86,50 @@ class CommandManager : public ParamListenerInterface
7786 control_channel_t * combined;
7887 } mux_t ;
7988
80- mux_t muxes[4 ] = {{&rc_command_.x , &offboard_command_.x , &combined_command_.x },
81- {&rc_command_.y , &offboard_command_.y , &combined_command_.y },
82- {&rc_command_.z , &offboard_command_.z , &combined_command_.z },
83- {&rc_command_.F , &offboard_command_.F , &combined_command_.F }};
89+ mux_t muxes[6 ] = {{&rc_command_.Qx , &offboard_command_.Qx , &combined_command_.Qx },
90+ {&rc_command_.Qy , &offboard_command_.Qy , &combined_command_.Qy },
91+ {&rc_command_.Qz , &offboard_command_.Qz , &combined_command_.Qz },
92+ {&rc_command_.Fx , &offboard_command_.Fx , &combined_command_.Fx },
93+ {&rc_command_.Fy , &offboard_command_.Fy , &combined_command_.Fy },
94+ {&rc_command_.Fz , &offboard_command_.Fz , &combined_command_.Fz }};
8495
8596 // clang-format off
8697 control_t rc_command_ = {0 ,
8798 {false , ANGLE, 0.0 },
8899 {false , ANGLE, 0.0 },
89100 {false , RATE, 0.0 },
101+ {false , THROTTLE, 0.0 },
102+ {false , THROTTLE, 0.0 },
90103 {false , THROTTLE, 0.0 }};
91104 control_t offboard_command_ = {0 ,
92105 {false , ANGLE, 0.0 },
93106 {false , ANGLE, 0.0 },
94107 {false , RATE, 0.0 },
108+ {false , THROTTLE, 0.0 },
109+ {false , THROTTLE, 0.0 },
95110 {false , THROTTLE, 0.0 }};
96111 control_t combined_command_ = {0 ,
97112 {false , ANGLE, 0.0 },
98113 {false , ANGLE, 0.0 },
99114 {false , RATE, 0.0 },
115+ {false , THROTTLE, 0.0 },
116+ {false , THROTTLE, 0.0 },
100117 {false , THROTTLE, 0.0 }};
101118
102119 control_t multirotor_failsafe_command_ = {0 ,
103120 {true , ANGLE, 0.0 },
104121 {true , ANGLE, 0.0 },
105122 {true , RATE, 0.0 },
123+ {true , THROTTLE, 0.0 },
124+ {true , THROTTLE, 0.0 },
106125 {true , THROTTLE, 0.0 }};
107126 control_t fixedwing_failsafe_command_ = {0 ,
108127 {true , PASSTHROUGH, 0.0 },
109128 {true , PASSTHROUGH, 0.0 },
110129 {true , PASSTHROUGH, 0.0 },
111- {true , THROTTLE, 0.0 }};
130+ {true , PASSTHROUGH, 0.0 },
131+ {true , PASSTHROUGH, 0.0 },
132+ {true , PASSTHROUGH, 0.0 }};
112133 // clang-format on
113134
114135 typedef enum
@@ -119,10 +140,12 @@ class CommandManager : public ParamListenerInterface
119140
120141 enum MuxChannel
121142 {
122- MUX_X,
123- MUX_Y,
124- MUX_Z,
125- MUX_F,
143+ MUX_QX,
144+ MUX_QY,
145+ MUX_QZ,
146+ MUX_FX,
147+ MUX_FY,
148+ MUX_FZ,
126149 };
127150
128151 typedef struct
@@ -138,7 +161,8 @@ class CommandManager : public ParamListenerInterface
138161 ROSflight & RF_;
139162
140163 bool new_command_;
141- bool rc_override_;
164+ bool rc_throttle_override_;
165+ bool rc_attitude_override_;
142166
143167 control_t & failsafe_command_;
144168
@@ -157,6 +181,8 @@ class CommandManager : public ParamListenerInterface
157181 void init ();
158182 bool run ();
159183 bool rc_override_active ();
184+ bool rc_throttle_override_active ();
185+ bool rc_attitude_override_active ();
160186 bool offboard_control_active ();
161187 void set_new_offboard_command (control_t new_offboard_command);
162188 void set_new_rc_command (control_t new_rc_command);
0 commit comments