knowledge_map/log 实训.md
2021-01-22 17:53:54 +08:00

130 lines
6.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# log 实训
## log简介
**log的定义**:日志是将软件运行的状态、过程等信息,输出到不同的介质中(例如:文件、控制台、显示屏等),并进行显示和保存。为软件调试、维护过程中的问题追溯、性能分析、系统监控、故障预警等功能,提供参考依据。可以说,日志的使用,几乎占用的软件生命周期的至少 80% 的时间。
**log的重要性**:对于操作系统而言,由于其软件的复杂度非常大,单步调试在一些场景下并不适合,所以日志组件在操作系统上几乎都是标配。完善的日志系统也能让操作系统的调试事半功倍.
**log的作用**
* *** 确定程序的运行路径 *** 一个函数有没有被调用,一个 if 块有没有被执行,一个 while 循环执行了几次,到了哪一步中断了,都可以通过 输出出相关信息来查看。
* *** 查看变量的状态 *** 程序自身的报错会告诉你发生了什么错误,但你还需要找出为什么会发生错误。**通过 log输出出错语句涉及到的相关变量的值和类型**,可以帮助分析出错原因。
* *** 找出出错位置 *** 往往错误的原因并不在报错的位置,所以多输出一些标记,多 输出不同位置的变量值,**查看变量在运行过程中值的变化情况**,可以观察是在哪里发生了问题。
## px4 log使用
### 代码添加log输出
在飞控开发过程中可以使用以下代码进行log调试根据不同的错误级别在相应的部分插入相应的信息。不同的信息代表不同的情况info一般用来表示重要功能完成了。warn表示发生异常但不影响系统使用err代表使用已经影响到了系统的工作必须马上解决问题。
```c++
PX4_INFO("输出需要的数据");
PX4_WARN(" 输出警告信息");
PX4_ERR("输出错误信息" );
```
在代码的需要的位置插入这三种log输出代码原则如下
**多输出一些辅助信息**,方便自己查看,不然一堆数据看花眼。一般输出时会标注上**变量名,再输出变量类型,以及变量的值**
**在出错行之前输出**。报错行涉及的一些变量,把他们的数值和类型,全都输出出来,看看和预期是否一致。
**一行做一件事 **。如果你出错的一行里连续调用了多个函数或运算,要分开写,分开输出。
### nsh调试
debug方式主要分仿真器调试和真机调试一般都是先进行软件仿真调试再进行真机调试。二者调试时的终端都会输出log信息。根据输出的log信息可以快速定位问题所在。也可以在把编译生成的固件写入飞控之后飞控连接[QGC地面站][http://qgroundcontrol.com/ ]之后打开mavlink console也可以运行自己所写的module.仿真器和QGC地面站都可以输入help来查看有效的命令和语法.这里以px4_simple_app为例,下图是在jmavsim仿真器运行px4_simple_app时所输出的log信息。
![image-20210122161137944](C:\Users\ASUS\Desktop\mymarkdown\images\image-20210122161137944.png)
![image-20210122154447764](C:\Users\ASUS\Desktop\mymarkdown\images\image-20210122154447764.png)
### 日志分析
px4 的logger会把订阅的uorb消息记录成.ulg文件存在SD卡中
px4还有一个logger功能,默认情况下飞机解锁之后就会开始记录日志,飞机锁定之后停止记录日志.也可以在终端使用logger on手动开启.logger off停止记录.日志记录的主要内容为飞行数据和debug信息记录的日志文件可以用于对飞机的系统和飞行性能的评估、调整和事故分析.日志的格式是ulog.记录的日志文件会存储成.ulg文件存在SD卡中.可以安装使用pyulog查看日志信息.
pyulog安装方法
```shell
git clone https://github.com/PX4/pyulog.git
cd pyulog
python setup.py build install
```
pyulog常用命令
```shell
ulog2csv sample.ulg //将sample.ulg文件转成.csv文件这些文件可以使用excel打开
ulog_messgaes sample.ulg //查看ulog中的uorb的消息
ulog_info sample.ulg //显示sample.ulg记录的信息
ulog_params sample.ulg //查看sample.ulg文件的参数
```
下方是ulg文件转成csv后的几个比较重要的文件和所记录的信息。
airspeed_0.csv 存放了飞行的指示空速和滤波前后的真空速
vehicle_attitude_0.csv 存放了四元数及pqr
vehicle_attitude_setpoint_0.csv 存放了期望的姿态角及四元数、油门信息
tecs_status_0.csv 存放了滤波后的高度、速度、加速度信息及期望的高度、速度、加速度信息以及跟总能量有关的一些参数
actuator_outputs_0.csv、actuator_outputs_1.csv 存放了输出混控器的pwm信号其中0是main out 1是aux out分别由主处理器和协处理器输出
actuator_controls_0_0.csv 存放了输入混控器的归一化数据
ekf2 两个文件中存放着互补滤波的数据更新
home_position_0.csv 存放着地面站所在位置
日志记录的消息主题也可以自己定义的,通过创建SD卡中的etc/logging/logger_topics.txt文件可以自定义记录需要的日志消息主题.一旦使用这个文件就会自动替换全部的默认主题.文件内容格式如下.
```text
<topic_name> <interval> <instance>
```
topic_name 就是所要订阅的消息主题的名称
interval 是消息之间的间隔.如果指定了则定义该主题的两条日志消息之间的最小间隔单位为ms。如果不指定则以全速率记录该主题.
instance是消息的实例,如果不指定就记录该消息主题的所有实例,指定就记录相应的实例.如果不指定就记录该消息主题的所有实例.
例子如下
```text
sensor_accel 0 0
sensor_accel 100 1
sensor_gyro 200
sensor_mag 200 1
```
使用前的记录的数据
![image-20210122174608467](C:\Users\ASUS\Desktop\mymarkdown\images\image-20210122174608467.png)
替换后的数据
![image-20210122174633579](C:\Users\ASUS\Desktop\mymarkdown\images\image-20210122174633579.png)