Hola,
Estoy haciendo un control basado en la visión y la cámara está en el dron hacia abajo.
Entonces, la estimación de la posición está en el marco del cuerpo.
Encontré que el tema / mavros / setpoint_velocity / cmd_vel se puede usar para cambiar la velocidad del dron, pero parece que está en el marco NED.
¿Hay un tema como / mavros / setpoint_velocity / cmd_vel pero usa el marco del cuerpo?
¿O necesito convertir mi punto de ajuste de velocidad del marco de la carrocería al marco NED para implementarlo?
Intenté encontrar algo que pudiera usar y encontré este código. 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);
Parece que esta es la mejor solución que pude encontrar.
No estoy seguro de si el Yaw es solo de IMU o de la fusión de IMU y magnético.
¿Tiene algún comentario o idea al respecto?
Mavros: 0.17.3
ROS: Índigo
Ubuntu: 14.04
APM: helicóptero V3.4-dev (fe724032)
bshang2 @ mechatronics-990 : ~ / simulation / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
... iniciando sesión en /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/roslaunch-mechatronics-990-28079.log
Comprobando el uso del disco en el directorio de registro. Esto puede tardar un rato.
Presione Ctrl-C para interrumpir
Finalizado la comprobación del uso del disco del archivo de registro. El uso es <1 GB.
inició el servidor roslaunch http: // mechatronics-990 : 45006 /
BORRAR PARAMETROS
PARAMETROS
NODOS
/
gazebo (gazebo_ros / gzserver)
gazebo_gui (gazebo_ros / gzclient)
mavros (mavros / mavros_node)
spawn_erlecopter (gazebo_ros / spawn_model)
nuevo maestro de inicio automático
proceso [maestro]: iniciado con pid [28094]
ROS_MASTER_URI = http: // localhost : 11311
configuración / run_id en ca9213bc-89bf-11e7-b657-1803733b65bb
proceso [rosout-1]: comenzó con pid [28107]
inició el servicio principal [/ rosout]
proceso [mavros-2]: comenzó con pid [28126]
proceso [spawn_erlecopter-3]: comenzó con pid [28133]
proceso [gazebo-4]: comenzó con pid [28134]
proceso [gazebo_gui-5]: comenzó con pid [28151]
Se inició el script spawn_model
El proceso de [gazebo-4] ha muerto [pid 28134, código de salida 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-1803733b65 / gazebo].
archivo de registro: /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo-4 .log[INFO] [WallTime: 1503684250.172508] [0.000000] Cargando modelo xml desde el parámetro ros[INFO] [WallTime: 1503684250.176886] [0.000000] Esperando servicio / gazebo / spawn_urdf_modelEl proceso de [gazebo_gui-5] ha muerto [pid 28151, código de salida 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].archivo de registro: /home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo_gui-5 .log
^ C [spawn_erlecopter-3] matando al salir
[mavros-2] matando al salir
Rastreo (llamadas recientes más última):
Archivo "/ home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / spawn_model", línea 301, en
sm.callSpawnService ()
Archivo "/ home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / spawn_model", línea 267, en callSpawnService
propósito_inicial, self.reference_frame, self.gazebo_namespace)
Archivo "/home/bshang2/simulation/ros_catkin_ws/src/gazebo_ros_pkgs/gazebo_ros/src/gazebo_ros/gazebo_interface.py", línea 28, en spawn_urdf_model_client
rospy.wait_for_service (gazebo_namespace + '/ spawn_urdf_model')
Archivo "/opt/ros/indigo/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py", línea 159, en wait_for_service
elevar ROSInterruptException ("cierre rospy")
rospy.exceptions.ROSInterruptException: cierre de rospy
^ C [rosout-1] matando al salir
^ C [maestro] matando al salir
apagar el monitor de procesamiento ...
... apagando el monitor de procesamiento completo
hecho
bshang2 @ mechatronics-990 : ~ / simulation / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
... iniciando sesión en /home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/roslaunch-mechatronics-990-28603.log
Comprobando el uso del disco en el directorio de registro. Esto puede tardar un rato.
Presione Ctrl-C para interrumpir
Finalizado la comprobación del uso del disco del archivo de registro. El uso es <1 GB.
inició el servidor roslaunch http: // mechatronics-990 : 41224 /
BORRAR PARAMETROS
PARAMETROS
NODOS
/
gazebo (gazebo_ros / gzserver)
gazebo_gui (gazebo_ros / gzclient)
mavros (mavros / mavros_node)
spawn_erlecopter (gazebo_ros / spawn_model)
nuevo maestro de inicio automático
proceso [maestro]: iniciado con pid [28618]
ROS_MASTER_URI = http: // localhost : 11311
configuración / run_id en e483c856-89bf-11e7-bb61-1803733b65bb
proceso [rosout-1]: comenzó con pid [28631]
inició el servicio principal [/ rosout]
proceso [mavros-2]: comenzó con pid [28656]
proceso [spawn_erlecopter-3]: comenzó con pid [28657]
proceso [gazebo-4]: comenzó con pid [28674]
proceso [gazebo_gui-5]: comenzó con pid [28678]
Se inició el script spawn_model
[INFO] [WallTime: 1503684293.653120] [0.000000] Cargando modelo xml desde el parámetro ros
[INFO] [WallTime: 1503684293.657344] [0.000000] Esperando servicio / gazebo / spawn_urdf_model
[INFO] [WallTime: 1503684294.260952] [0.047500] Servicio de llamadas / gazebo / spawn_urdf_model
[INFO] [WallTime: 1503684294.855628] [0.445000] Estado de generación: Modelo de generación: Modelo generado con éxito
El proceso [spawn_erlecopter-3] ha finalizado limpiamente
archivo de registro: /home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/spawn_erlecopter-3*.log
bshang2 @ mechatronics-990 : ~ / simulación / ardupilot / ArduCopter $ rostopic echo -n1 / diagnostics
encabezamiento:
seq: 6456
sello:
segundos: 6817
nseg: 500000000
frame_id: ''
estado:
bshang2 @ mechatronics-990 : ~ / simulación / ardupilot / ArduCopter $ rosrun mavros checkid
está bien. Recibí mensajes de 1: 1.
1231 mensajes recibidos, de 1 direcciones
sys: lista de mensajes de la compilación
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
Hola,
Puede utilizar setpoint_raw.
http://wiki.ros.org/mavros#mavros.2BAC8 -Plugins.setpoint_raw
En el punto de ajuste objetivo, puede cambiar el marco de coordenadas.
http://docs.ros.org/api/mavros_msgs/html/msg/PositionTarget.html
Para setpoint_velocity
, agregaré una solución que permitirá elegir entre LOCAL_NED
y BODY_NED
, ya que actualmente está predeterminado en LOCAL_NED
(https: / /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81). Mientras tanto, puede usar setpoint_raw
y establecer coordinate_frame
en FRAME_BODY_NED
o MAV_FRAME::BODY_NED
(ambos deberían funcionar).
Gracias @AlexisTM y @ TSC21 Su respuesta es útil. Lo intentaré más tarde.
@ TSC21 @AlexisTM ¡ Gracias por su ayuda! Ahora puedo controlar la velocidad en la estructura del cuerpo. El video se graba: 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 es bueno saberlo
hola @cnpcshangbo , gracias por el video.
Publico esto para ayudar a otros a aclarar una confusión que tenía.
Aunque la máscara de marco es FRAME_BODY_NED = 8
, el comando ROS debería estar en ENU . La conversión ENU -> NED está a cargo de mavros.
De hecho, del video, el comportamiento es:
Hola hoang
Gracias por tu aclaración.
Lamento escuchar que te tomó tanto tiempo.
Tus esfuerzos ayudan a otros.
Gracias
Bo
Hoang Minh Chung [email protected]于 2018 年 8 月 17 日 周五 上午 11:09 写道 :
hola @cnpcshangbo https://github.com/cnpcshangbo , gracias por el video.
Publico esto para ayudar a otros a aclarar una confusión que tenía.
Aunque la máscara de marco es "FRAME_BODY_NED = 8", el comando ROStodavía debe estar en ENU . La conversión ENU -> NED se realizará mediante
mavros.
De hecho, del video, el comportamiento es:
- x = 0.1 ---> A la derecha
- y = 0.1 ---> Reenviar
Obviamente todavía está en ENU. Sin embargo, esta confusión me costó una semana.
de tirar del pelo ...-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/mavlink/mavros/issues/792#issuecomment-413745084 , o silenciar
la amenaza
https://github.com/notifications/unsubscribe-auth/AEm3NdefOViosyJKxQlf2h0ZweC8lO6uks5uRjP9gaJpZM4PDCb2
.
¿No se supone que es x hacia adelante e y hacia la izquierda para BODY yx hacia el este, y hacia el norte en el marco del mapa @Nuno?
Entonces, ¿tengo razón en que en realidad tenemos 3 convenciones aquí:
1) NED: estimación y control integrados de PX4
2) ENU: formato de entrada estándar para mensajes de comando mavros
3) NWU: sistema de coordenadas típico en ROS
No. No hay NWU en ROS.
http://www.ros.org/reps/rep-0103.html
@AlexisTM norte o este no debe usarse para especificar convenciones corporales, sino orientaciones como frente, izquierda.
Bueno. Pero si no me equivoco, creo que todavía tenemos 3 convenciones.
1) NED: control a bordo
2) Derecha-Adelante-Arriba: cómo mavros entiende los puntos de ajuste brutos (velocidad)
3) Adelante-Izquierda-Arriba: Convención ROS
@hmchung Estamos usando
¡Tenga en cuenta que solo debe haber 2 convenciones! NED en Pixhawk y ENU: cualquier cosa que hagas en ROS.
Forward-Left-Up (FLU) es la convención ROS para la estructura de la carrocería. East-North-Up (ENU) es la convención ROS para el marco local / de palabras.
Comentario más útil
Para
setpoint_velocity
, agregaré una solución que permitirá elegir entreLOCAL_NED
yBODY_NED
, ya que actualmente está predeterminado enLOCAL_NED
(https: / /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81). Mientras tanto, puede usarsetpoint_raw
y establecercoordinate_frame
enFRAME_BODY_NED
oMAV_FRAME::BODY_NED
(ambos deberían funcionar).