Hallo,
Ich mache eine visionsbasierte Steuerung und die Kamera befindet sich auf der Drohne und zeigt nach unten.
Die Positionsschätzung erfolgt also im Körperrahmen.
Ich fand, dass das Thema / mavros / setpoint_velocity / cmd_vel verwendet werden kann, um die Geschwindigkeit der Drohne zu ändern, aber es scheint, dass es sich im NED-Frame befindet.
Gibt es ein Thema wie / mavros / setpoint_velocity / cmd_vel, aber Body Frame verwenden?
Oder muss ich meinen Geschwindigkeitssollwert vom Body-Frame in den NED-Frame konvertieren, um ihn zu implementieren?
Ich habe versucht, etwas zu finden, das ich verwenden kann, und ich habe diesen Code gefunden. https://github.com/weiweikong/px4_velocity_control_keyboard/blob/master/src/px4_velocity_control_node.cpp
vs_body_axis.twist.linear.x = vs.twist.linear.x * cos(uavYawENU) + vs.twist.linear.y * sin(uavYawENU);
vs_body_axis.twist.linear.y = vs.twist.linear.x * sin(uavYawENU) - vs.twist.linear.y * cos(uavYawENU);
Es scheint, dass dies die beste Lösung ist, die ich finden konnte.
Ich bin nicht sicher, ob das Gieren nur von der IMU oder von der Fusion von IMU und Magnet stammt.
Haben Sie Kommentare oder Ideen dazu?
Mavros: 0,17,3
ROS: Indigo
Ubuntu: 14.04
APM: Copter V3.4-dev (fe724032)
bshang2 @ mechatronics-990 : ~ / simulations / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
... Protokollierung in /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/roslaunch-mechatronics-990-28079.log
Überprüfen des Protokollverzeichnisses auf Festplattennutzung. Das kann eine Weile dauern.
Drücken Sie Strg-C, um zu unterbrechen
Überprüfung der Datenträgerverwendung der Protokolldatei abgeschlossen. Die Nutzung beträgt <1 GB.
Roslaunch Server gestartet http: // mechatronics-990 : 45006 /
KLARE PARAMETER
PARAMETER
NODES
/.
Pavillon (Pavillon_ros / gzserver)
Pavillon_gui (Pavillon_ros / gzclient)
mavros (mavros / mavros_node)
spawn_erlecopter (Pavillon_ros / spawn_model)
Neustart neuer Master
Prozess [Master]: gestartet mit pid [28094]
ROS_MASTER_URI = http: // localhost : 11311
Setzen Sie / run_id auf ca9213bc-89bf-11e7-b657-1803733b65bb
Prozess [Rosout-1]: begann mit PID [28107]
Core Service gestartet [/ rosout]
Prozess [mavros-2]: gestartet mit pid [28126]
Prozess [spawn_erlecopter-3]: gestartet mit pid [28133]
Prozess [Pavillon-4]: begann mit PID [28134]
Prozess [Pavillon_gui-5]: begann mit pid [28151]
Das Skript spawn_model wurde gestartet
[Pavillon-4] -Prozess ist gestorben [PID 28134, Exit-Code 255, cmd / home / bshang2 / Simulation / ros_catkin_ws / src / Pavillon_ros_pkgs / Pavillon_ros / Skripte / gzserver -u -e Ode / home / bshang2 / Simulation / ros_catkin_ws / src /ardupilot_sitl_gazebo_plugin/ardupilot_sitl_gazebo_plugin/worlds/mark_world/mark.world __name: = Pavillon __log: = / home / bshang2 / .ros / log / ca9213bc-89bf-11e7-b657-1803733b65bb].
Protokolldatei: /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo-4 .log[INFO] [WallTime: 1503684250.172508] [0.000000] Laden der Modell-XML aus dem ros-Parameter[INFO] [WallTime: 1503684250.176886] [0.000000] Warten auf Service / Pavillon / Spawn_urdf_model[Pavillon_gui-5] Prozess ist gestorben [PID 28151, Exit-Code 255, cmd / home / bshang2 / Simulation / ros_catkin_ws / src / Pavillon_ros_pkgs / Pavillon_ros / Skripte / gzclient __name: = Pavillon_gui __log: = / home / bshang2 / .ros / log / ca9213bc-89bf-11e7-b657-1803733b65bb / Gazebo_gui-5.log].Protokolldatei: /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo_gui-5 .log
^ C [spawn_erlecopter-3] tötet beim Verlassen
[mavros-2] beim Verlassen töten
Traceback (letzter Anruf zuletzt):
Datei "/ home / bshang2 / Simulation / ros_catkin_ws / src / Gazebo_ros_pkgs / Pavillon_ros / Skripte / Spawn_Model", Zeile 301, in
sm.callSpawnService ()
Datei "/ home / bshang2 / Simulation / ros_catkin_ws / src / Pavillon_ros_pkgs / Pavillon_ros / Skripte / Spawn_Modell", Zeile 267, in callSpawnService
initial_pose, self.reference_frame, self.gazebo_namespace)
Datei "/home/bshang2/simulation/ros_catkin_ws/src/gazebo_ros_pkgs/gazebo_ros/src/gazebo_ros/gazebo_interface.py", Zeile 28, in spawn_urdf_model_client
rospy.wait_for_service (Pavillon_Namespace + '/ spawn_urdf_model')
Datei "/opt/ros/indigo/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", Zeile 159, in wait_for_service
ROSInterruptException auslösen ("rospy shutdown")
rospy.exceptions.ROSInterruptException: Herunterfahren von rospy
^ C [Rosout-1] tötet beim Verlassen
^ C [Meister] tötet beim Verlassen
Verarbeitungsmonitor herunterfahren ...
... den Verarbeitungsmonitor vollständig herunterfahren
getan
bshang2 @ mechatronics-990 : ~ / simulations / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
... Protokollierung in /home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/roslaunch-mechatronics-990-28603.log
Überprüfen des Protokollverzeichnisses auf Festplattennutzung. Das kann eine Weile dauern.
Drücken Sie Strg-C, um zu unterbrechen
Überprüfung der Datenträgerverwendung der Protokolldatei abgeschlossen. Die Nutzung beträgt <1 GB.
Roslaunch Server gestartet http: // mechatronics-990 : 41224 /
KLARE PARAMETER
PARAMETER
NODES
/.
Pavillon (Pavillon_ros / gzserver)
Pavillon_gui (Pavillon_ros / gzclient)
mavros (mavros / mavros_node)
spawn_erlecopter (Pavillon_ros / spawn_model)
Neustart neuer Master
Prozess [Master]: gestartet mit pid [28618]
ROS_MASTER_URI = http: // localhost : 11311
Setzen von / run_id auf e483c856-89bf-11e7-bb61-1803733b65bb
Prozess [Rosout-1]: begann mit PID [28631]
Core Service gestartet [/ rosout]
Prozess [mavros-2]: gestartet mit pid [28656]
Prozess [spawn_erlecopter-3]: gestartet mit pid [28657]
Prozess [Pavillon-4]: begann mit PID [28674]
Prozess [Pavillon_gui-5]: begann mit pid [28678]
Das Skript spawn_model wurde gestartet
[INFO] [WallTime: 1503684293.653120] [0.000000] Laden der Modell-XML aus dem ros-Parameter
[INFO] [WallTime: 1503684293.657344] [0.000000] Warten auf Service / Pavillon / Spawn_urdf_model
[INFO] [WallTime: 1503684294.260952] [0.047500] Service / Pavillon / spawn_urdf_model aufrufen
[INFO] [WallTime: 1503684294.855628] [0.445000] Spawn-Status: SpawnModel: Erfolgreich gespawntes Modell
Der Prozess [spawn_erlecopter-3] wurde sauber beendet
Protokolldatei: /home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/spawn_erlecopter-3*.log
bshang2 @ mechatronics-990 : ~ / simulations / ardupilot / ArduCopter $ rostopic echo -n1 / diagnostics
Header:
seq: 6456
Stempel:
Sekunden: 6817
ns: 500000000
frame_id: ''
Status:
bshang2 @ mechatronics-990 : ~ / simulations / ardupilot / ArduCopter $ rosrun mavros checkid
OK. Ich habe Nachrichten von 1: 1 erhalten.
1231 Nachrichten von 1 Adressen empfangen
sys: comp Liste der Nachrichten
1: 1 0, 1, 2, 136, 152, 150, 24, 27, 29, 30, 32, 33, 162, 163, 164, 165, 42, 173, 178, 62, 193, 74, 35, 36 241, 116
Sie da,
Sie können den setpoint_raw verwenden.
http://wiki.ros.org/mavros#mavros.2BAC8 -Plugins.setpoint_raw
Auf dem Zielsollwert können Sie den Koordinatenrahmen ändern.
http://docs.ros.org/api/mavros_msgs/html/msg/PositionTarget.html
Für setpoint_velocity
werde ich einen Fix hinzufügen, mit dem Sie zwischen LOCAL_NED
und BODY_NED
wählen können, da derzeit standardmäßig LOCAL_NED
(https: / /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81). In der Zwischenzeit können Sie setpoint_raw
und coordinate_frame
auf FRAME_BODY_NED
oder MAV_FRAME::BODY_NED
(beide sollten funktionieren).
Danke @AlexisTM und @ TSC21 Ihre Antwort ist hilfreich. Ich werde das später versuchen.
@ TSC21 @AlexisTM Danke für deine Hilfe! Ich kann jetzt die Geschwindigkeit im Körperrahmen steuern. Das Video wird aufgezeichnet: https://www.youtube.com/watch?v=dyUQfFYX3pk&feature=youtu.be
rostopic pub /mavros/setpoint_raw/local mavros_msgs/PositionTarget '{header: {stamp: now, frame_id: "world"}, coordinate_frame: 8, type_mask: 3527, velocity: {x: 0.1, y: 0, z: 0}}' -r 10
@cnpcshangbo gut zu wissen
hi @cnpcshangbo , danke für das video.
Ich poste dies, um anderen zu helfen, eine Verwirrung zu beseitigen, die ich hatte.
Obwohl die Rahmenmaske FRAME_BODY_NED = 8
, sollte sich der ROS-Befehl immer noch in ENU befinden . Die ENU -> NED-Konvertierung wird von mavros übernommen.
In der Tat ist aus dem Video das Verhalten:
Hallo Hoang,
Vielen Dank für Ihre Klarstellung.
Tut mir leid zu hören, dass du so lange gebraucht hast.
Ihre Bemühungen helfen anderen.
Vielen Dank
Bo
Hoang Minh Chung [email protected]于 2018 年 8 月 17 日 周五 :0 11:09 写道 :
hi @cnpcshangbo https://github.com/cnpcshangbo , danke für das Video.
Ich poste dies, um anderen zu helfen, eine Verwirrung zu beseitigen, die ich hatte.
Obwohl die Rahmenmaske "FRAME_BODY_NED = 8" lautet, wird der ROS-Befehl verwendetsollte noch in ENU sein . Die Konvertierung von ENU -> NED erfolgt durch
Mavros.
In der Tat ist aus dem Video das Verhalten:
- x = 0,1 ---> Rechts
- y = 0,1 ---> Vorwärts
Offensichtlich ist es immer noch in ENU. Diese Verwirrung hat mich jedoch eine Woche gekostet
Haare ziehen ...- -
Sie erhalten dies, weil Sie erwähnt wurden.
Antworte direkt auf diese E-Mail und sieh sie dir auf GitHub an
https://github.com/mavlink/mavros/issues/792#issuecomment-413745084 oder stumm schalten
der Faden
https://github.com/notifications/unsubscribe-auth/AEm3NdefOViosyJKxQlf2h0ZweC8lO6uks5uRjP9gaJpZM4PDCb2
.
Soll es nicht x vorwärts und y links für KÖRPER und x nach Osten, y nach Norden im Kartenrahmen @Nuno sein?
Bin ich richtig, dass wir hier tatsächlich drei Konventionen haben:
1) NED: PX4 Onboard-Schätzung und -Kontrolle
2) ENU: Standardeingabeformat für mavros-Befehlsnachrichten
3) NWU: Typisches Koordinatensystem in ROS
Nein, es gibt keine NWU in ROS.
http://www.ros.org/reps/rep-0103.html
@AlexisTM Nord oder Ost sollte nicht verwendet werden, um Körperkonventionen festzulegen, sondern um Orientierungen wie vorne, links.
Okay. Aber wenn ich mich nicht irre, denke ich, haben wir noch 3 Konventionen?
1) NED: Bordsteuerung
2) Right-Forward-Up: Wie Mavros rohe (Geschwindigkeits-) Sollwerte versteht
3) Vorwärts-Links-Auf: ROS-Konvention
@hmchung Wir verwenden Geschwindigkeitssollwerte innerhalb des Kartenrahmens und es ist ENU (ROS-Konvention)
Beachten Sie, dass es nur 2 Konventionen geben sollte! NED auf Pixhawk und ENU: alles, was Sie auf ROS tun.
Forward-Left-Up (FLU) ist die ROS-Konvention für den Körperrahmen. East-North-Up (ENU) ist die ROS-Konvention für den lokalen / Wortrahmen.
Hilfreichster Kommentar
Für
setpoint_velocity
werde ich einen Fix hinzufügen, mit dem Sie zwischenLOCAL_NED
undBODY_NED
wählen können, da derzeit standardmäßigLOCAL_NED
(https: / /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81). In der Zwischenzeit können Siesetpoint_raw
undcoordinate_frame
aufFRAME_BODY_NED
oderMAV_FRAME::BODY_NED
(beide sollten funktionieren).