Mavros: Joystick-Telebedienung

Erstellt am 25. Aug. 2014  ·  72Kommentare  ·  Quelle: mavlink/mavros

Eingehende. Benötige etwas Hilfe beim RC-Override-Teil.

extras feature request

Hilfreichster Kommentar

@vooon macht jetzt einen Test. Meine Achsenzuordnung ist anders, das ist leicht zu ändern, aber ich sehe, dass einige Kanäle umgekehrt sind. Sie sollten auch einen Parameter zum Reverse-Kanal hinzufügen, ohne in den Kontrollmodus gehen zu müssen und etwas wie z=-yaw tun.

Hinweis: In meinem Fall lautet meine Achsenkarte:

axes_map = {
    'roll': 3,
    'pitch': 2,
    'yaw': 0,
    'throttle': 1
}

und im vel control mode:

twist.twist.linear = Vector3(x=-roll, y=pitch, z=throttle)
twist.twist.angular = Vector3(z=-yaw)

Alle 72 Kommentare

Ich denke, besser kein Plugin, sondern ein Skriptknoten, der das rc_io-Plugin verwendet.

Wird das Sollwert-Zeug beinhalten?

Ich bin nicht sehr an die Skripte gewöhnt, wie Sie gesehen haben, ich würde wirklich ein Plugin bevorzugen. Aber ich kann Ihnen das als Plugin schicken und dann können Sie es in ein Skript umwandeln, wenn Sie möchten.

Ich möchte nur keinen doppelten Code, der bereits existiert (und funktioniert).

Meiner Meinung nach sollte dieser Knoten das Joystick-Thema abonnieren und RC-Override-Meldungen (oder Sollwerte) erzeugen.
Senden Sie mir bitte, welche Daten ich an rc/setpoint senden soll und ich schreibe ein Skript (Kanalplan usw.).

Ok das würde ich sofort machen

@vooon hat dir jetzt die E-Mail geschickt ;)

Okay, ich werde es morgen sehen.

Klar :+1: Danke!

Ich könnte einen ähnlichen Knoten hinzufügen, den ich dafür habe, wenn er benötigt wird. @TSC21

@tonybaltovski bitte schick es mir. Ich halte es für ein nützliches Beispiel, aber vielleicht muss es in Extras sein.

@tonybaltovski Ich habe bereits ein Plugin gestartet, das ich an @vooon geschickt

Wie ist der Stand dazu? Ich würde das wirklich gerne in die Hand nehmen, um auch Sollwerte zu testen :)

Vielleicht morgen...

@TSC21 Es ist nur ein Proof of Concept, aber es sollte funktionieren.

Ich werde es versuchen, danke! :) Aber meine Priorität ist es, die Sollwerte mit dem Joystick zu testen. Wenn Sie bitte die Möglichkeit der Positions- und Geschwindigkeitssteuerung hinzufügen können, wäre ich Ihnen dankbar.

Für Geschwindigkeit senden Sie cmd_vel als TwistStamped , um von setpoint_velocity abonniert zu werden;

Die Positionskontrolle ist einfach: anstelle von cmd_vel wird position als PoseStamped gesendet, aber dies muss ein besonderer Fall sein - es muss den vorherigen gesendeten Positionswert summieren, damit es so ist kann die Position inkrementieren oder dekrementieren (also sind die Werte von x , y , z nicht auf -1..1 beschränkt; begrenzt ist der Wert, der zu letzter Wert; wenn der Joystick also immer +1 sendet, summiert er sich in jeder Iteration auf +1 -> der einzige Zweifel, den ich hier habe, ist, ob wir die Rate in diesem Fall begrenzen müssen, also die Iterationen erhöhen einige Werte nicht zu schnell).
Dieser ist von setpoint_position abonniert.

Update: zum Thema /joy : Ich kann mit dem Skript mavteleop keine Daten von meinem Joystick abrufen. Aber mit dem Start von universal_teleop kann ich das. Es muss also etwas im Drehbuch fehlen.

Du betreibst den joy_node?

rosrun joy joy_node

2014.08.27 18.17 GMT + 04: 00 TSC21 [email protected] :

Update: zum Thema /joy: Ich kann keine Daten abrufen von
mein Joystick mit dem mavteleop-Skript. Aber mit dem universal_teleop
starten kann ich. Es muss also etwas im Drehbuch fehlen.


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/vooon/mavros/issues/133#issuecomment -53578566.

Nein! Ja es funktioniert jetzt. Habe das joy_node vergessen. Kann das nicht in das zu startende Skript aufgenommen werden?

