#include <vector>
#include <queue>
#include <iostream>

using namespace std;

int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};

int visited[100][100];

int solution(vector<vector<int> > maps)
{
    int answer = 100 * 100 + 1;
    int n = maps.size(), m = maps[0].size();
    
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
            visited[i][j] = 0;
    }
    
    // pos, depth
    queue<pair<pair<int, int>, int>> q;
    q.push({{n - 1, m - 1}, 1});
    
    while(!q.empty())
    {
        auto [pos, depth] = q.front();
        q.pop();
        
        int h = pos.first, w = pos.second;
        if (h == 0 && w == 0)
        {
            answer = min(answer, depth);
            continue;
        }
        
        if (depth >= answer)
            continue;
        
        if (visited[h][w] == 1)
            continue;
        visited[h][w] = 1;
        for (int i = 0; i < 4; i++)
        {
            int nextY = h + dy[i];
            int nextX = w + dx[i];
            
            if (nextY < 0 || nextY > n - 1 || nextX < 0 || nextX > m - 1 || maps[nextY][nextX] == 0 || visited[nextY][nextX] == 1)
                continue;
            
            q.push({{nextY, nextX}, depth + 1});
        }
    }
    
    return answer == 10001 ? -1 : answer;
}

'알고리즘' 카테고리의 다른 글

프로그래머스 - 네트워크 (c++)  (0) 2025.02.23
프로그래머스 - 주식 가격 (c++)  (0) 2025.02.23
Lv. 3 나무 섭지 - C++  (0) 2024.12.10
Lv. 3 징검다리 - C++  (0) 2024.12.10
Lv. 3 함께하는 효도 - C++  (0) 2024.12.10

1. 코드

#include <iostream>
#include "windows.h"

using namespace std;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow)
{

    AllocConsole(); // 새로운 콘솔 창 생성
    FILE* pStreamOut = nullptr;
    freopen_s(&pStreamOut, "CONOUT$", "w", stdout);

    cout << "HELLO" << endl;

    Sleep(1000);

    cout << "Bye" << endl;

    Sleep(1000);

    fclose(pStreamOut);
    FreeConsole();
}

 

AllocConsole() 함수로 새로운 콘솔 창 생성

이후 freopen_s으로 표준 출력을 새로 생긴 pStreamOut이라는 콘솔 스트림으로 리디렉션 해줘야함

2. freopen_s 함수 시그니처

errno_t freopen_s(
    FILE** stream,       // 리디렉션된 스트림의 포인터를 저장할 변수
    const char* filename, // 새로운 출력 대상 (파일 경로 또는 특수 장치 이름)
    const char* mode,     // 파일 열기 모드 ("r", "w", "a" 등)
    FILE* old_stream      // 기존 표준 스트림(stdout, stdin, stderr 등)
);

 

old_stream의 stdout으로 리디렉션될 출력은 std::cout 및 printf 호출에 적용된다.

스트림을 닫기전까지는 호출한 상태 그대로 적용된다는 것을 명심.

 

Visual Studio 2022 그래픽스 디버깅

 

Visual Studio 에서 DirectX12 이전 버전에서는 결과를 디버깅해보려면 위의 디버깅을 진행하면 되었던걸로 기억하는데

DirectX12는 PIX라는 디버깅 툴을 사용하기를 권장한답니다.

 

1. 설치

https://devblogs.microsoft.com/pix/download/ 여기서 최근 버전 설치

실행하시면 위와같이 보일텐데, 지금까지 전 Attach 기능만 사용해봤습니다. Attach는 실행중인 프로그램에 연결할수있는겁니다. 그리고 꼭 For GPU Capture를 클릭해주셔야합니다. 안그럼 GPU 캡처가 안될겁니다.

 

2. 사용법

본인의 코드에 PIX 코드를 입력해야합니다

https://devblogs.microsoft.com/pix/taking-a-capture/ 여기 들어가보면, 위 처럼 나와있는데, C++17 버전 코드고, 그 이전버전 C++ 코드도 있으니, 본인의 C++ 버전에 맞게 추가하시면됩니다.

 

실행 코드(사이트에 있음)는 위와 같습니다. 저는 앱 초기화 할때 맨 처음에 실행해줍니다.

그리고 자신의 DirectX12 프로그램을 실행하고, 위 사진처럼 선택후, Attach를 하면

이렇게 캡처본이 뜹니다. 그러고 저 캡처본을 더블클릭하면

위처럼 명령 흐름을 알수있게되죠.

#include <iostream>
#include <utility>
#include <vector>
#include <queue>

using namespace std;

int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
int n, m;
pair<int, int> s;
vector<pair<int, int>> g;
char maze[1001][1001];
bool visited[1001][1001];

int get_ghost_min_dist(int h, int w, vector<pair<int, int>>& ghost) {
    int dist = 2001;
    for (auto& g : ghost) {
        dist = min(dist, abs(h - g.first) + abs(w - g.second));
    }
    return dist;
}

bool bfs(pair<int, int> start, vector<pair<int, int>>& ghost) {
    queue<pair<pair<int, int>, int>> q;  // ((y, x), depth)
    q.push({start, 0});
    visited[start.first][start.second] = true;

    while (!q.empty()) {
        auto [pos, d] = q.front();
        int h = pos.first, w = pos.second;
        q.pop();

        if (maze[h][w] == 'D') {
            cout << "Yes" << endl;
            return true;
        }

        if (d >= get_ghost_min_dist(h, w, ghost)) {
            visited[h][w] = true;
            continue;
        }

        for (int i = 0; i < 4; i++) {
            int next_y = h + dy[i];
            int next_x = w + dx[i];
            if (next_y >= 0 && next_y < n && next_x >= 0 && next_x < m && !visited[next_y][next_x] && maze[next_y][next_x] != '#') {
                visited[next_y][next_x] = true;
                q.push({{next_y, next_x}, d + 1});
            }
        }
    }

    return false;
}

int main(int argc, char** argv) {
    cin >> n >> m;

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            cin >> maze[i][j];
            visited[i][j] = false;
            if (maze[i][j] == 'N') {
                s = {i, j};
            }
            else if (maze[i][j] == 'G') {
                g.push_back({i, j});
            }
        }
    }

    if (!bfs(s, g)) {
        cout << "No" << endl;
    }

    return 0;
}

핵심은 bfs 돌면서
1. '지금 위치에서 유령들과의 거리의 최소값'
2. '시작위치에서 지금 위치까지의 거리'
를 비교해서 1이 더 작거나 같으면, 유령이 우리 남우씨를 잡게되니까 그 위치는 탐색중단합니다

'알고리즘' 카테고리의 다른 글

프로그래머스 - 주식 가격 (c++)  (0) 2025.02.23
프로그래머스 - 게임 맵 최단거리 (c++)  (0) 2025.02.23
Lv. 3 징검다리 - C++  (0) 2024.12.10
Lv. 3 함께하는 효도 - C++  (0) 2024.12.10
Lv. 3 자동차 테스트  (0) 2024.12.10
#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char** argv)
{
    int n;
    cin >> n;

    vector<int> arr(n);
    vector<int> dp(n, 1);
    
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }

    int result = 1;
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
           if (arr[i] < arr[j]) {
               dp[j] = max(dp[j], dp[i] + 1);
               result = max(result, dp[j]);
           }
        }
    }

    cout << result << endl;
    
    return 0;
}

