Salut,
Je fais un contrÎle basé sur la vision et la caméra est sur le drone face vers le bas.
Donc, l'estimation de la position est dans le corps.
J'ai trouvĂ© que le sujet / mavros / setpoint_velocity / cmd_vel peut ĂȘtre utilisĂ© pour changer la vitesse du drone, mais il semble qu'il soit dans le cadre NED.
Existe-t-il un sujet comme / mavros / setpoint_velocity / cmd_vel mais utilise le cadre du corps?
Ou j'ai besoin de convertir ma consigne de vitesse du cadre de carrosserie en cadre NED pour l'implémenter?
J'ai essayé de trouver quelque chose que je peux utiliser et j'ai trouvé ce code. 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);
Il semble que ce soit la meilleure solution que j'ai pu trouver.
Je ne sais pas si le lacet provient uniquement de l'IMU ou de la fusion de l'IMU et du magnétique.
Avez-vous des commentaires ou des idées à ce sujet?
Mavros: 0,17,3
ROS: Indigo
Ubuntu: 14.04
APM: Copter V3.4-dev (fe724032)
bshang2 @ mécatronique-990 : ~ / simulation / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
... connexion Ă /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/roslaunch-mechatronics-990-28079.log
Vérification du répertoire du journal pour l'utilisation du disque. Cela peut prendre un peu de temps.
Appuyez sur Ctrl-C pour interrompre
Vérification de l'utilisation du disque du fichier journal terminé. L'utilisation est <1 Go.
a démarré le serveur roslaunch http: // mécatronique-990 : 45006 /
EFFACER LES PARAMĂTRES
PARAMĂTRES
NOEUDS
/
gazebo (gazebo_ros / gzserver)
gazebo_gui (gazebo_ros / gzclient)
mavros (mavros / noeud_mavros)
spawn_erlecopter (gazebo_ros / spawn_model)
démarrage automatique d'un nouveau maßtre
processus [master]: démarré avec pid [28094]
ROS_MASTER_URI = http: // localhost : 11311
réglage / run_id sur ca9213bc-89bf-11e7-b657-1803733b65bb
processus [rosout-1]: démarré avec pid [28107]
a démarré le service principal [/ rosout]
processus [mavros-2]: démarré avec pid [28126]
processus [spawn_erlecopter-3]: démarré avec pid [28133]
processus [gazebo-4]: démarré avec pid [28134]
processus [gazebo_gui-5]: démarré avec pid [28151]
Le script spawn_model a démarré
[gazebo-4] processus est mort [pid 28134, code de sortie 255, cmd / home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / 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: = gazebo __log: = / home / bshang2 / .ros / log / ca9213bc-89bf-11e7-b657-1803733eb65-11e7-b657-1803733eb65-bb65 / gazbo].
fichier journal: /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo-4 .log[INFO] [WallTime: 1503684250.172508] [0.000000] Chargement du modĂšle xml Ă partir du paramĂštre ros[INFO] [WallTime: 1503684250.176886] [0.000000] En attente de service / gazebo / spawn_urdf_model[gazebo_gui-5] processus est mort [pid 28151, code de sortie 255, cmd / home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / gzclient __name: = gazebo_gui __log: = / home / bshang2 / .ros / log / ca9213bc-89bf-11e7-b657-1803733b65bb / gazebo_gui-5.log].fichier journal: /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo_gui-5 .log
^ C [spawn_erlecopter-3] tuant Ă la sortie
[mavros-2] tuant Ă la sortie
Traceback (dernier appel le plus récent):
Fichier "/ home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / spawn_model", ligne 301, dans
sm.callSpawnService ()
Fichier "/ home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / spawn_model", ligne 267, dans callSpawnService
initial_pose, self.reference_frame, self.gazebo_namespace)
Fichier "/home/bshang2/simulation/ros_catkin_ws/src/gazebo_ros_pkgs/gazebo_ros/src/gazebo_ros/gazebo_interface.py", ligne 28, dans spawn_urdf_model_client
rospy.wait_for_service (gazebo_namespace + '/ spawn_urdf_model')
Fichier "/opt/ros/indigo/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", ligne 159, dans wait_for_service
lever ROSInterruptException ("arrĂȘt de rospy")
rospy.exceptions.ROSInterruptException: arrĂȘt de rospy
^ C [rosout-1] tuant Ă la sortie
^ C [maĂźtre] tuant Ă la sortie
arrĂȘt du moniteur de traitement ...
... arrĂȘt du moniteur de traitement terminĂ©
Fini
bshang2 @ mécatronique-990 : ~ / simulation / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
... connexion Ă /home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/roslaunch-mechatronics-990-28603.log
Vérification du répertoire du journal pour l'utilisation du disque. Cela peut prendre un peu de temps.
Appuyez sur Ctrl-C pour interrompre
Vérification de l'utilisation du disque du fichier journal terminé. L'utilisation est <1 Go.
a démarré le serveur roslaunch http: // mécatronique-990 : 41224 /
EFFACER LES PARAMĂTRES
PARAMĂTRES
NOEUDS
/
gazebo (gazebo_ros / gzserver)
gazebo_gui (gazebo_ros / gzclient)
mavros (mavros / noeud_mavros)
spawn_erlecopter (gazebo_ros / spawn_model)
démarrage automatique d'un nouveau maßtre
process [master]: démarré avec pid [28618]
ROS_MASTER_URI = http: // localhost : 11311
réglage / run_id sur e483c856-89bf-11e7-bb61-1803733b65bb
processus [rosout-1]: démarré avec pid [28631]
a démarré le service principal [/ rosout]
processus [mavros-2]: démarré avec pid [28656]
processus [spawn_erlecopter-3]: démarré avec pid [28657]
processus [gazebo-4]: démarré avec pid [28674]
processus [gazebo_gui-5]: démarré avec pid [28678]
Le script spawn_model a démarré
[INFO] [WallTime: 1503684293.653120] [0.000000] Chargement du modĂšle xml Ă partir du paramĂštre ros
[INFO] [WallTime: 1503684293.657344] [0.000000] En attente de service / gazebo / spawn_urdf_model
[INFO] [WallTime: 1503684294.260952] [0.047500] Service d'appel / gazebo / spawn_urdf_model
[INFO] [WallTime: 1503684294.855628] [0.445000] Statut d'apparition: SpawnModel: modÚle généré avec succÚs
Le processus [spawn_erlecopter-3] s'est terminé proprement
fichier journal: /home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/spawn_erlecopter-3*.log
bshang2 @ mécatronique-990 : ~ / simulation / ardupilot / ArduCopter $ rostopic echo -n1 / diagnostics
entĂȘte:
seq: 6456
timbre:
secs: 6817
nsecs: 500000000
frame_id: ''
statut:
bshang2 @ mécatronique-990 : ~ / simulation / ardupilot / ArduCopter $ rosrun mavros checkid
D'ACCORD. J'ai reçu des messages de 1: 1.
Reçu 1231 messages, à partir de 1 adresses
sys: liste des messages
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
Salut,
Vous pouvez utiliser le setpoint_raw.
http://wiki.ros.org/mavros#mavros.2BAC8 -Plugins.setpoint_raw
Sur le point de consigne cible, vous pouvez modifier le cadre de coordonnées.
http://docs.ros.org/api/mavros_msgs/html/msg/PositionTarget.html
Pour setpoint_velocity
, j'ajouterai un correctif qui permettra de choisir entre le LOCAL_NED
et le BODY_NED
, car il est actuellement réglé par défaut sur LOCAL_NED
(https: / /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81). En attendant, vous pouvez utiliser setpoint_raw
et définir coordinate_frame
sur FRAME_BODY_NED
ou MAV_FRAME::BODY_NED
(les deux devraient fonctionner).
Merci @AlexisTM et @ TSC21 Votre réponse est utile. J'essaierai ça plus tard.
@ TSC21 @AlexisTM Merci pour votre aide! Je peux contrÎler la vitesse dans le corps maintenant. La vidéo est enregistrée: 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 bon Ă savoir
salut @cnpcshangbo , merci pour la vidéo.
Je poste ceci pour aider les autres Ă dissiper une confusion que j'avais.
MĂȘme si le masque de cadre est FRAME_BODY_NED = 8
, la commande ROS doit toujours ĂȘtre en ENU . La conversion ENU -> NED est prise en charge par mavros.
En fait, d'aprÚs la vidéo, le comportement est:
Salut Hoang,
Merci pour la clarification.
Désolé d'apprendre que cela vous a pris si longtemps.
Vos efforts aident les autres.
Merci
Bo
Hoang Minh Chung [email protected]äș 2018 ćčŽ 8 æ 17 æ„ ćšäș äžć 11:09 ćé ïŒ
salut @cnpcshangbo https://github.com/cnpcshangbo , merci pour la vidéo.
Je poste ceci pour aider les autres Ă dissiper une confusion que j'avais.
MĂȘme si le masque de cadre est "FRAME_BODY_NED = 8", la commande ROSdevrait toujours ĂȘtre en ENU . La conversion ENU -> NED se fera par
mavros.
En fait, d'aprÚs la vidéo, le comportement est:
- x = 0,1 ---> Ă droite
- y = 0,1 ---> En avant
De toute évidence, il est toujours dans ENU. Cependant, cette confusion m'a coûté une semaine
de tirer les cheveux ...-
Vous recevez cela parce que vous avez été mentionné.
RĂ©pondez directement Ă cet e-mail, affichez-le sur GitHub
https://github.com/mavlink/mavros/issues/792#issuecomment-413745084 , ou muet
le fil
https://github.com/notifications/unsubscribe-auth/AEm3NdefOViosyJKxQlf2h0ZweC8lO6uks5uRjP9gaJpZM4PDCb2
.
N'est-il pas censĂ© ĂȘtre x vers l'avant et y vers la gauche pour BODY et x vers l'est, y vers le nord dans le cadre de la carte @Nuno?
Alors ai-je raison de dire que nous avons en fait 3 conventions ici:
1) NED: estimation et contrÎle embarqués du PX4
2) ENU: format d'entrée standard pour les messages de commande mavros
3) NWU: systÚme de coordonnées typique dans ROS
Non, il n'y a pas de NWU dans ROS.
http://www.ros.org/reps/rep-0103.html
@AlexisTM north ou east ne doit pas ĂȘtre utilisĂ© pour spĂ©cifier des conventions de corps, mais plutĂŽt des orientations comme devant, Ă gauche.
D'accord. Mais si je ne me trompe pas, je pense que nous avons encore 3 conventions?
1) NED: contrÎle embarqué
2) Right-Forward-Up: Comment mavros comprend les points de consigne bruts (vitesse)
3) Avant-gauche-haut: convention ROS
@hmchung Nous utilisons des points de consigne de vitesse dans le cadre de la carte et c'est ENU (convention ROS)
Notez qu'il ne devrait y avoir que 2 conventions! NED sur le Pixhawk et ENU: tout ce que vous faites sur ROS.
Avant-gauche-haut (FLU) est la convention ROS pour le cadre du corps. East-North-Up (ENU) est la convention ROS pour la trame locale / mot.
Commentaire le plus utile
Pour
setpoint_velocity
, j'ajouterai un correctif qui permettra de choisir entre leLOCAL_NED
et leBODY_NED
, car il est actuellement réglé par défaut surLOCAL_NED
(https: / /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81). En attendant, vous pouvez utilisersetpoint_raw
et définircoordinate_frame
surFRAME_BODY_NED
ouMAV_FRAME::BODY_NED
(les deux devraient fonctionner).