Ok jetzt zum Override selbst: Das Echo von /mavros/rc/override keine Daten erhalten, weil Sie das Präfix / hier vergessen haben:

override_pub = rospy.Publisher(args.mavros_ns + "/rc/override", OverrideRCIn, queue_size=10)

Muss das korrigieren oder ich mache eine PR.
Aber trotzdem gibt es kein RC-Overriding auf der FCU, da die Motoren nicht einmal die Geschwindigkeit ändern. Werde weiter prüfen was passiert.

@vooon RC überschreiben es funktioniert nicht. Das Skript wird in /rc/override , das von rc_io.cpp abonniert wird. Durch das Echo von /mavros/rc/override ändern sich die Kanalwerte, aber auf der FCU-Seite passiert nichts (keine Motordrehänderungen).

Meine Priorität ist nicht das RC-Override, obwohl ich es gerne einrichten würde. Aber ich kann das Problem nicht finden. Können Sie bitte in der Zwischenzeit die Sollgeschwindigkeits- und Lageregelung implementieren? (basierend auf dem obigen Kommentar, den ich zu den Spezifikationen dieser Art von Steuerung gemacht habe)
Vielen Dank!

Ich habe das gleiche Problem mit dem RC-Override. Die FCU verwendet es nicht.

@tonybaltovski können Sie versuchen, den Grund zu debuggen? Ich beschäftige mich mit einigen anderen Dingen bezüglich POSCTL.

Wenn ich Overrides mit APM teste, habe ich festgestellt, dass es still fällt, wenn die Override-Meldung von system_id != SYSID_MYGCS (Standard: 255) kommt.

Also ändere ich es auf 1 (mavros-Standardeinstellungen) und es funktioniert. Oder wir könnten mavros system_id ändern.

Was ist also falsch? system_id oder comp_id ? Was wird im Falle von PX4 benötigt?

Vielleicht verarbeitet PX4 keine RC-Override-Meldungen, ich kann keinen Handler für die MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE Meldung finden.

Vielleicht verarbeitet PX4 keine RC-Override-Meldungen, ich kann keinen Handler für die MAVLINK_MSG_ID_RC_CHANNELS_OVERRIDE Meldung finden.

Ja, es scheint nicht. Schade, ich denke, wir können die Implementierung verlangen, aber ich würde es vorziehen, Sollwerte zum Laufen zu bringen. Kannst du @vooon bitte
Danke im Voraus!

@vooon Ich werde es morgen noch einmal auf meinem APM versuchen und dich wissen lassen.

Ich werde es morgen versuchen.

Vielen Dank @vooon!

@TSC21 Ich bin fast fertig, aber die Positionssteuerung ist sehr schmutzig. Sie müssen es für die zeitkonstante Integration wiederholen.

Danke @vooon! :D Wenn Sie alles getan haben, warnen Sie mich bitte! Das teste ich gerne!

Sie können bereits alle Modi außer -pos (und vielleicht -vel ) testen.

@vooon macht jetzt einen Test. Meine Achsenzuordnung ist anders, das ist leicht zu ändern, aber ich sehe, dass einige Kanäle umgekehrt sind. Sie sollten auch einen Parameter zum Reverse-Kanal hinzufügen, ohne in den Kontrollmodus gehen zu müssen und etwas wie z=-yaw tun.

Hinweis: In meinem Fall lautet meine Achsenkarte:

axes_map = {
    'roll': 3,
    'pitch': 2,
    'yaw': 0,
    'throttle': 1
}

und im vel control mode:

twist.twist.linear = Vector3(x=-roll, y=pitch, z=throttle)
twist.twist.angular = Vector3(z=-yaw)

Verwenden Sie den Parameter ~axes_scale/<name> zum Umkehren (stellen Sie ihn auf -1.0 ein).

Oh ok, das habe ich nicht überprüft. Vielen Dank!

Können Sie rosrun joy joy_node beim Start des Skripts integrieren, anstatt es der Datei launch hinzuzufügen?

@vooon noch eine Sache die funktionieren muss: Der Knoten muss immer die Daten senden, auch wenn er 0.0 ist, dh zum Beispiel muss cmd_vel immer veröffentlichen, auch wenn wir die Schalter nicht verschieben Joystick, weil OFFBOARD Modus eine Zeitüberschreitung von 0,5s hat und ständig Daten empfängt, um in diesem Modus zu bleiben oder in den vorherigen Modus zurückzukehren!