시간 복잡도 : n^2
n이 3000이라 제곱이여도 가능

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int m_s;
int dir[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
int n, m;
vector<pair<int, int>> path_copy;

void dfs(vector<vector<int>>& arr, vector<vector<bool>>& visited, int y, int x, int d, int s, vector<pair<int, int>> path) {

    if (visited[y][x]) {
        return ;
    }
    
    visited[y][x] = true;
    path.push_back({y, x});
    
    if (d >= 3) {
        visited[y][x] = false;
        // m_s 갱신
        if (m_s < s) {
            m_s = s;
            path_copy = path;
        }
        return ;
    }

    for (int i = 0; i < 4; i++) {
        int next_y = y + dir[i][0];
        int next_x = x + dir[i][1];
        if (0 <= next_y && next_y < n && 0 <= next_x && next_x < n && !visited[next_y][next_x]) {
            dfs(arr, visited, next_y, next_x, d + 1, s + arr[next_y][next_x], path);
        }
    }
    visited[y][x] = false;

}

int main(int argc, char** argv)
{
    cin >> n >> m;

    vector<vector<int>> arr(n, vector<int>(n));
    vector<vector<bool>> visited(n, vector<bool>(n, false));

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            cin >> arr[i][j];
        }
    }

    vector<pair<int, int>> lo(m);

    for (int i = 0; i < m; i++) {
        int y, x;
        cin >> y >> x;
        lo[i] = {y - 1, x - 1};
        visited[y - 1][x - 1] = true;
    }

    vector<int> p(m);

    for (int i = 0; i < m; i++) {
        p[i] = i;
    }

    int result = 0;
    vector<vector<bool>> initial_visited = visited;
    do {
        int all_s = 0;
        for (int j = 0; j < m; j++) {
            auto l = lo[p[j]];
            int y = l.first;
            int x = l.second;
            visited[y][x] = false;
            vector<pair<int, int>> path;
            m_s = 0;
            dfs(arr, visited, y, x, 0, arr[y][x], path);
            for (auto& p : path_copy) {
                visited[p.first][p.second] = true;
            }
            path_copy.clear();
            all_s += m_s;
        }
        visited = initial_visited;
        result = max(all_s, result);
    } while (next_permutation(p.begin(), p.end()));
    cout << result << endl;
    return 0;
}

경로를 알아야하기때문에 dfs 사용
중요한 부분은 각 친구들의 위치 정보에 대한 순열이 필요한 것인데,
모든 순열에 대해서 최대 수확량을 계산해줘야함
그렇지 않으면, 예를 들어 1번 친구가 2번 친구의 최대 수확량 경로를 침범해서 최대 수확량이 안될수가 있기때문

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int binarySearch(vector<int>& arr, int n, int m) {
    int lo = 0;
    int hi = n - 1;

    while (lo <= hi) {
        int mid = lo + (hi - lo) / 2;
        if (arr[mid] == m)
            return mid;
        else if (arr[mid] < m) {
            lo = mid + 1;
        }
        else if (arr[mid] > m) {
            hi = mid - 1;
        }
    }
    return -1;
}

int main(int argc, char** argv)
{
    int n, q;
    cin >> n >> q;

    vector<int> arr(n);
    
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }

    sort(arr.begin(), arr.end());

    for (int i = 0; i < q; i++) {
        int m;
        cin >> m;

        if (m == arr[0] || m == arr[n - 1])
            cout << "0" << endl;
        else {
            // auto f = find(arr.begin(), arr.end(), m);
            int l = binarySearch(arr, n, m);
            if (l != -1) {
                cout << l * (n - l - 1) << endl;
            }
            else {
                cout << "0" << endl;
            }
        }
    }
    
    return 0;
}

정렬 때리고, m 값이 정렬된 배열의 처음이나 마지막 값이면, 0 출력
그렇지 않다면, m의 위치 정보를 찾아야하는데, find는 O(n)이기때문에 느리기에 이진탐색 사용해서 찾고, 있으면, 위치 * (n - 위치 - 1) 반환, 없으면 0

CARLA RELEASE

0.9.15

변경 사항

  • 디지털 트윈(Digital Twins) 기능 버전 0.1 추가: 이제 OpenStreetMaps를 기반으로 자체 맵을 생성할 수 있습니다.
  • NVIDIA Omniverse를 사용하여 SymReady Assets와의 호환성 추가
  • 새로운 맵 추가: Town13 (대형 맵) 및 Town15
  • 스펙테이터(spectator)의 역할 변경: 큰 맵에서 'ego_vehicle' 또는 'hero' 역할의 액터가 없을 때 타일과 액터를 로드하는 데 사용됩니다. 사용자들이 이 동작을 비활성화할 수 있도록 carla.WorldSettings()spectator_as_ego를 추가했습니다.
  • TrafficManager Python API 함수에 키워드 인자 추가
  • Windows에서 VS2022와 Ninja를 사용한 LibCarla와 osm2odr의 빌드 지원 추가
  • 빈 액터 추가
  • 감마 값이 2.4에서 2.2로 복원됨
  • CarlaExporter 도구 개선: 객체에 박스 콜라이더나 컨벡스 콜라이더가 있으면 이를 내보내고, 없으면 메쉬를 내보냅니다.
  • 보행자 AI 및 리플레이어 성능 향상: 약 10배 빠르게 개선되었습니다. 차량과 충돌할 때까지 충돌이 비활성화됩니다.
  • 스펙테이터를 재생하지 않도록 하는 API 함수 추가:
    • Client.set_replayer_ignore_spectator(bool)
    • start_replaying.py에서 -move-spectator 플래그 사용
  • 비 Unity 빌드 모드 노출: makeARGS=--no-unity를 전달하여 IWYU 유형의 오류를 찾아 수정할 수 있습니다.
  • 문서에 맵, 차량, 보행자 및 소품 카탈로그 추가
  • CollisionSensor에 의해 감지된 충돌이 프레임당 하나 이상의 이벤트를 생성하지 않도록 수정
  • 현재 맵과 다른 경우에만 맵을 로드하는 API 함수 추가
  • 차선 변경 중 비정상적인 동작을 하던 차량의 TrafficManager 버그 수정
  • 특정 상황에서 TM의 unstuck 로직이 차량을 잘못 제거하던 버그 수정
  • DirectX 텍스처의 추가 데이터를 수정하여 이미지의 여분 바이트를 제거하기 위해 Windows에서 행별로 복사 필요
  • CarlaExporter에서 65k 이상의 버텍스를 가진 큰 메쉬의 버텍스 수정
  • 스트림이 준비되었는지 확인하도록 센서 수정 (레이스 컨디션 해결)
  • 픽셀 배열이 올바르게 설정되지 않아 충돌하던 FPixelReader::SavePixelsToDisk(PixelData, FilePath) 함수의 버그 수정
  • Python 3.10에서 잘못된 GIL 잠금으로 인해 발생하던 Python API의 세그먼트 오류 수정
  • 여러 TilesInfo.txt 파일이 있는 경우 다른 파일을 사용할 수 있던 임포트 스크립트 버그 수정

0.9.14

