Seite 3 von 3

Re: Fernsteuerung per WLAN

Verfasst: 22.12.2013 14:56
von Derren
Du hast keinen Server erstellt. Du verbindest dich mit dem Server auf der Drohne. Dass das überhaupt funktioniert wundert mich ehrlich gesagt.
CreateNetworkServer() brauchst du. Die Drohne schickt dir dann die Daten zu diesem Server.

Re: Fernsteuerung per WLAN

Verfasst: 22.12.2013 16:57
von derschutzhund
Derren hat geschrieben:Du hast keinen Server erstellt. Du verbindest dich mit dem Server auf der Drohne. Dass das überhaupt funktioniert wundert mich ehrlich gesagt.
CreateNetworkServer() brauchst du. Die Drohne schickt dir dann die Daten zu diesem Server.
Ok, also für mein Verständnis:
Bei den Netzwerken die ich kenne, gibt es einen Server und viele Clients.
Ich bin davon ausgegangen, dass der Server die Drone ist. Praktisch könnte das so sein, weil da im Grunde die Rechenleistung eines PC drin steckt und weil das Senden der Befehle mit OpenNetworkConnection funktioniert.
Die Drone könnte also der Server sein oder?
Kann es auch so sein, dass man für jeden Kanal 5554, 5555, 5556, 5559 entweder einen Server oder einen Client erstellen muss. Woher weiß man dann aber was man braucht?

Re: Fernsteuerung per WLAN

Verfasst: 22.12.2013 17:07
von ts-soft
Bei Netzwerken, die ich kenne, gibt es viele Server (Hosts), sowie viele Server (Dienste) und noch mehr Clients :wink:

Der Server ist der Ansprechpartner Deiner Drohne, der Client spricht den Server auf der Drohne an.
Es werden also 3 Server auf Deinem PC erwartet, wenn Du alle Nachrichten benötigst. Sollte aber alles in dieser
PDF stehen, die ich nicht gelesen habe.

Re: Fernsteuerung per WLAN

Verfasst: 22.12.2013 17:16
von derschutzhund
ts-soft hat geschrieben:Bei Netzwerken, die ich kenne, gibt es viele Server (Hosts), sowie viele Server (Dienste) und noch mehr Clients :wink:

Der Server ist der Ansprechpartner Deiner Drohne, der Client spricht den Server auf der Drohne an.
Es werden also 3 Server auf Deinem PC erwartet, wenn Du alle Nachrichten benötigst. Sollte aber alles in dieser
PDF stehen, die ich nicht gelesen habe.
Ich finde das wirklich toll, dass du so viel weißt, sogar ohne die Doku gelesen zu haben.
Ist wirklich genial! Find ich absolut super! :mrgreen:

Re: Fernsteuerung per WLAN

Verfasst: 22.12.2013 17:22
von ts-soft
Warum soll ich die Doku lesen, wenn ich die nötige Hardware nicht habe?
Der Rest sind Grundlagen. Ohne diese wird das wohl sehr langwierig, wenn überhaupt :mrgreen:

Re: Fernsteuerung per WLAN

Verfasst: 22.12.2013 18:45
von edel
Laut Doku verbindet sich deine Software nur als Client zu deinem Modell. Du musst also 2 Verbindungen aufbauen (OpenNetworkConnection), was du ja auch schon getan hast. Warum du allerdings keine Nachrichten empfaengst, kann ich dir nicht sagen.

Re: Fernsteuerung per WLAN

Verfasst: 22.12.2013 21:09
von - chris -
So funktioniert das, schon mal bei mir:

Die Drone ist der Server mit der IP 192.168.1.1

Code: Alles auswählen


EnableExplicit

#DQ = Chr(34)

Define *buffer, ARc.i, ARn.i, command$
Define t1.i, t2.i, CEvent.i, recData.i, *recBuffer, n.i
Define header.l, state.l, seq_nr.l, vision.l, id1.w, size1.w, id2.w, size2.w
Define ctrl_s.l, vbat_p.l, theta.f, phi.f, psi.f, altitude.l, vx.f, vy.f, vz.f

If InitNetwork() = 0
  End
EndIf

