Публикация значения, вычисленного в функции в ROS

#python #ros #carla

#python #ros #карла

Вопрос:

Я работаю над ROS для автономной системы вождения. Я определил и вычислил значение «приоритет» в функции следующим образом:

 def odometry_weight_model(velocity, orientation, steering_angle):
    """Odometry based camera view prioritization model"""
    rospy.loginfo(velocity)
    rospy.loginfo(orientation)
    rospy.loginfo(steering_angle)
....
for yaw_ang in CAM_LOC:
        force_dir = yaw_ang   steer_angle
        force = np.array([velocity, force_dir])
        delta = (np.linalg.norm(force)) / (2 * math.pi) * const
        **priority = prio_orig   delta**
 

Теперь я хочу опубликовать значение в ROS через определенного мной издателя. Я создал новую тему и использовал тип ‘Float32’ из пакета ‘std_msgs.msg’, поскольку ‘priority’ — это значение с плавающей запятой. Моя попытка для издателя заключается в следующем:

 def main():
    """Run the view prioritization"""
    rospy.init_node("view_prioritization", anonymous=True)

    role_name = rospy.get_param("~role_name", "ego_vehicle")
    sensor_definition_file = rospy.get_param(
        "~sensor_definition_file",
        "$(find telecarla_manual_control)/config/multi_sensors.json",
    )

    global CAM_LOC
    with open(sensor_definition_file) as sensor_data:
        multi_sensors = json.load(sensor_data)
        CAM_LOC = []
        for i in multi_sensors["sensors"]:
            camera_loc.append(i["yaw"])

    pub = rospy.Publisher(
        "/carla/{role_name}/camera/rgb/view/priority",
        Float32,
        queue_size=10,
    )
    rospy.Subscriber(
        "/carla/{role_name}/vehicle_status",
        CarlaEgoVehicleStatus,
        vehicle_status_callback,
    )
    rate = rospy.Rate(1)
    while not rospy.is_shutdown():
        pub.publish()
        r.sleep()

    rospy.spin()
 

В приведенном выше коде — я создаю эту тему — /carla/{role_name}/camera/rgb/ view/priority — и хотел бы опубликовать значение ‘priority’ в этой теме — однако я не смог найти способ сделать это, я все ещезастрял в том, как отправить это значение приоритета в моей теме, используя только тип Float32 из пакета msg. Любые предложения были бы действительно полезны.

Ответ №1:

Я сам немного нуб, вы не создаете сообщение Float32 для публикации.

msg=Float32(некоторое значение)

публикация в паблике (msg)

Взгляните на базовое руководство по издателю / подписчику ROS — это именно то, что вам нужно

http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber(python)