변경 사항

  • 간헐적으로 서버 세그먼트 오류를 일으키던 FrictionTrigger의 버그 수정
  • 시네마틱 카메라를 위한 "SpringArmGhost" 부착 유형 추가: 충돌 테스트 없이 사용 가능합니다.
  • 신호를 도로 밖으로 이동시키는 알고리즘 개선: 원하는 변위 방향을 계산합니다.
  • TrafficManager.vehicle_lane_offset(actor, offset)TrafficManager.global_lane_offset(offset) 메서드 추가
  • 맵을 빌드할 때 표시되던 일부 경고는 이제 디버깅 시에만 표시됩니다.
  • 시맨틱 분할의 ID가 cityscapes와 동일하게 수정되었습니다 (레이블, ID 및 색상)
  • 도로의 끝 지점에 있는 교통 신호가 종종 잘못된 웨이포인트를 생성하던 버그 수정
  • 보행자 스켈레톤 프레임 수정: 때때로 몸체에서 벗어나 그려지던 문제 해결
  • 맵을 가져올 때 데칼 수정: 다른 패키지에 있는 다른 .json 파일을 사용하던 문제 해결
  • 멀티 GPU 모드에서 일부 센서는 항상 기본 서버에서 생성되도록 강제됨 (예: 충돌 센서)
  • 100, 110 및 120 km/h의 속도 제한 추가
  • 센서 소멸 수정: 이제 스트림과 소켓이 성공적으로 소멸됩니다.
  • Vehicle.get_traffic_light_state()Vehicle.is_at_traffic_light()에서 차량이 녹색으로 변하기 전에 교통 신호로부터 정보를 일시적으로 잃지 않도록 하는 버그 수정
  • 자동 생성 지점의 높이 변경: 3m에서 0.5m로 변경
  • 추가 데이터로 기록기에 보행자 스켈레톤 추가: 정확한 포즈로 재생됩니다.
  • 멀티 GPU 기능 추가: 이제 여러 서버(전용 GPU 사용)가 동일한 시뮬레이션에 대한 센서를 렌더링할 수 있습니다.
  • Vehicle.get_traffic_light_state() 함수가 녹색에서 노란색, 노란색에서 빨간색으로 변할 때 상태 변화를 알리지 않던 버그 수정
  • Vehicle.is_at_traffic_light() 함수가 교통 신호가 녹색일 때 거짓을 반환하던 버그 수정
  • 큰 맵에서 장면 조명이 잘못된 위치를 반환하던 버그 수정
  • world.ground_projection() 함수가 큰 맵에서 잘못된 위치를 반환하던 버그 수정
  • 차량에 실패 상태를 추가: Vehicle.get_failure_state()를 사용하여 가져올 수 있습니다. 현재는 롤오버 실패 상태만 지원됩니다.
  • 물리 엔진이 없는 차량이 이동되었을 때 TM이 시뮬레이션을 차단하던 버그 수정
  • 자기 자신을 루프하는 짧은 도로를 이동할 때 TM이 시뮬레이션을 차단하던 버그 수정
  • TM의 비신호 교차로 처리 개선: 전반적인 동작이 더욱 원활해졌습니다.
  • 교차로 내부에 절차적 트리거 박스를 추가하지 않도록 검사 추가
  • Python 에이전트는 이제 carla.MapGlobalRoutePlanner 인스턴스를 입력으로 받아 재계산할 필요가 없습니다.
  • Python 에이전트에 차선 변경 기능 추가
  • Python 에이전트는 오프셋으로 인해 침범된 경우 인접 차선의 차량을 감지합니다.
  • 주변에 여러 액터가 있을 때 Python 에이전트가 때때로 차단 액터를 감지하지 못하던 버그 수정
  • 큰 맵에서 Python 에이전트의 성능 향상
  • Map.get_topology()에서 버그 수정: 후속 차선이 없는 차선이 포함되지 않던 문제 해결
  • 새로운 ConstantVelocityAgent 추가
  • TrafficManager에 새로운 매개변수 추가: set_desired_speed로 차량의 속도를 설정합니다.
  • 모든 차량에 4개의 새로운 속성 추가:
    • base_type: 차량 분류에 사용됩니다. 가능한 값은 car, truck, van, motorcycle, bicycle입니다.
    • special_type: 차량에 대한 추가 정보를 제공합니다. 현재 electric, emergency, taxi로 제한되며, 모든 차량이 이 속성을 가진 것은 아닙니다.
    • has_dynamic_doors: 차량에 API를 사용하여 열 수 있는 문이 있는지 여부 (true 또는 false)
    • has_lights: 차량에 조명이 있는지 여부 (true 또는 false)
  • 네이티브 아커만(Ackermann) 컨트롤러 추가:
    • apply_ackermann_control: 차량에 아커만 제어 명령을 적용합니다.
    • get_ackermann_controller_settings: 마지막으로 적용된 아커만 컨트롤러 설정을 가져옵니다.
    • apply_ackermann_controller_settings: 새로운 아커만 컨트롤러 설정을 적용합니다.
  • 하이브리드 모드 사용 시 Traffic Manager가 결정적이지 않던 버그 수정
  • NormalsSensor 추가: 노멀 정보가 포함된 새로운 센서
  • N개의 바퀴를 가진 차량 지원 추가
  • 새로운 배치 명령 지원 추가: ConsoleCommand, ApplyLocation (액터에 적용), SetTrafficLightState
  • 새로운 API 함수 추가: LightManager에서 set_day_night_cycle로 시뮬레이션이 낮에서 밤 모드로, 또는 그 반대로 변경될 때 조명의 자동 전환을 활성화/비활성화할 수 있습니다.
  • RPC Command에 대해 boost::variant2로 전환: 20개 이상의 RPC 명령을 허용합니다.
  • 비, 먼지 날씨에 대한 후처리 효과 추가
  • 먼지 폭풍 날씨 매개변수를 bool에서 float로 데이터 타입 변경
  • 빌드 중 설치된 Clang 컴파일러 버전 확인 추가
  • 센서의 GBuffer 텍스처에 직접 액세스할 수 있는 API 함수 추가:
    • listen_to_gbuffer: 특정 GBuffer 텍스처에 대한 콜백을 설정합니다.

0.9.13

