2015-05-12 1 views
0

Мне нужно спланировать данные gps, imu и odometry, поэтому я начал тестировать пакет robot_localization.ROS - Получение значений nan с помощью navsat_transform_node из пакета robot_localization

я публикую действительный фиктивный MESSAgES sensor_msgs/ИДЕТ и nav_msgs/одометрию для входов ekf_localization_node, то я кормлю вход navsat_transform_node с сообщением одометрии с выхода ekf_localization_node и макетом sensor_msgs/сообщение NavSatFix , Когда я запускаю navsat_transform_node я получаю следующие значения нан:

process[navsat_transform_node-1]: started with pid [29575] 
[ WARN] [1431390696.211039510]: MSG to TF: Quaternion Not Properly Normalized 
[ INFO] [1431390696.295605608]: Corrected for magnetic declination of 0.183000, user-specified offset of 1.000000, and fixed offset of 1.570796. Transform heading factor is now nan 
[ INFO] [1431390696.295816136]: Latest world frame pose is: 
Position: (0.000000, 0.000000, 0.000000) 
Orientation: (0.000000, -0.000000, 0.000000) 
[ INFO] [1431390696.295972831]: World frame->utm transform is 
Position: (nan, nan, nan) 
Orientation: (nan, -nan, nan) 

Некоторые примечания:

  • Здесь значения от «Latest мира кадра поза:» все нули, но они не всегда одинаковы.
  • Я изменил значения магнитного склонения и смещения, но получаю те же результаты.
  • Также изменили кадры координат из imu, odometry и gps-сообщений в файлах запуска, но получили ту же ошибку.

Выходная одометрия сообщения от/одометрии/GPS темы есть:

pose: 
    pose: 
    position: 
     x: nan 
     y: nan 
     z: nan 
    orientation: 
     x: 0.0 
     y: 0.0 
     z: 0.0 
     w: 1.0 
    covariance: [nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan] 

Любой помощь будет оценена по достоинству!

+0

Если вы работаете с C++ под Linux, вы можете добавить 'feenableexcept (FE_INVALID | FE_OVERFLOW);' на начало вашего кода. Это заставит программу генерировать исключение в строке, где происходит первое NaN, поэтому источник NaN можно легко отследить с помощью отладчика (см. Также [здесь] (http://stackoverflow.com/a/2949452/2095383)) – luator

+0

Спасибо за ваш ответ. Я нашел ошибку! Некоторые недостатки в IMU отсутствовали: \t \t imu_msg.orientation.x = 1.0; \t \t imu_msg.orientation.y = 0.0; \t \t imu_msg.orientation.z = 0.0; \t \t imu_msg.orientation.w = 0.0; Теперь все работает нормально. С уважением! –

ответ

0

Если кто-то один и тот же вопрос, полный ИДУ издеваться сообщение как следующее:

#!/usr/bin/env python 

import sys 
import roslib 
import rospy 
import math 
import numpy as np 

from geometry_msgs.msg import Twist, Point 
from sensor_msgs.msg import Imu 
from std_msgs.msg import Int64 
from tf.transformations import quaternion_about_axis 


def imu_publisher(): 
    vel_x = 3.0 
    vel_y = 0.0 
    vel_theta = 15 

    imu_pub = rospy.Publisher('/imu_data',Imu) 

    rospy.init_node("butiaros_imu_publisher",anonymous=True) 
    rospy.loginfo ("Topic = /imu_data") 

    x = 0.0 
    y = 0.0 
    theta = 0.0 

    current_time = rospy.get_rostime() #en segundos 
    last_time = current_time 

    rate = rospy.Rate(1) #1 hz (1 seg) 
    i = 0 
    while not rospy.is_shutdown(): 
     #rospy.loginfo ("Making Odometry message...") 
     #ROS: Imu 
     seq = i 
     imu_msg = Imu() 

     imu_msg.header.seq = seq 
     imu_msg.header.stamp = current_time 
     imu_msg.header.frame_id = "base_link" 

     # new 
     imu_msg.orientation.x = 1.0; 
     imu_msg.orientation.y = 0.0; 
     imu_msg.orientation.z = 0.0; 
     imu_msg.orientation.w = 0.0; 


     # imu_msg.orientation e imu_msg.orientation_covariance 
     imu_msg.orientation_covariance[0] = -1 

     # imu_msg.linear_acceleration (m/s2) 
     imu_msg.linear_acceleration.x = 0.0 
     imu_msg.linear_acceleration.y = 1.0 
     imu_msg.linear_acceleration.z = 2.0 
     p_cov = np.array([0.0]*9).reshape(3,3) 
     p_cov[0,0] = 0.001 
     p_cov[1,1] = 0.001 
     p_cov[2,2] = 0.001 
     imu_msg.linear_acceleration_covariance = tuple(p_cov.ravel().tolist()) 

     # imu_msg.angular_velocity (rad/sec) 
     imu_msg.angular_velocity.x = 0.0 
     imu_msg.angular_velocity.y = 1.0 
     imu_msg.angular_velocity.z = 2.0 
     p_cov2 = np.array([0.0]*9).reshape(3,3) 
     p_cov2[0,0] = 0.001 
     p_cov2[1,1] = 0.001 
     p_cov2[2,2] = 0.001 
     imu_msg.angular_velocity_covariance = tuple(p_cov2.ravel().tolist()) 

     #rospy.loginfo ("Sending Odometry message...") 
     imu_pub.publish(imu_msg) 

     i = i + 1 
     last_time = current_time 
     current_time = rospy.get_rostime() # in seconds 
     rate.sleep() 
     #end_while 
    #end_def 

if __name__ == '__main__': 
    try: 
     imu_publisher() 
    except rospy.ROSInterruptException: 
     pass