在px4的姿态控制中,publish控制量时代码乘以了一个_battery_status.scale,
/* scale effort by battery status */
if (_params.bat_scale_en && _battery_status.scale > 0.0f) {
for (int i = 0; i < 4; i++) {
_actuators.control[i] *= _battery_status.scale;
}
}
不知道代表什么意思,于是想办法把它打印出来,借用洛神提供的ubantu14.04编译环境,地址(https://github.com/luoshi006/luoshi006_communication/blob/master/CSDN_blog/PX4/PX4%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83%EF%BC%88Ubuntu%201404%EF%BC%89.md),这个编译环境提供了很多有用的工具。这里采用px4提供的px4_simple_app打印,编译上传到飞控后,将飞控和地面站qgc连接;将电池经降压模块降压后连接到飞控,通过地面站的nsh运行px4_simple_app输出结果输出结果
代码:
__EXPORT int px4_simple_app_main(int argc, char *argv[]);
int px4_simple_app_main(int argc, char *argv[])
{
PX4_INFO("Hello Sky!");
int _actuators_0_sub = orb_subscribe(ORB_ID(actuator_controls_0));
int _battery_status_sub = orb_subscribe(ORB_ID(battery_status));
struct battery_status_s _battery_status;
struct actuator_controls_s _actuators01;
orb_copy(ORB_ID(battery_status), _battery_status_sub, &_battery_status);
orb_copy(ORB_ID(actuator_controls_0), _actuators_0_sub, &_actuators01);
bool updated;
orb_check(_battery_status_sub, &updated);
if (updated) {
orb_copy(ORB_ID(battery_status), _battery_status_sub, &_battery_status);
}
orb_check(_actuators_0_sub, &updated);
if (updated) {
orb_copy(ORB_ID(actuator_controls_0), _actuators_0_sub, &_actuators01);
}
static int error_counter = 1;
int counter =1;
while (counter < 2)
{
if (error_counter == 1)
{ error_counter ++;
}
else if (error_counter <= 500)
{ error_counter ++;
}
else
{ error_counter = 1;
counter++;
PX4_INFO("_actuators01.control:\t%8.4f\t%8.4f\t%8.4f\t%8.4f\n",
(double)_actuators01.control[0],
(double)_actuators01.control[1],
(double)_actuators01.control[2],
(double)_actuators01.control[3]);
PX4_INFO("_battery_status.scale:\t%8.4f\t%8.4f\n",
(double)_battery_status.scale ,
(double)_battery_status.voltage_filtered_v);
for (int i = 0; i < 4; i++){
PX4_INFO("_actuators01.control/_battery_status.scale:\t%8.4f\n",
(double)_actuators01.control[i]/(double)_battery_status.scale
);
}
}
}
PX4_INFO("exiting");
return 0;
}
截取的结果:
12.6V
INFO [px4_simple_app] _actuators01.control: -0.0273 -0.0129 -1.0473 0.0000
INFO [px4_simple_app] _battery_status.scale: 1.0909
INFO [px4_simple_app]_battery_status.voltage_filtered_v: 12.6546
12v(电压表测量结果)
INFO [px4_simple_app] _actuators01.control: -0.0256 -0.0145 -1.0472 0.0000
INFO [px4_simple_app] _battery_status.scale: 1.0909
INFO [px4_simple_app]_battery_status.voltage_filtered_v: 12.0855
11.55V
NFO [px4_simple_app] _actuators01.control: -0.0266 -0.0140 -1.0470 0.0000
INFO [px4_simple_app] _battery_status.scale: 1.0909
INFO [px4_simple_app]_battery_status.voltage_filtered_v: 11.6839
11.08V
INFO [px4_simple_app] _actuators01.control: -0.0262 -0.0149 -1.0470 0.0000
INFO [px4_simple_app] _battery_status.scale: 1.0909
INFO [px4_simple_app]_battery_status.voltage_filtered_v: 11.1986
10.53V
INFO [px4_simple_app] _actuators01.control: -0.0256 -0.0161 -1.0470 0.0000
INFO [px4_simple_app] _battery_status.scale: 1.0909
INFO [px4_simple_app]_battery_status.voltage_filtered_v: 10.6086
10.03v
INFO [px4_simple_app] _actuators01.control: -0.0258 -0.0161 -1.0470 0.0000
INFO [px4_simple_app] _battery_status.scale: 1.0909
INFO [px4_simple_app] _battery_status.voltage_filtered_v: 10.1130
9.50v
INFO [px4_simple_app] _actuators01.control: -0.0266 -0.0163 -1.0472 0.0000
INFO [px4_simple_app] _battery_status.scale: 1.0909
INFO [px4_simple_app]_battery_status.voltage_filtered_v: 9.5028
9.08v
INFO [px4_simple_app] _actuators01.control: -0.0289 -0.0146 -1.0475 0.0000
INFO [px4_simple_app] _battery_status.scale: 1.0909
INFO [px4_simple_app]_battery_status.voltage_filtered_v: 9.1377
无电池
INFO [px4_simple_app] _actuators01.control: -0.0247 -0.0161 -1.0472 0.0000
INFO [px4_simple_app] _battery_status.scale: 1.0000
INFO [px4_simple_app]_battery_status.voltage_filtered_v: 0.0000
(有时候会莫名其妙的显示INFO [px4_simple_app] _battery_status.scale: 0,找不到原因,出现这种情况后,可能摇一摇飞机就好,也可能就一直是0,不知道是bug还是什么原因,希望以后的深入学习会明白吧)
(虽然打印出来了结果,但还不明白为什么这么,可能希望控制量和电池情况有关吧)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)