변경 사항

  • 새로운 인스턴스 인식 시맨틱 분할 센서 추가: sensor.camera.instance_segmentation
  • 새로운 API 클래스 추가: MaterialParameter, TextureColor, TextureFloatColor로 텍스처 데이터 및 필드(노멀 맵, 디퓨즈 등)를 인코딩합니다.
  • 새로운 API 함수 추가: apply_color_texture_to_object, apply_float_color_texture_to_object, apply_textures_to_object로 런타임에 객체를 페인팅합니다.
  • Traffic Manager에서 RoadOption 요소를 사용하여 차량에 경로를 설정할 수 있는 옵션 추가
  • 캐시에 현재 CARLA 버전과 함께 추가 폴더가 있습니다 (버전별 다른 캐시 사용)
  • set_percentage_random_left_lanechangeset_percentage_random_right_lanechange 추가
  • Traffic Manager에서 매우 높은 속도로 주행할 때 충돌 처리 개선
  • 차량 문의 물리적 시뮬레이션 추가: 열고 닫을 수 있습니다.
  • 차량 문을 열고 닫는 기능 추가
  • 3D 벡터에 API 함수 추가: squared_length, length, make_unit_vector, dot, dot_2d, distance, distance_2d, distance_squared, distance_squared_2d, get_vector_angle
  • 2D 벡터에 API 함수 추가: squared_length, length, make_unit_vector
  • 보행자에 대한 시드를 추가하여 재현성 향상
  • 새로운 API 함수 set_pedestrians_seed 추가
  • generate_traffic.py 스크립트에 새로운 매개변수 -seedw 추가
  • 필요한 종속성 libomp5Release.Dockerfile에 추가
  • 보행자 뼈대를 다루기 위한 API 함수 추가:
    • get_bones / set_bones: 보행자의 뼈대를 가져오거나 설정합니다.
    • blend_pose: 사용자 정의 포즈를 현재 애니메이션과 블렌딩합니다.
    • show_pose / hide_pose: 사용자 정의 포즈를 표시하거나 숨깁니다.
    • get_pose_from_animation: 현재 애니메이션 프레임으로 사용자 정의 포즈를 설정합니다.
  • 클라이언트 측에서 보행자의 뼈대를 그리는 새로운 스크립트 PythonAPI/examples/draw_skeleton.py 추가
  • Python 에이전트의 충돌 감지 개선
  • Traffic Manager에 VehicleLightStage를 추가하여 차량 조명을 동적으로 업데이트합니다.
  • PythonAPI/util에 두 개의 새로운 예제 추가:
    • OpenStreetMaps를 OpenDRIVE 맵으로 변환하는 osm_to_xodr.py
    • 맵 스폰 포인트를 추출하는 extract_spawn_points.py
  • 소품 없이 소품을 가져오는 문제 수정
  • 차선 표시가 없는 맵을 사용할 때 글로벌 라우트 플래너 크래시 수정
  • 기록 모드에서 차량이 환경 객체와 충돌할 때 서버가 세그먼트 오류를 일으키던 버그 수정
  • RSSSensor 수정: 클라이언트 측 계산을 스레드화함
  • keep_right_rule 매개변수 수정

0.9.12

변경 사항

  • Unreal Engine 4.26으로 업그레이드
  • Windows에서 CARLA는 이제 Visual Studio 2019로 빌드됩니다.
  • 옵티컬 플로우 카메라 추가
  • Traffic Manager에서 캐시된 맵의 해상도를 0.1에서 5미터로 변경
  • 차량 및 보행자에 generation 속성 추가
  • CarSim 통합을 위한 Lincoln 2020 차량 치수 추가
  • RPC 및 스트림 소켓에 no_delay 옵션 활성화
  • CARLA는 이제 최신 RoadRunner 명명법과 호환됩니다.
  • *도로(R

OAD_ROAD), 보도(ROAD_SIDEWALK) 등의 특별한 명명법은 자산 이름의 어느 위치에서든 사용할 수 있습니다.**

  • 성능 벤치마크 스크립트 개선: 동기화, 맵 및 센서 선택 등
  • 성능 향상: 물리학이 비활성화된 차량의 PhysX 상태를 제거했습니다.
  • 많은 수의 코어를 가진 시스템에서 레이캐스트 센서의 병렬 처리 개선
  • manual_control 개선: 이제 카메라 위치가 차량 크기에 따라 설정됩니다.
  • visualize_multiple_sensors 예제 추가
  • check_lidar_bb 유틸 스크립트 추가
  • 클라이언트의 replay_file()replay_sensors 옵션 추가하여 센서의 재생 활성화/비활성화
  • 필요한 클라이언트 파일이 서버에서 로컬 캐시로 전송됩니다 (OpenDRIVE, Traffic Manager 등)
  • make 임포트 프로세스를 확장하여 로드 페인터 재질을 적용합니다 (carla art tool)
  • 로드 페인터 재질을 적용하기 위한 사용자 지정 JSON 파일 생성 추가
  • osm2odr에서 ProjString 구문 분석 오류 수정
  • UE4용 익스포터 플러그인 추가로 Recast 계산을 위해 준비된 메쉬를 내보낼 수 있습니다.
  • Chrono 라이브러리 추가로 차량 동역학 시뮬레이션 지원:
    • JSON 차량 정의 지원
    • 충돌 역학은 지원되지 않음
  • CARLA에 대형 맵 기능 추가: 맵을 최대 2km x 2km의 정사각형 타일로 나눠서 가져올 수 있습니다. 대형 맵의 일부만 한 번에 로드할 수 있어, 주인공 차량에서 멀리 떨어진 액터들은 슬립 상태로 전환됩니다.
  • 성능 벤치마킹 섹션을 문서에 추가
  • ApplyVehiclePhysicsControl을 명령에 추가
  • Sublevel 로딩에서 플러시를 추가하여 Opt 맵에서 CARLA의 결정성을 증가
  • sumo_integration 모듈을 다른 스크립트에서 가져올 때 오류 수정
  • is_within_distance_ahead에서 API 변경으로 인한 에이전트 충돌 수정
  • FBX 이름에 _가 포함된 경우 맵을 가져올 때의 버그 수정
  • carla.Transform.get_up_vector()의 버그 수정
  • LiDAR 채널 포인트 수 버그 수정
  • IMU 센서에서 일부 이상한 경우에 nan 값을 주던 문제 수정
  • apply_physics_controlfriction trigger에서 버그 수정
  • 종횡 방향 및 종방향 강성에 대한 타이어 매개변수를 PhysicsControl에 노출
  • 로컬 플래너에서 글로벌 플랜을 설정할 때 웨이포인트 버퍼의 자동 채우기를 중지하는 것이 선택 사항이 되었습니다.
  • 에이전트의 차량 감지를 개선하여 액터 바운딩 박스를 고려합니다.
  • Python 에이전트 API 개선: 이전 동작이 개선되고 새로운 동작이 추가되어 에이전트의 기능이 향상되었습니다. 여러 버그도 수정되었습니다.

0.9.11

변경 사항

  • HTML 태그를 마크다운 등가물로 변환하여 pandoc 도구에 사용할 수 있도록 문서 개선
  • 문서의 FAQ 섹션을 최소한의 HTML을 사용하도록 리팩터링하고 깨진 레이아웃 수정
  • 로컬 플래너에 측면 오프셋 추가
  • Windows에서 DirectX 12로 업그레이드
  • 시뮬레이터를 위한 새로운 코어 파이프라인 추가
  • 카를라 설정에 컬링을 제어하는 매개변수 추가
  • Traffic Manager에 결정적 모드 추가: 차량 ID별로 정렬하고 경쟁 조건을 피합니다.
  • 휠 모양에 대한 충돌을 스위프할 수 있는 옵션 추가: 이를 위해 엔진 패치가 필요합니다.
  • 클라이언트에서 물리학 서브스텝핑 옵션을 변경할 수 있는 가능성 추가
  • 센서에 noise_seed 추가하여 난수 생성기 초기화
  • API 확장:
    • actor.set_enable_gravity() 함수 추가: 액터에 영향을 미치는 중력을 활성화/비활성화합니다.
    • 새로운 맵에서 서브레벨링을 지원하는 경우 맵 레이어를 로드하고 언로드하는 load_map_layerunload_map_layer 추가
    • 레벨에 배치된 모든 객체를 가져오는 get_environment_objects 호출 추가
    • 레벨의 객체를 활성화/비활성화하는 enable_environment_objects 호출 추가
    • 수평 FOV를 제한할 수 있는 라이다 센서에 horizontal_fov 매개변수 추가
    • 월드 설정에 deterministic_ragdolls 추가하여 결정론적 또는 물리 기반 래그돌을 활성화
  • RSSSensor Python3 빌드 및 OpenDRIVE 맵 가져오기 수정: ad-rss v4.2.0 및 ad-map-access v2.3.0으로 업데이트
  • Python의 종속 ad 모듈의 가져오기가 C++ 인터페이스의 네임스페이스를 반영하고 doxygen 문서를 따릅니다.
  • IMU 및 카메라 기반 센서에서 센서 변환 및 센서 데이터 변환 불일치 수정
  • 고속 프레임 속도에서 동기화 모드의 랜덤 데드락 수정
  • Windows에서 태양 반사 아티팩트를 일으키던 버그 수정
  • waypoint.get_landmarks()에서 s = 0일 때 일부 랜드마크를 놓치던 버그 수정
  • 보행자와 차량에 대한 actor.set_simulate_physics() 수정
  • 카메라 기반 센서가 데이터 전송을 중지하던 버그 수정
  • 레이캐스트 센서의 출력에 대한 결정론 부족 수정
  • OpenDRIVE 맵 변환 시 누락된 laneChange 레코드 수정
  • 시맨틱 라이다에서 액터의 ID를 반환하던 버그 수정
  • -config 매개변수를 make package에서 사용할 때 오류 수정
  • 패키지의 Xerces-c 라이브러리 종속성 수정
  • 문서의 시뮬레이션 데이터 섹션에서 사소한 오타 수정
  • config.py.osm 파일을 적절한 utf-8 인코딩으로 읽도록 수정

