[자율주행 시뮬레이터] CARLA 오브젝트 생성, 날씨 변경, Autopilot, Spectator
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)
정상적으로 꼬깔이 생성된 모습이다!
날씨 변경하기 😜
우선, 월드맵 객체에서 날씨 관할 오브젝트를 불러오자.
weather = world.get_weather()
첫 번쨰 예제로 안개낀 날씨를 구현해보자.
weather.sun_altitude_angle = -30
weather.fog_density = 65
weather.fog_distance = 10
world.set_weather(weather)
두 번째 예제로 비오는 날씨로 세팅해보자.
weather.sun_altitude_angle = 10
weather.cloudiness = 10
weather.precipitation = 80
weather.precipitation_deposits = 60
world.set_weather(weather)
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도 기울여서 보기
지면에서 20만큼 떨어진 하늘에서 90도 기울여서 내려다 본 모습으로 카메라 시점을 조정했다.
하기 1인칭 시점은 직접 구현해보길 바란다.
댓글남기기