Отправленный массив не получен должным образом в ROS. Каким-то образом содержимое квантуется

#python #ros

#python #ros

Вопрос:

У меня есть тема, которая генерирует траекторию. Эта траектория запускается с использованием пользовательского сообщения, которое содержит координаты y и x в динамическом массиве с плавающей запятой. Моя проблема в том, что отправленная траектория никогда не публикуется должным образом. Вместо этого при просмотре публикуется траектория с очень низким разрешением с той же длиной rostopic echo /trajectory/ebike .

Когда я печатаю значения position_vector_y и position_vector_x непосредственно перед публикацией, я вижу, что они не совпадают с теми, которые я вижу rostopic echo /trajectory/ebike .

Я использую мелодичный ROS.

Траектория.msg

 ######################################################
# trajectory.msg
######################################################
# ROS timestamp etc.
######################################################
Header header

######################################################
# Position 
######################################################
float32[] m_predicted_x_coordinates_f32
float32[] m_predicted_y_coordinates_f32
 

calcTray.py

 import rospy
from ebike_msgs.msg import Trajectory

ebike_traj = Trajectory()

if __name__ == '__main__':
    # initialize node
    rospy.init_node("trajectory_prediction_node")

    # create publisher
    pub_trajectory_ebike = rospy.Publisher('trajectory/ebike', Trajectory, queue_size=1)

    # define the frequency for publishing the data
    config_frequency = rospy.get_param('frequency', 20)
    rate = rospy.Rate(config_frequency)
    
    # run
    while not rospy.is_shutdown():

        # does some calculation

        # publish Trajectory
        ebike_traj.m_predicted_y_coordinates_f32 = position_vector_y 
        ebike_traj.m_predicted_x_coordinates_f32 = position_vector_x
        pub_trajectory_ebike.publish(ebike_traj)

        rate.sleep()
 

Комментарии:

1. Где position_vector_y установлено?

2. В коде прямо над тем местом, где находится комментарий # does some calculation . Примером fpr position_vector_y может быть [8.924895286560059, 8.924894332885742, 8.924894332885742, 8.924893379211426] . Я отправляю его в виде списка, но он автоматически принимается в виде кортежа. Не знаю почему, но было бы хорошо, если бы содержимое не было изменено.

3. Попробуйте скопировать содержимое массива в новый вместо того, чтобы просто устанавливать ссылку. Возможно, содержимое было перезаписано до того, как оно было отправлено.