0.9.10.1

변경 사항

  • API 확장:
    • actor.set_enable_gravity() 함수 추가: 액터에 영향을 미치는 중력을 활성화/비활성화합니다.
  • Windows에서 DirectX 12로 업그레이드
  • Windows에서 태양 반사 아티팩트를 일으키던 버그 수정
  • 보행자와 차량에 대한 actor.set_simulate_physics() 수정
  • 카메라 기반 센서가 데이터 전송을 중지하던 버그 수정
  • 패키지의 Xerces-c 라이브러리 종속성 수정

0.9.10

주요 내용

  • 레벨의 모든 요소에 대한 바운딩 박스 검색 기능 추가
  • Traffic Manager에 결정적 모드 추가
  • Traffic Manager에서 막다른 길 지원 추가
  • CARLA Docker 이미지를 Ubuntu 18.04로 업그레이드
  • AD RSS v4.1.0으로 업그레이드하여 비구조화된 장면과 보행자 지원, spdlog를 v1.7.0으로 고정
  • 교통 신호의 동결 동작 변경: 이제 모든 교통 신호에 동시에 영향을 미칩니다.
  • 새로운 보행자 모델 추가

API 변경 사항

  • actor.set_velocity()actor.set_target_velocity()로 이름 변경
  • actor.set_angular_velocity()actor.set_target_angular_velocity()로 이름 변경
  • RGB 카메라의 노출 모드가 이제 기본적으로 히스토그램으로 설정됨