Was ich sehe, ist, dass cmd_vel diesen Wert nur einmal sendet, wenn wir einen Kanal auf einen Wert setzen. Die PX4-Implementierung muss ständig Daten empfangen, daher denke ich, dass cmd_vel immer den vorherigen Kanalwert sendet, außer wenn ein neuer Wert empfangen wird. Dieser neue Wert wird gespeichert und ständig gesendet, bis ein neuer Wert des Kanals eingestellt wird (natürlich mit den Analogsticks).

Fügen Sie dies Ihrer Startdatei für den Joy-Knoten hinzu <param name="~autorepeat_rate" value="5" />

Danke @tonybaltovski das hat funktioniert! Aber ich kann die Parameter immer noch nicht mit der Startdatei ändern. So sieht meine Startdatei aus:

<launch>
    <!-- vim: ft=roslaunch -->
    <!-- example launch script for PX4 teleop -->

    <arg name="fcu_url" default="serial:///dev/ttyACM0:57600" />
    <arg name="gcs_url" default="" />
    <arg name="tgt_system" default="1" />
    <arg name="tgt_component" default="50" />

    <node pkg="mavros" type="mavros_node" name="mavros" required="true" clear_params="true" output="screen">
        <param name="fcu_url" value="$(arg fcu_url)" />
        <param name="gcs_url" value="$(arg gcs_url)" />
        <param name="target_system_id" value="$(arg tgt_system)" />
        <param name="target_component_id" value="$(arg tgt_component)" />

        <!-- px4 blacklist -->
        <rosparam command="load" file="$(find mavros)/launch/px4_blacklist.yaml" />

        <!-- enable heartbeat send and reduce timeout -->
        <param name="conn_heartbeat" value="5.0" />
        <param name="conn_timeout" value="10.0" />
        <!-- enable mavlink autostart on USB port -->
        <param name="startup_px4_usb_quirk" value="true" />

        <!-- joystick axis parameters -->

        <!-- joystick axis map -->
        <param name="~axes_map/roll" value="3" />
        <param name="~axes_map/pitch" value="2" />
        <param name="~axes_map/yaw" value="0" />
        <param name="~axes_map/throttle" value="1" />

        <!-- joystick axis scale -->
        <param name="~axes_scale/roll" value="-1.0" />
        <param name="~axes_scale/pitch" value="" />
        <param name="~axes_scale/yaw" value="-1.0" />
        <param name="~axes_scale/throttle" value="" />

    </node>

    <node pkg="joy" type="joy_node" name="joy" required="true">
        <param name="~/autorepeat_rate" value="50" />
    </node> 
</launch>

Vielleicht weil dies ein mavros_extras Skript ist? Aber wenn ich rosparam list / ausstelle, bekomme ich:

/joy/autorepeat_rate
/mavros/axes_map/pitch
/mavros/axes_map/roll
/mavros/axes_map/throttle
/mavros/axes_map/yaw
/mavros/axes_scale/pitch
/mavros/axes_scale/roll
/mavros/axes_scale/throttle
/mavros/axes_scale/yaw

Daher kann ich nicht verstehen, warum die Parameter nicht geändert werden.

Übrigens @vooon , es sollte axis und nicht axes ;) Ich werde diese Korrektur vornehmen und eine PR machen, wenn du willst.

Update: Gott, meine Unwissenheit. Achsen ist Plural von Achsen (also ist es in Ordnung, wie es ist)

Update: Wenn ich rosparam get /mavros/axes_map/pitch mache, bekomme ich wie angenommen 2 , also denke ich, dass es etwas auf mavteleop .

Wenn ich es stattdessen tue:

load_map(axes_map, '/mavros/axes_map/')
load_map(axes_scale, '/mavros/axes_scale/')
load_map(button_map, '/mavros/button_map/')

auf rosrun mavteleop :

[ERROR] [WallTime: 1409327711.720875] bad callback: <function joy_cb at 0xa5ce9cc>
Traceback (most recent call last):
  File "/opt/ros/hydro/lib/python2.7/dist-packages/rospy/topics.py", line 682, in _invoke_callback
    cb(msg)
  File "/home/vision/vision_ros_ws/src/mavros/mavros_extras/scripts/mavteleop", line 187, in joy_cb
    pitch = get_axis(joy, 'pitch')
  File "/home/vision/vision_ros_ws/src/mavros/mavros_extras/scripts/mavteleop", line 92, in get_axis
    return j.axes[axes_map[n]] * axes_scale[n]
TypeError: can't multiply sequence by non-int of type 'float'

Okay das Problem ist gelöst! Folgendes habe ich getan:
Auf der Startdatei hatte ich:

