123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- #!/usr/bin/env python
- '''
- show MAVLink packet loss
- '''
- from __future__ import print_function
- from argparse import ArgumentParser
- parser = ArgumentParser(description=__doc__)
- parser.add_argument("--no-timestamps", dest="notimestamps", action='store_true', help="Log doesn't have timestamps")
- parser.add_argument("--planner", action='store_true', help="use planner file format")
- parser.add_argument("--robust", action='store_true', help="Enable robust parsing (skip over bad data)")
- parser.add_argument("--condition", default=None, help="condition for packets")
- parser.add_argument("--dialect", default="ardupilotmega", help="MAVLink dialect")
- parser.add_argument("logs", metavar="LOG", nargs="+")
- args = parser.parse_args()
- from pymavlink import mavutil
- def mavloss(logfile):
- '''work out signal loss times for a log file'''
- print("Processing log %s" % filename)
- mlog = mavutil.mavlink_connection(filename,
- planner_format=args.planner,
- notimestamps=args.notimestamps,
- dialect=args.dialect,
- robust_parsing=args.robust)
- # Track the reasons for MAVLink parsing errors and print them all out at the end.
- reason_ids = set()
- reasons = []
- while True:
- m = mlog.recv_match(condition=args.condition)
- # Stop parsing the file once we've reached the end
- if m is None:
- break
- # Save the parsing failure reason for this message if it's a new one
- if m.get_type() == 'BAD_DATA':
- reason_id = ''.join(m.reason.split(' ')[0:3])
- if reason_id not in reason_ids:
- reason_ids.add(reason_id)
- reasons.append(m.reason)
- # Print out the final packet loss results
- print("%u packets, %u lost %.1f%%" % (
- mlog.mav_count, mlog.mav_loss, mlog.packet_loss()))
- # Also print out the reasons why losses occurred
- if len(reasons) > 0:
- print("Packet loss at least partially attributed to the following:")
- for r in reasons:
- print(" * " + r)
- for filename in args.logs:
- mavloss(filename)
|