API 확장

  • carla.Osm2Odr.convert() 함수 및 carla.Osm2OdrSettings 클래스 추가: Open Street Maps를 OpenDRIVE로 변환 지원
  • world.freeze_all_traffic_lights()traffic_light.reset_group() 추가
  • client.stop_replayer() 추가: 리플레이어를 중지합니다.
  • world.get_vehicles_light_states() 추가: 모든 차량의 라이트 상태를 한 번에 가져옵니다.
  • 상수 속도 모드 추가: actor.enable_constant_velocity() / actor.disable_constant_velocity()
  • 모든 액터에 각속도를 추가할 수 있는 함수 actor.add_angular_impulse() 추가
  • actor.add_force()actor.add_torque() 함수 추가
  • transform.get_right_vector()transform.get_up_vector() 함수 추가
  • 여러 차량 라이트 상태를 한 번에 설정하는 명령 추가
  • 4x4 행렬 형태의 변환 추가
  • 새로운 시맨틱 분할 태그 추가: RailTrack, GuardRail, TrafficLight, Static, Dynamic, Water, Terrain
  • 가로등 및 빌딩 라이트에 고정 ID 추가
  • 차량 라이트 및 가로등 데이터를 기록기에 추가
  • 충돌 및 물리를 모든 차량에 대해 개선
  • 이제 모든 센서는 멀티 스트림 지원: 동일한 센서를 다른 클라이언트에서 들을 수 있습니다.
  • 새로운 시맨틱 LiDAR 센서 (lidar.ray_cast_semantic) 추가
  • open3D_lidar.py 추가: 더 친숙한 LiDAR 시각화 도구
  • make 명령에 플러그인으로 기여 내용을 다운로드하는 옵션 추가 (make plugins)
  • SpringArm이 부착된 액터의 'z' 축에 정확히 있을 때 경고 추가
  • 레이캐스트 기반 센서의 성능을 병렬화를 통해 개선
  • LiDAR 센서의 각 포인트에 대한 강도의 근사치 추가
  • 동적 비전 센서(DVS) 카메라 추가: ESIM 시뮬레이션 기반 (http://rpg.ifi.uzh.ch/esim.html)**
  • LiDAR 및 레이더를 개선하여 차량의 모양과 더 잘 일치하도록 수정
  • 추가 TraCI 클라이언트를 SUMO 코시뮬레이션에 대한 지원 추가
  • 클라이언트에서 센서 데이터를 수집하는 것을 동기화하는 스크립트 예제 추가
  • OpenDRIVE에서 레인 너비 파라미터가 누락된 차선에 대해 기본값과 경고 메시지 추가
  • 독립 실행형 모드에서 보행자 내비게이션을 활성화/비활성화하는 매개변수 추가
  • 독립 실행형 모드에서 메쉬 파티션 개선
  • Unreal 프로젝트에 Renderdoc 플러그인 추가
  • LiDAR 센서에 구성 가능한 노이즈 추가
  • 사용되지 않는 platform.dist()를 권장되는 distro.linux_distribution()으로 대체
  • 캡처 센서의 성능 개선

수정 사항

  • 차량의 질량 중심 수정
  • 여러 OpenDRIVE 파싱 버그 수정
  • 차량의 바운딩 박스 수정: 이제 자동입니다.
  • Traffic Manager가 동기 모드에서 맵 변경 오류 수정
  • Traffic Manager에서 매개변수를 한 번 이상 적용할 때 발생하던 버그 수정
  • std::numeric_limits::epsilon 오류 수정
  • manual_control.py 스크립트의 메모리 누수 수정: 센서 리스닝이 파괴되기 전에 중지되지 않았습니다.
  • spawn_npc_sumo.py 스크립트에서 특정 차량 클래스에 허용되지 않는 경로를 계산하던 버그 수정
  • get_traffic_light()가 항상 None을 반환하던 버그 수정
  • 기록기의 결정론 문제 수정
  • 여러 태그가 지정되지 않거나 잘못 태그가 지정된 객체 수정
  • 비가 오는 경우 카메라 센서를 스폰할 때 빗방울 스폰 문제 수정
  • 자산 임포트 파이프라인에서 시맨틱 태그 수정
  • 루트 폴더에 공백이 포함된 경우 Update.sh 실패 문제 수정
  • 동적 메쉬가 재생될 때 초기 위치로 이동하지 않던 문제 수정
  • 맵을 가져올 때 차선 표시의 색상이 반대로 되었던 문제 수정 (흰색과 노란색)
  • WheelPhysicsControl.h 파일에서 누락된 include 지시문 수정
  • IMU 센서에서 중력 측정 버그 수정
  • LiDAR의 포인트 클라우드 기준 프레임 수정
  • 라이트 강도와 카메라 매개변수를 일치시키기 위해 수정
  • 히스토그램 노출 모드의 자동 노출 카메라 수정
  • Linux에서 동기화 모드에 대한 서버에서 클라이언트로의 TCP 통신 지연 수정
  • OpenDRIVE에서 다항식 지오메트리를 로드할 때 큰 RAM 사용량 수정
  • debug.draw_line()이 호출될 때 충돌 문제 수정
  • 자이로스코프 센서가 지역 프레임에서 각속도 판독값을 올바르게 제공하도록 수정
  • 문서의 소개 섹션에서 사소한 오타 수정
  • 경로를 변경할 때 로컬 플래너에서 버그 수정: 이전 경로의 첫 부분을 유지하던 문제로, 매우 큰 버퍼 크기를 사용할 때만 관련이 있었습니다.

0.9.9

수정 사항

  • Ubuntu의 동기 모드에서 성능 개선(약 3배 향상): 네트워크 인터페이스에서 패킷 지연(Nagle 알고리즘)을 비활성화하여 성능을 향상시켰습니다.
  • LiDAR 및 레이더 센서 개선: 레이캐스팅의 병렬 구현으로 성능을 향상시켰습니다.
  • OpenDRIVE에서 폭(width) 파라미터가 누락된 차선에 대한 기본값과 경고 메시지 추가

0.9.9.3

수정 사항

  • Ubuntu에서만 사용할 수 있는 Unreal Engine 4.24의 공식 패치로 새로운 맵 로딩 문제 수정
  • OpenDRIVE에서 다항식(polynomial) 지오메트리를 로드할 때 발생하던 큰 RAM 사용량 문제 수정
  • debug.draw_line 호출 시 발생하던 충돌 문제 수정

주요 내용

  • get_right_vectorget_up_vector API 함수 추가
  • 독립 실행형 모드에서 보행자 내비게이션을 활성화/비활성화하는 매개변수 추가
  • 독립 실행형 모드에서 메쉬 분할 개선
  • 한 번에 여러 차량 조명 상태를 설정하는 PythonAPI 명령 추가
  • 모든 차량 조명 상태를 한 번에 가져오기 위한 carla.world.get_vehicles_light_states PythonAPI 함수 추가
  • SUMO 코시뮬레이션에서 추가 TraCI 클라이언트 지원 추가

0.9.9.2

수정 사항

  • Windows에서 Python API를 통한 새로운 맵 로딩 문제 수정

0.9.9.1

주요 내용

  • 모든 액터에 각운동량(angular impulse)을 추가하는 add_angular_impulse() API 함수 추가
  • 카메라 센서를 생성할 때 발생하던 빗방울 생성 문제 수정
  • 루트 폴더에 공백이 포함되어 있을 때 Update.sh가 실패하던 문제 수정
  • 맵을 가져올 때 차선 표시의 색상이 반대로 되었던 문제 수정(흰색과 노란색)
  • WheelPhysicsControl.h 파일에서 누락된 include 지시문 추가
  • IMU 센서에서 중력 측정 버그 수정
  • OpenDRIVE 처리 관련 버그 수정
  • ESIM 시뮬레이션 기반의 동적 비전 센서(DVS) 카메라 추가: http://rpg.ifi.uzh.ch/esim.html

0.9.9

주요 내용

  • Traffic Manager에 하이브리드 모드 도입
  • Unreal Engine 4.24로 업그레이드
  • 월드의 조명을 클라이언트에 노출하여 실시간으로 변경 가능하도록 함
  • Town01, Town04, Town05에 대한 SUMO 코시뮬레이션 예제 추가
  • PTV Vissim과 CARLA의 코시뮬레이션 추가
  • 복잡한 도로 레이아웃(예: 교차로)을 지원하는 AD RSS v3.0.0으로 업그레이드
  • 도로 레벨 차이로 인해 다른 도로를 막는 것을 방지하기 위한 교차로 평활화 알고리즘 추가
  • OpenDRIVE 파일에서 교통 신호, 정지 신호, 양보 신호의 자동 생성 추가
  • 버그 수정

자세한 내용은 여기에서 계속 읽고 전체 CHANGELOG를 참조하세요.

0.9.8

주요 내용

  • CARLA 릴리스 및 ROS 브리지를 위한 DEB 저장소 추가
  • SUMO 코시뮬레이션 지원 추가
  • 문서가 크게 업데이트되고 개선됨
  • OpenDRIVE 데이터를 기반으로 물리적 맵 생성을 허용하는 OpenDRIVE 독립 실행형 모드 추가

Traffic Manager

  • 여러 버그 수정 및 개선
  • 멀티 클라이언트 및 멀티 TrafficManager 지원
  • 동기 모드 지원

주요 API 확장 사항

  • 웨이포인트에서 쿼리 가능한 객체로 새로운 carla.Junction 추가
  • 새로운 지원되는 OpenDRIVE 지오메트리: 나선형과 3차 다항식
  • 웨이포인트의 공간 쿼리 성능 개선
  • 새로운 날씨 시스템: 야간, 안개, 빗방울, 그리고 이제 바람이 식물과 비에 영향을 미칩니다(차량 물리 아님)
  • 야간 모드 추가: 해질녘에 도시 조명이 사용 가능
  • 일부 자동차, 일부 오토바이 및 모든 자전거에 차량 조명 지원 추가
  • 새로운 자산: 사이버트럭
  • 시각적 품질 향상

0.9.7

패치 0.9.7.4

  • Town02의 도로 중앙에 잘못 위치한 나무의 위치 수정

패치 0.9.7.3

  • #2386 수정: is_within_distance_ahead의 API 변경으로 인해 에이전트가 충돌하던 문제 수정

패치 0.9.7.2

  • 마지막 패치 0.9.7.1과 함께 작동하도록 스펙테이터 카메라의 값 수정

패치 0.9.7.1

  • 품질 수준을 'Low'로 설정할 때 이미지가 너무 밝아지던 버그 수정
  • 원하는 품질 수준 'Epic'을 적용하지 않고 품질 수준이 'Low'로 유지되던 버그 수정

주요 내용

  • RSS 센서 및 결과 시각화와 함께 AD RSS 라이브러리 통합을 포함한 빌드 변형 추가
  • Docker + 헤드리스 모드에서 OpenGL 및 Vulkan 지원
  • 새로운 센서 추가: 관성 측정 장치(IMU)
  • 새로운 센서 추가: 레이더
  • RGB 카메라 속성 노출: 노출, 심도, 톤 매퍼, 색상 보정, 색수차
  • 이제 모든 카메라 기반 센서에 추가로 매개변수화된 렌즈 왜곡 셰이더 제공
  • NPC 차량 관리를 위한 TrafficManager 추가로 자동 조종 장치를 대체
  • 보행자 내비게이션 개선
  • GNSS 센서를 클라이언트에서 서버 측으로 이동
  • Recast 계산을 위한 준비된 메쉬를 내보낼 수 있도록 UE4용 익스포터 플러그인 추가
  • 'make import' 프로세스가 이제 자산의 이름을 적절히 변경하고 복잡한 충돌을 단순화로 설정
  • 새로운 Python API 함수 추가 (map.get_crosswalks()): OpenDRIVE 파일에서 횡단보도 영역을 정의하는 모든 포인트의 목록을 반환합니다.
  • 수동 제어에서 조향 개선
  • Jenkins 파이프라인을 통한 자동 업데이트와 함께 온라인으로 Doxygen 문서 추가

0.9.6

주요 내용

  • Unreal Engine 4.22로 업그레이드
  • Vulkan 지원 추가: 설치된 경우 CARLA는 Vulkan을 사용하며, OpenGL로 실행하려면 opengl 플래그를 사용하세요.
  • 시뮬레이터가 이제 "Shipping" 모드로 컴파일됨: 더 빠르지만 명령줄 인수를 덜 받습니다.
  • 보행자가 다시 추가됨:
    • 인도에서 무작위로 돌아다니는 보행자를 스폰합니다.
    • 스크립트 spawn_npc.py는 이제 보행자를 스폰하며, w 플래그로 수를 조정합니다.
  • 각 맵에 보행자 내비게이션을 위한 내비게이션 메쉬 추가
  • CARLA 블루프린트 라이브러리에 사용자 정의 소품(FBX)을 추가하여 스폰 가능하도록 허용
  • 맵 및 사용자 정의 소품을 가져오고 패키징하는 파이프라인 단순화

차량 물리학

  • 차량 변속기 세부 정보에 대한 액세스 추가
  • 차량 물리학 브레이크 값에 대한 액세스 추가
  • 미끄러운 표면을 시뮬레이션하기 위한 타이어 마찰 트리거 박스 추가
  • manual_control.py에 명령줄 인수로 카메라 감마 보정 추가
  • 센서 파이썬 블루프린트에서 RGB 카메라에 대한 모션 블러 설정 기능 추가
  • LibCarla를 사용하는 C++ 클라이언트 예제 추가
  • PythonAPI 문서 생성기 추가: 모든 Python 참조를 자세히 문서화했습니다.
  • 사용자가 명령줄에서 시뮬레이터를 구성할 수 있는 새로운 Python 스크립트 config.py 추가

새로운 기록기 기능

  • 기록된 시스템 및 바이너리 파일 문서화
  • 기록기 파일에 대한 자세한 정보를 표시하기 위한 선택적 매개변수 추가 (show_recorder_file_info.py 관련)
  • 재생기에 재생 속도(슬로우/패스트 모션) 추가
  • 기록된 파일을 저장하기 위한 사용자 지정 경로 허용
  • 애니메이션을 재생하기 위해 더 많은 데이터가 이제 기록됨:
    • 차량의 휠이 애니메이션화됨(조향, 가속, 핸드브레이크), 자전거 및 오토바이도 포함
    • 보행자 애니메이션이 시뮬레이션됨(보행자의 속도를 통해)

0.9.5

주요 내용

  • 새로운 Town07 추가: 좁은 도로가 있는 시골 환경
  • OpenDRIVE 파서와 웨이포인트 API를 재작업
  • XODR가 잘못 파싱되던 여러 상황 수정
  • 더 많은 정보 노출: 차선 표시, 차선 유형, 차선 섹션 ID, s
  • API 변경 사항:
    • 웨이포인트의 lane_type이 이제 열거형 carla.LaneType이 되었습니다.
    • carla.LaneMarking은 더 이상 열거형이 아니며, 색상, 유형, 차선 변경 및 너비로 확장되었습니다.
  • API 확장:
    • map.get_waypoint는 이제 차선 유형을 필터링하기 위한 추가 선택적 플래그 인수 lane_type을 허용합니다.
    • carla.Map은 이제 XODR 파일에서 오프라인으로 생성될 수 있습니다: carla.Map(town_name, xodr_content)
    • 웨이포인트에 id 속성 추가: 최대 0.5cm 정밀도로 웨이포인트를 고유하게 식별합니다.
  • API 변경 사항:
    • "lane_invasion"을 "lane_detector"로 이름 변경, 다른 클라이언트에서 볼 수 있도록 서버 측 센서도 추가되었습니다.
  • API 확장:
    • 새로운 carla.command.SpawnActor로 액터를 배치로 스폰합니다.
    • map.transform_to_geolocation으로 위치를 GNSS 지리 위치로 변환합니다.
    • SensorData에 타임스탬프(경과된 시뮬레이션 시간 초)를 추가했습니다.
    • 명령을 배치로 보내고 서버 응답을 기다리는 메서드 client.apply_batch_sync 추가
    • world.get_actors에 선택적 인수 "actor_ids" 추가: 제공된 ID를 가진 액터만 요청합니다.

0.9.4

주요 내용

  • 녹화 및 재생 기능 추가
  • 동기화 모드 추가: 시뮬레이터는 클라이언트가 "tick" 신호를 보낼 때까지 기다립니다 (client.tick())
  • 클라이언트 측에서 맵 변경 허용: client.load_map(name), client.reload_map(), client.get_available_maps() 추가
  • .fbx 및 .xodr 파일에서 직접 맵을 시뮬레이터로 가져오는 스크립트 및 도구 추가
  • 차량 엔진 및 휠에 대한 최소한의 물리 제어 파라미터 노출
  • "배치 모드"에서 여러 액터 제어 허용
  • 새로운 Town06 추가: 다음을 포함한 "미시간 레프트" 교차로 특징
    • 두 고속도로 사이의 연결 램프
    • 다른 출구를 타기 위해 여러 차선을 변경해야 하는 고속도로로의 합류
    • 다양한 시나리오를 지원하는 교차로
  • 새로운 교통 표지판 자산 추가: 일방통행, 회전 금지, 더 많은 속도 제한, 진입 금지, 화살표 바닥, 미시간 레프트, 차선 종료
  • 더 많은 변화를 위한 새로운 보행자 텍스처 추가
  • 새로운 도로 PBR(Material) 추가
  • 웨이포인트 API를 lane_change, lane_type, get_right_lane(), get_left_lane()로 확장
  • 런타임에 노 렌더링 모드 및 동기화 모드를 변경하기 위한 월드 설정 추가
  • 교통 신호의 폴 인덱스 및 그룹 내 모든 교통 신호를 얻는 메서드 추가
  • 시뮬레이터의 렌더링 성능을 측정하기 위한 성능 벤치마크 스크립트 추가
  • Logitech G29 스티어링 휠(및 기타)로 에이전트를 제어하기 위한 manual_control_steeringwheel.py 추가

0.9.3

주요 내용

  • 새로운 Town04 추가 (지금까지 가장 큼): 고속도로, 새로운 다리와 도로 장벽, 높이 맵을 기반으로 한 더 멋진 풍경, 새로운 거리 소품 포함
  • 새로운 Town05 추가: 시나리오 러너를 위한 다양한 교차로 추가
  • 남녀 캐릭터를 위한 보행자 모델 및 애니메이션(걷기 및 대기) 재설계
  • 장애물 감지를 위한 센서 추가 (레이캐스트 기반)
  • GNSS(GPS) 센서 추가
  • 글로벌 라우터와 통합된 기본 에이전트
  • 액터를 관리하기 위한 몇 가지 메서드 추가:
    • set_velocity: 선형 속도 설정
    • set_angular_velocity: 각속도 설정
    • get_angular_velocity: 각속도 가져오기
    • add_impulse: 임펄스 적용(월드 축에서)
  • vehicle.get_vehicle_control()vehicle.get_control()로 이름 변경하여 보행자와 일관성 유지

0.9.2

주요 내용

  • CARLA 0.9.X를 위한 ROS 브리지 업데이트 (별도의 리포지토리로 이동)
  • Python API "agents" 확장 추가, 포함 내용:
    • 웨이포인트 API에 기반한 글로벌 라우트 플래너 (OpenDrive와 호환)
    • BasicAgent: 웨이포인트 API와 PID 컨트롤러를 사용하여 맵의 주어진 좌표로 주행할 수 있는 새로운 클라이언트 에이전트, 다른 차량 및 교통 신호에 대응
    • RoamingAgent: PID 컨트롤러를 기반으로 웨이포인트를 따라 다양한 속도로 주행할 수 있는 새로운 클라이언트 에이전트, 다른 차량 및 교통 신호에 대응
    • LocalPlanner: PID 컨트롤러를 사용하여 웨이포인트를 탐색하는 기능
    • LateralControlLongitudinalControl PID
  • 수동 기어 변속 지원 추가
  • 액터에 "role_name" 속성 추가: "hero" 차량을 쉽게 식별하기 위해
  • Town03의 교통 신호를 미국식 스타일로 변경
  • 정지 신호만 있는 새로운 교차로 유형 추가

0.9.1

링크

주요 내용

  • 더 많은 도로 다양성, 다중 차선, 원형 교차로 등이 포함된 새로운 Town03 추가
  • Python API에 많은 추가 사항: 더 많은 정보 제공 및 액터에 대한 더 많은 제어
  • 우리의 맵은 이제 OpenDrive 기반의 도로 레이아웃 정보를 포함하며, 웨이포인트를 쿼리하기 위한 API 제공
  • LiDAR 이식
  • 이미지 처리 메서드 이식
  • 클라이언트 측의 성능 향상
  • 새로운 날씨 시스템

0.9.0

링크

새로운 기능 / 수정 사항

  • Unreal Engine 4.19로 업그레이드
  • 네트워킹 아키텍처 재설계
    • 동시에 임의의 수의 클라이언트가 연결할 수 있습니다.
    • 이제 언제든지 차량이나 카메라를 추가 및 제거할 수 있습니다.
    • 이제 어떤 차량이나 카메라도 제어할 수 있습니다.
    • 이제 어디든지 카메라를 배치할 수 있습니다.
    • 세 개의 포트 대신 두 개의 포트로 줄였습니다.
      • 첫 번째 포트는 rpclib 기반의 RPC 프로토콜을 사용합니다.
      • 두 번째 포트는 센서 데이터 스트리밍을 위한 것입니다.
  • Python API 재설계
    • 액터와 센서가 이제 API에 노출되어 독립적으로 제어할 수 있습니다.
    • Python 모듈은 C++로 빌드되어 일부 작업에서 상당한 성능 향상을 가져옵니다.
    • 많은 기능이 아직 포팅되지 않았으므로 많은 것이 누락되어 있을 수 있습니다.
  • 종속성 변경에 맞게 빌드 시스템 재설계
    • 이제 모든 것이 Makefile로 처리될 수 있습니다.
    • 현재는 Linux만 지원됩니다. 죄송합니다.
  • 사용하지 않는 자산 대량 정리
  • 차량의 미적 수정 일부

 

간단하게 powershell 터미널 프로필을 설정하면된다

 

하지만 powershell 터미널은 새로 만들어주지 않으면 맨 처음엔 존재하지않는다.

 

그래서 프로필 파일을 새로 생성해주면됩니다.

 

1. anaconda를 통한 생성

anaconda를 설치해주고, anaconda powershell을 관리자 권한으로 실행합니다.

 

1-1. 이후 conda를 업데이트

conda update conda

 

1-2. conda를 통해서 powershell 프로필을 초기화

conda init powershell

 

그러면 사용자 폴더 내 Documents에 WindowsPowerShell이 생성됩니다.

 

해당 폴더에 아래와 같은 프로필 파일이 생성됩니다

 

1-3. 이제 프로필 파일의 코드가 실행되고, 프로필 상에서 현재 적용된 가상환경 이름이 뜹니다.

 

 

2. 프로필 꾸미기

1번 처럼 init을 통해서 생성되면, conda init 명령어에 의해 관리된다고합니다.

프로필을 꾸미고 싶다면 아래와 같은 powershell 문법을 이용하시면됩니다.

vscode에서 아래 코드를 적용하면, 환경변수가 하나만 나오는데

그냥 anaconda powershell을 실행하면, 환경변수랑 아래 코드가 둘 다 나옵니다 해결법은 모르겠슴다

function prompt {
	$conda_output = conda env list
	$active_env_line = ($conda_output | Where-Object { $_ -match '\*  ' }).Trim()
	$env_name = ($active_env_line -split '\s+', 3)[0]
	$env_path = ($active_env_line -split '\s+', 3)[2]
	if ($env_name) {
		Write-Host -NoNewline -ForegroundColor Green "($env_name)($env_path)"
		return "> "
	} else {
		return "> "
	}
}

 


해당 문제는 도서 "OpenCV 4로 배우는 컴퓨터 비전과 머신러닝"에서 솔루션 파일을 실행했을때 발생했습니다.

 

CV_VERSION 같은건 실행이 잘 되었는데, 이후에 Mat 같은 타입을 실행할때 주로 발생을 했는데,

 

추가 종속성에 추가적으로 lib를 설정해주면되었습니다.

 

visual studio 2022와 opencv 4.10.0(vc16) 버전을 사용합니다.

 

1. 프로젝트 속성 페이지 -> 구성 속성 -> VC++ 디렉터리

포함 디렉터리에 $(OPENCV_DIR)\include

라이브러리 디렉터리에 $(OPENCV_DIR)\x64\vc16\lib

라이브러리 디렉터리에서 vc00은 본인의 opencv 버전을 기입해야합니다

저는 최신 버전이기에 vc16을 입력했습니다

 

2. 다음으로는 프로젝트 속성 페이지 -> 구성 속성 -> 링커 -> 입력 -> 추가 종속성

에다가 opencv_world4100d.lib 를 추가하시면됩니다. 4100이라는 숫자는 본인의 opencv 버전에 따라 다른데 직접 opencv library 폴더로 가셔서 확인해보셔야합니다.

제 폴더 경로는 C:\opencv\build\x64\vc16\lib 과 같습니다.

경로로 가시면 위와 같이 lib 파일이 보이실텐데 d가 붙어있는것을 추가하는 것입니다.

d가 붙은것과 붙지않는것의 차이는 d가 붙는것은 디버거 용이고, 안붙으면 릴리즈 용입니다.

현재 솔루션 구성 방식이 디버그인지 릴리즈인지에 따라서 추가하시면됩니다.

 

그런데 이 방법은 매 솔루션 마다 숫자를 변경해줘야해서 되게 번거로운데
이렇게 하지마시고, 그냥 opencv 버전을 솔루션에 설정되어있는 버전으로 설치하시는걸 권장드립니다.

그럼 환경변수에서 bin 설정할때 vc 버전을 vc15로 수정하시면됩니다

 

+ Recent posts