<!-- joystick axis scale -->
        <param name="~axes_scale/roll" value="-1.0" />
        <param name="~axes_scale/pitch" value="" />
        <param name="~axes_scale/yaw" value="-1.0" />
        <param name="~axes_scale/throttle" value="" />

was den vorherigen Fehler der Sequenzmultiplikation ergab. gewechselt zu:

<!-- joystick axis scale -->
        <param name="~axes_scale/roll" value="-1.0" />
        <param name="~axes_scale/pitch" value="1.0" />
        <param name="~axes_scale/yaw" value="-1.0" />
        <param name="~axes_scale/throttle" value="1.0" />

Das Abonnement wurde gelöst, indem mavteleop mit diesem geändert wurde:

load_map(axes_map, '/mavros/axes_map/')
load_map(axes_scale, '/mavros/axes_scale/')
load_map(button_map, '/mavros/button_map/')

Werde demnächst eine PR machen.

PR in Nr. 143.

Ich war verwirrt über die Pluralform der Achsen.

Sie wenden Parameter auf den falschen Knoten an. Ich habe einfach Startskript gemacht.

Sie wenden Parameter auf den falschen Knoten an. Ich habe einfach Startskript gemacht.

Ja jetzt verstehe ich! Vielen Dank! Werde dann PR abbrechen.

Verwendungszweck:

  1. FCU-Verbindung starten: roslaunch mavros px4.launch
  2. Teleoperation starten: roslaunch mavros_extras teleop.launch

Oder erstellen Sie Ihren eigenen Start mit <include file="..."> für beide Dateien.

Verwendungszweck:
FCU-Verbindung starten: roslaunch mavros px4.launch
Teleoperation starten: roslaunch mavros_extras teleop.launch

Vielen Dank! Werde es dann versuchen!

Funktioniert jetzt einwandfrei :) musste nur die yaml ändern und fertig (check 289fa6c - sollte roll bot poll ). Jetzt werde ich dies auf GCS HIL testen, um zu sehen, wie es funktioniert. Was ist im position Teil @vooon zu tun?

Ich bereite mich auf Wochenendflüge vor, also ist es todo..

Ich bereite mich auf Wochenendflüge vor, also ist es todo..

Wenn du auf myabe hinweist, kann ich es versuchen

Ich korrigiere Tippfehler.
Außerdem müssen die RC-Grenzwerte von den FCU-Parametern hinzugefügt werden.

Übrigens, gerade bemerkt, dass die PX4Firmware 500 Forks hat!

Übrigens, gerade bemerkt, dass die PX4Firmware 500 Forks hat!

:D Kein Wunder angesichts der riesigen Community, die Pixhawk- und PX4-Derivatprojekte verwendet.

Wollte das nur kommentieren. Ich wollte gerade so etwas schreiben, wie ich dieses Problem gesehen habe. Es ist, als hätte die Community meine Gedanken gelesen :D. Getestet, funktioniert wie ein Zauber.

@pmukherj Können Sie bitte kurze Schritte skizzieren, wie Sie dies auf einem sauberen System zum
Vielen Dank.

@mhkabir Ich denke, der beste Ort in Wiki - Tutorial-Seiten (derzeit nicht im Mavros-Raum vorhanden).

@vooon Ich meinte PX4-Wiki :) Ich kann README eine Notiz hinzufügen.

Sichere Sache! Ich möchte sicherstellen, dass ich keine überflüssigen Schritte unternommen habe (ein Upgrade der Firmware auf die Entwicklerversion war möglicherweise nicht erforderlich usw.). Ich schreibe heute etwas auf.

@mhkabir Ich konnte heute wegen schlechten Wetters in Kanada nicht fliegen, aber während des Prüfstandtests habe ich festgestellt, dass sich die Motorleistung nicht hörbar ändert, wenn ein r,p,y-Befehl ungleich Null gesendet wird (mit dem Joystick). Wenn ich den Schub kontrolliere (über den Joystick f710), höre ich die Motoren auf und ab heulen. Wenn ich den Körper des Quadrotors herumschwinge, höre ich die Motoren heulen und versuche zu kompensieren. Wenn ich dem Ziel jedoch einen großen ar,p,y-Befehl über den Sollwert- / Lagebefehl gebe, ist keine solche Kompensation zu hören. Gibt es im Rahmen von mavros implementierte Rückmeldungen, die die Ausführung eines Befehls quittieren (vielleicht die einzelnen Motorleistungen oder so?).
Ich möchte sicherstellen, dass dies funktioniert, bevor ich es dokumentiere, und würde es lieber auf einer Bank beweisen als durch einen Crash :P.

