image_parser = IMGParser()
    bev_op = BEVTransform(params_cam=params_cam)
    curve_learner = CURVEFit(order=1)

    rate = rospy.Rate(20)

    while not rospy.is_shutdown():

        if image_parser.edges is not None:

            img_warp = bev_op.warp_bev_img(image_parser.edges)
            lane_pts = bev_op.recon_lane_pts(image_parser.edges)

            x_pred, y_pred_l, y_pred_r = curve_learner.fit_curve(lane_pts)

            curve_learner.write_path_msg(x_pred, y_pred_l, y_pred_r)

            curve_learner.pub_path_msg()

            xyl, xyr = bev_op.project_lane2img(x_pred, y_pred_l, y_pred_r)

            img_warp1 = draw_lane_img(img_warp, xyl[:, 0].astype(np.int32),
                                      xyl[:, 1].astype(np.int32),
                                      xyr[:, 0].astype(np.int32),
                                      xyr[:, 1].astype(np.int32))

            cv2.imshow("Image window", img_warp1)
            cv2.waitKey(1)

            rate.sleep()
Ejemplo n.º 2
0
            # 카메라 이미지를 BEV이미지로 변환
            img_bev = bev_trans.warp_bev_img(img_wlane)
            # 카메라 이미지에서 차선에 해당하는 포인트들을 추출
            lane_pts = bev_trans.recon_lane_pts(img_wlane)

            # 추출한 포인트를 기반으로 차선을 예측
            x_pred, y_pred_l, y_pred_r = pts_learner.fit_curve(lane_pts)

            # 예측한 차선을 Path로 변환하여 메세지의 데이터를 작성
            pts_learner.write_path_msg(x_pred, y_pred_l, y_pred_r)
            # 예측한 차선을 publish topic: /lane_path
            pts_learner.pub_path_msg()

            # 예측한 차선 포인트들을 이미지에 넣기 위해서 변환
            xyl, xyr = bev_trans.project_lane2img(x_pred, y_pred_l, y_pred_r)

            # 예측한 차선 포인트들을 BEV이미지에 넣기
            img_bev_line = draw_lane_img(
                img_bev,
                xyl[:, 0].astype(np.int32),  # 예측한 차선 포인트들을 BEV이미지에 출력
                xyl[:, 1].astype(np.int32),
                xyr[:, 0].astype(np.int32),
                xyr[:, 1].astype(np.int32),
            )

            cv2.imshow('BEV Window', img_bev_line)
            cv2.waitKey(1)

            rate.sleep()