*buffer = AllocateMemory(1024)
If *buffer = 0
  End
EndIf

*recBuffer = AllocateMemory(1024)
If *recBuffer = 0
  End
EndIf

ARc = OpenNetworkConnection("192.168.1.1", 5556, #PB_Network_UDP)

If Arc

  ARn = OpenNetworkConnection("192.168.1.1", 5554, #PB_Network_UDP)

  If ARn

    ;Send one packet to NAVDATA_PORT
    PokeA(*buffer + 0, 1)
    PokeA(*buffer + 1, 0)
    PokeA(*buffer + 2, 0)
    PokeA(*buffer + 3, 0)

    SendNetworkData(ARn, *buffer, 4)

    t1 = ElapsedMilliseconds()

    Repeat

      CEvent = NetworkClientEvent(ARn)

      If CEvent = #PB_NetworkEvent_Data
        recData = ReceiveNetworkData(ARn, *recBuffer, 1024)
        Debug "recData: " + Str(recData)
        Break
      EndIf

      t2 = ElapsedMilliseconds()

      If (t2 - t1) >= 5000
        Debug "Break"
        Break
      EndIf

      Delay(1)

    ForEver

    If recData > 0

      If recData = 24

        header = PeekL(*recBuffer + 0)
        state  = PeekL(*recBuffer + 4)
        seq_nr = PeekL(*recBuffer + 8)
        vision = PeekL(*recBuffer + 12)

        Debug "header: " + Hex(header)
        Debug "state: " + RSet(Bin(state), 32, "0")
        Debug "seq_nr: " + seq_nr
        Debug "vision: " + vision

        ;Check status bit mask is activated: AR_DRONE_NAVDATA_BOOTSTRAP
        If state & 1 << 10 = 1 << 10

          ;Send AT command (AT*CONFIG=1,"general:navdata_demo","TRUE")
          command$ = "AT*CONFIG=1," + #DQ + "general:navdata_demo" + #DQ + "," + #DQ + "TRUE" + #DQ + Chr(13)
          Debug command$
          PokeS(*buffer, command$, Len(command$), #PB_Ascii)
          SendNetworkData(ARc, *buffer, Len(command$))

          t1 = ElapsedMilliseconds()

          Repeat

            CEvent = NetworkClientEvent(ARn)

            If CEvent = #PB_NetworkEvent_Data
              recData = ReceiveNetworkData(ARn, *recBuffer, 1024)
              Debug "recData: " + Str(recData)
              Break
            EndIf

            t2 = ElapsedMilliseconds()

            If (t2 - t1) >= 5000
              Debug "Break"
              Break
            EndIf

            Delay(1)

          ForEver

          If recData > 0

            If recData = 24

              header = PeekL(*recBuffer + 0)
              state  = PeekL(*recBuffer + 4)
              seq_nr = PeekL(*recBuffer + 8)
              vision = PeekL(*recBuffer + 12)

              Debug "header: " + Hex(header)
              Debug "state: " + RSet(Bin(state), 32, "0")
              Debug "seq_nr: " + seq_nr
              Debug "vision: " + vision

              ;Send AT command (ACK_CONTROL_MODE)
              command$ = "AT*CTRL=2,5,0" + Chr(13)
              PokeS(*buffer, command$, Len(command$), #PB_Ascii)
              SendNetworkData(ARc, *buffer, Len(command$))

            EndIf

          EndIf

        EndIf

      ElseIf recData > 24

        header = PeekL(*recBuffer + 0)
        state  = PeekL(*recBuffer + 4)
        seq_nr = PeekL(*recBuffer + 8)
        vision = PeekL(*recBuffer + 12)

        Debug "header: " + Hex(header)
        Debug "state: " + RSet(Bin(state), 32, "0")
        Debug "seq_nr: " + seq_nr
        Debug "vision: " + vision

        id1   = PeekW(*recBuffer + 16)
        size1 = PeekW(*recBuffer + 18)
        
        Debug ""
        Debug "id1: " + Str(id1)
        Debug "size1: " + Str(size1)

        ;NAVDATA_DEMO_TAG
        If id1 = 0

          ctrl_s   = PeekL(*recBuffer + 20)
          vbat_p   = PeekL(*recBuffer + 24)
          theta    = PeekF(*recBuffer + 28)
          phi      = PeekF(*recBuffer + 32)
          psi      = PeekF(*recBuffer + 36)
          altitude = PeekL(*recBuffer + 40)
          vx       = PeekF(*recBuffer + 44)
          vy       = PeekF(*recBuffer + 48)
          vz       = PeekF(*recBuffer + 52)

          Debug "ctrl_s: " + RSet(Bin(ctrl_s), 32, "0")
          Debug "vbat_p: " + Str(vbat_p)
          Debug "theta: " + StrF(theta)
          Debug "phi: " + StrF(phi)
          Debug "psi: " + StrF(psi)
          Debug "altitude: " + Str(altitude)
          Debug "vx: " + StrF(vx)
          Debug "vy: " + StrF(vy)
          Debug "vz: " + StrF(vz)

        EndIf

        If recData > 24 + size1
          
          id2   = PeekW(*recBuffer + 16 + size1)
          size2 = PeekW(*recBuffer + 18 + size1)
          
          Debug ""
          Debug "id2: " + Str(id2)
          Debug "size2: " + Str(size2)

        EndIf

      EndIf

    EndIf

    CloseNetworkConnection(ARn)

  EndIf

  CloseNetworkConnection(ARc)

EndIf

End


Re: Fernsteuerung per WLAN

Verfasst: 22.12.2013 22:21
von derschutzhund
@Chris
So funktioniert das, schon mal bei mir:
Ich bekomme auch einen Datensatz zurück! :allright:

Was ich die letzte Zeit immer anders gemacht habe ist, dass ich die Befehle über 5554 zu senden versucht habe.
Jetzt ist klar, dass alles was vom PC an die Drone geht über 5556 läuft!

Vielen, vielen Dank für das Progrämmchen, damit kann ich jetzt erst mal weiter experimentieren!

Und das Ganze ist um so erstaunlicher als das es eigentlich garnicht gehen kann weil, ... auf dem PC wird ja kein Server definiert, obwohl der doch unbedingt auf dem PC gebraucht wird :mrgreen:
Irgendwie muss ich mir die Grundlagen doch nochmal genauer anlesen :mrgreen:

LG

Wolfgang

Re: Fernsteuerung per WLAN

Verfasst: 23.12.2013 00:24
von Derren
Sorry, hab das falsch gelesen -_- Anscheinend brauchst du tatsächlich keinen Server sondern verbindest dich nur mit der Drohne als Client.

Re: Fernsteuerung per WLAN

Verfasst: 25.12.2013 20:35
von derschutzhund
So funktioniert das, schon mal bei mir:

Die Drone ist der Server mit der IP 192.168.1.1
Hallo chris,

noch mal vielen Dank für das Beispielprogramm! :bounce:
Habe wirklich viel daraus gelernt! Nur so macht es Sinn!
Inzwischen kann ich ständig alle Daten aus der Drone auslesen und in einer einfachen, grafischen Oberfläche anzeigen.

Die Signalstärke mit der die Drone den PC empfängt habe ich bisher nicht gefunden kann ich bei den Dronenprofis aber noch mal nachfragen. Kannst du mir sagen, wie ich die WLAN-Signalstärke, die am PC angkommt, ermitteln kann?
Ideal wäre wenn ich die Signalstärke in beiden Richtungen hätte um dann gezielt die Reichweite erhöhen zu können.

Bei der Darstellung der Flugwinkel Roll, Pitch, Yaw hätte ich gerne ein kleines Flugzeug, welches sich nach den, von der Drone empfangenen Winkeln, dreht. Habe dazu in den Beispielen ein Programm gefunden, bei dem sich ein Roboter ständig dreht. Das könnte ich als Basis nehmen, da ich bisher noch nichts mit 3D in PB gemacht habe.
Weißt du, wo ich ein kleines Flugzeug als .mesh bekommen kann?

Wenn das Wetter wieder besser ist, mache ich dann den ersten Testflug!

Im nächsten Schritt muss ich dann das Video irgendwie auf den Bildschirm bekommen. Hast du dazu auch einen Tip?

LG

Wolfgang