@pmukherj Können Sie mir bitte eine IM auf Gitter oder Hangouts ([email protected]) senden. Lassen Sie uns damit durchgehen. Ich benötige weitere Informationen zu deinem Setup.
Es gibt eine LOCAL_POSITION_TARGET_NED-Nachricht und eine ATTITUDE_TARGET-Nachricht, die sich nicht in Mavros befinden. Ich werde es als Teil des Code-Refactorings durcharbeiten, das wir für die Setpoint-Plugins durchführen möchten. Auch für diese Controller-Zielstreams müssen Sie sie explizit auf der PX4-Seite streamen.
Die Offboard-Steuerung ist experimentell und dieses Plugin wurde nicht getestet, daher bin ich mir noch nicht sicher, wo die Dinge schief gehen. Ich brauche mehr Daten.

Entschuldigung, richtig, ich war damit beschäftigt, einige DAQ-Flüge zu machen.
ATTITUDE_TARGET klingt also nach genau dem, was ich brauche, um sicherzustellen, dass der Pixhawk versucht, die Joystick-Befehle zu erreichen, die ich ihm sende. Ich habe einen 3DR, Pixhawk mit einem größeren Computer an Bord (der px4-Stack funktioniert übrigens fabelhaft, es fehlen nur einige Flugmodi).

Kann ich mir das mal anschauen oder hast du da eine Gabelung implementiert?

@pmukherj Ich bin dabei, Einstellungs- und Positionsziele in mein Visualiser-Plugin zu integrieren. Es gibt einige TF-Probleme, also löse ich diese.
Welchen Bordcomputer verwenden Sie?
Was die Ziele angeht, brauchen Sie eigentlich nichts umzusetzen. Verwenden Sie einfach die UDP-Bridge, die wir auf mavros haben, und patchen Sie einen Link zu QGC auf Ihrem Entwicklungscomputer. Dort kann man alles anschauen und grafisch darstellen.

Es tut uns leid! Umzug von Büros ins neue Jahr.
Ich teste mit allen möglichen Computern (Odroiden, TK1 usw.). Ich werde es versuchen, eine UDP-Brücke zu verwenden.
Ich vermute, ich kann jede der Telemetrieverbindungen zum Pixhawk verwenden? Neben dem Companion-Computer habe ich auch eine drahtlose Verbindung zu einem der Telemetrie-Ports (wie bei 3DR pixhawk Standard).

Jep. Verifiziert, dass die Sollwerte tatsächlich funktionieren! Die internen Sollwerte akzeptieren dies, auch die Reglerausgänge sind sichtbar. Jetzt für Flugtests :). Wünsch mir Glück.

@pmukherj Sie können den Companion an Ihren TELEM2-Port anschließen und über extras.txt auf Ihrer microSD-Karte starten.
Gut, dass die Sollwerte funktionieren. Viel Glück bei den Flügen.
Bitte überprüfen Sie: http://www.pixhawk.org/dev/ros/mavros_offboard
Unten befindet sich eine leere Codezeile, in der Sie den mavros-Befehl hinzufügen sollten, mit dem Sie in den Offboard-Modus gewechselt haben (als Option für Leute, wenn sie möchten).

Können Sie bitte auch die Bestellung für Flugtests hier hinzufügen: http://www.pixhawk.org/dev/offboard_control/testing

Geben Sie einfach die Punkte ein, und ich werde es bereinigen.

@vooon Das Joystick-Plugin funktioniert gut, stürzt aber zu stark ab, wenn eine der Achsen nicht gefunden wird oder sich außerhalb der Reichweite befindet usw.

Wir können eine Min/Max-Begrenzung hinzufügen.

Beachten Sie, dass dies kein Plugin war, node.

Wahr ;)
Ich denke, ich werde es als Plugin tun, da das Skript / Python ziemlich verwirrend + unzuverlässig erscheint.

Ich möchte kein Plugin, weil es das Rad neu erfindet. Maximales Umschreiben von Python nach C++.
Aber wirklich nicht nötig, wenn mavteleop auf dem Desktop läuft und die Mavros von OBC steuert.

@vooon gedacht haben Sie in einer Art und Weise zu lösen dieses ?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

TeixeiraRafael picture TeixeiraRafael  ·  4Kommentare

zhahaoyu picture zhahaoyu  ·  12Kommentare

mtsakaguchi picture mtsakaguchi  ·  5Kommentare

shening picture shening  ·  10Kommentare

trishantroy picture trishantroy  ·  10Kommentare