code: def send_packet(self, pk, expected_reply=(), resend=False, timeout=0.2):
          
          self._send_lock.acquire()
          if self.link is not None:
              if len(expected_reply) > 0 and not resend and \
                      self.link.needs_resending:
                  pattern = (pk.header,) + expected_reply
                  logger.debug(
                      'Sending packet and expecting the %s pattern back',
                      pattern)
                  new_timer = Timer(timeout,
                                    lambda: self._no_answer_do_retry(pk,
                                                                     pattern))
                  self._answer_patterns[pattern] = new_timer
                  new_timer.start()
              elif resend:
                  # Check if we have gotten an answer, if not try again
                  pattern = expected_reply
                  if pattern in self._answer_patterns:
                      logger.debug('We want to resend and the pattern is there')
                      if self._answer_patterns[pattern]:
                          new_timer = Timer(timeout,
                                            lambda:
                                            self._no_answer_do_retry(
                                                pk, pattern))
                          self._answer_patterns[pattern] = new_timer
                          new_timer.start()
                  else:
                      logger.debug('Resend requested, but no pattern found: %s',
                                   self._answer_patterns)
              self.link.send_packet(pk)
              self.packet_sent.call(pk)
          self._send_lock.release()
docs: Send a packet through the link interface.
  
          pk -- Packet to send
          expect_answer -- True if a packet from the Crazyflie is expected to
                           be sent back, otherwise false