#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
. Примером fprposition_vector_y
может быть[8.924895286560059, 8.924894332885742, 8.924894332885742, 8.924893379211426]
. Я отправляю его в виде списка, но он автоматически принимается в виде кортежа. Не знаю почему, но было бы хорошо, если бы содержимое не было изменено.3. Попробуйте скопировать содержимое массива в новый вместо того, чтобы просто устанавливать ссылку. Возможно, содержимое было перезаписано до того, как оно было отправлено.