1 분 소요

INTRO 🙌

이전 시간에는 CARLA 서버 및 클라이언트 생성 방법에 대해 다뤘다.

이번에는 CARLA 시뮬레이터에서 게임 오브젝트 생성 및 날씨 변경 방법에 대해 알아보자.

코드 분석은 각 라인별 주석으로 대체한다.

GitHub Repository에서 이번 학습 모듈(Learning Task 2 & 3) 파일을 열람할 수 있다.

오브젝트 생성하기 👓

오브젝트 불러오기

CARLA는 친절하게도 월드 blueprint에서 다양한 현실 용례 오브젝트 프리셋을 제공한다.

            world = client.get_world()
            blueprint_library = world.get_blueprint_library()
            cone_bp_1 = blueprint_library.find('static.prop.constructioncone')

world 오브젝트는

상기 코드를 통해, 공사 주의 꼬깔을 담아왔다.

오브젝트 소환 위치

이번 예제에서는 수동으로 무작위 소환 위치를 지정해보자.

            import carla
            transform_1 = carla.Transform(carla.Location(x=-52, y=57, z=0))
            cone_1 = world.spawn_actor(cone_bp_1, transform_1)

image

정상적으로 꼬깔이 생성된 모습이다!

날씨 변경하기 😜

우선, 월드맵 객체에서 날씨 관할 오브젝트를 불러오자.

            weather = world.get_weather()

첫 번쨰 예제로 안개낀 날씨를 구현해보자.

            weather.sun_altitude_angle = -30
            weather.fog_density = 65
            weather.fog_distance = 10
            world.set_weather(weather)

image

두 번째 예제로 비오는 날씨로 세팅해보자.

            weather.sun_altitude_angle = 10
            weather.cloudiness = 10
            weather.precipitation = 80
            weather.precipitation_deposits = 60
            world.set_weather(weather)

image

Autopilot 모드 🧿

하기 코드에서 ‘model3’는 Tesla Model 3 blueprint를 지칭한다.

Tesla 자동차 모델 프리셋 중에서 [0] 첫 번째 모델을 가져온다는 의미이다.

            vehicle_1_bp = blueprint_library.filter('model3')[0] 
            spawn_points = world.get_map().get_spawn_points() # random spawn point
            spawn_point_1 = spawn_points[0] 
            vehicle_1 = world.spawn_actor(vehicle_1_bp, spawn_point_1) # create a vehicle object
            vehicle_1.set_autopilot(True) # autopilot mode turned on
            actor_list.append(vehicle_1) # add the vehicle to the world

라인 vehicle_1.set_autopilot(True) 추가를 통해 해당 자동차 객체에 대해 오토파일럿 모드 지원을 제공한다.

이제, 자동차에 대한 형태에 대한 구현부는 끝났고, 속성 부분을 정의해보자.

자동차 자율주행에서 필요한 속도 및 간격과 같은 속성을 정의하려고 한다.

생성한 월드의 자동차, 표지판 등 모든 교통 정보를 담고있는 객체를 불러오자.

이 객체를 통해, 현재 우리의 타겟 자동차가 다른 자동차와의 간격과 같은 속성을 정의할 것이다.

            tm = client.get_trafficmanager(8000)

우리는 해당 자동차가 다른 자동차와 2 미터 간격을 유지하고 현재 속도에서 20% 정도 빠르게 달리길 원한다.

            current_veh = vehicle_1
            tm.distance_to_leading_vehicle(current_veh,2) # 2미터 간격
            tm.vehicle_percentage_speed_difference(current_veh,-20) # 20% 빠름

이 속성값들을 조정하면서, 난폭 운전을 하는 자율주행 자동차를 직접 응용 구현해보길 추천한다.

시점(Spectator) 변경하기 👀

하기 반복문은 카메라 시점 spectator의 위치와 회전값을 조정한다.

            while True:
                    transform = vehicle_1.get_transform()

                    spectator_location = transform.location + carla.Location(z=20) # 하늘 방향으로 20만큼 줌 아웃
                    spectator_rotation = carla.Rotation(pitch=-90) # 90도 기울여서 보기

image

지면에서 20만큼 떨어진 하늘에서 90도 기울여서 내려다 본 모습으로 카메라 시점을 조정했다.

하기 1인칭 시점은 직접 구현해보길 바란다.

image

Reference

GitHub Repository

UW Madison CARLA Research Team

CARLA Simulator

댓글남기기