로봇공학에서 Python 대신 C++을 많이 쓰는 이유

2024. 10. 17. 14:18c,c++

1. 성능

  • 실행 속도: C++는 컴파일된 언어로, 최적화된 기계어로 변환되어 실행되므로 속도가 매우 빠릅니다. 로봇의 실시간 제어와 같이 성능이 중요한 경우, C++가 더 적합합니다.
  • 메모리 관리: C++는 개발자가 직접 메모리를 관리할 수 있어 메모리 효율성을 높일 수 있습니다. 실시간 시스템에서는 메모리 사용이 중요한 요소입니다.

2. 실시간 시스템

  • 로봇은 종종 실시간으로 반응해야 하므로, 시간 지연이 최소화되어야 합니다. C++는 이와 같은 실시간 요구 사항을 충족시키기 위해 더 잘 최적화할 수 있습니다.

3. 하드웨어와의 인터페이스

  • 많은 로봇 하드웨어와 센서 드라이버는 C/C++로 작성되어 있습니다. C++는 하드웨어와의 저수준 인터페이스를 직접 다룰 수 있어 하드웨어 제어에 유리합니다.

4. 종속성

  • ROS(Robot Operating System)와 같은 많은 로봇 소프트웨어 프레임워크는 C++로 작성되어 있으며, C++ API를 제공합니다. 따라서 C++를 사용하는 것이 호환성 측면에서 유리합니다.
  • 로봇 공학의 많은 주요 라이브러리(예: OpenCV, PCL 등)는 C++로 작성되어 있어 성능을 극대화합니다.

5. 구조적 프로그래밍

  • C++는 객체 지향 프로그래밍을 지원하여 코드의 재사용성과 유지보수성을 높일 수 있습니다. 이는 복잡한 로봇 시스템을 설계할 때 유리합니다.

6. 산업 표준

  • 많은 산업에서는 C++가 표준으로 사용되며, 신뢰성과 안정성이 중요시됩니다. 로봇공학 분야에서도 이러한 이유로 C++를 선호하는 경향이 있습니다.

7. 디버깅 및 개발 도구

  • C++는 고급 디버깅 도구와 IDE를 지원하여 복잡한 시스템을 효과적으로 개발하고 유지 관리하는 데 도움을 줍니다.

 

간단한 예로 파이썬과 c++의 속도 차이를 느껴보자.

#include <iostream>
#include <chrono>

double harmonicSum(int N) {
    double sum = 0.0;
    for (int i = 1; i <= N; ++i){
        sum += 1.0 / i;
    }
    return sum;
}

int main(){
    int N = 2000000;

    auto start = std::chrono::high_resolution_clock::now();
    double result = harmonicSum(N);
    auto end = std::chrono::high_resolution_clock::now();
    std::chrono::duration<double, std::milli> elapsed = end - start;
    std::cout << "Sum: " << result << "\n";
    std::cout << "Elapsed time: " << elapsed.count() << " ms\n";

    return 0;
}

 

import time

def harmonic_sum(N):
    sum = 0.0
    for i in range(1, N+1):
        sum += 1.0 / i
    return sum

N = 2000000

start_time = time.time()
result = harmonic_sum(N)
end_time = time.time()

elapsed_time_python = (end_time - start_time) * 1000
result_python = result
print(f"Elapsed time: {elapsed_time_python} ms")

 

각각 c++과 python으로 짜여진 1을 N으로 나눈 몫을 sum에 더해주는 간단한 코드이다

확실히 python이 짜기도 쉽고 보기도 편하다(굉장히 직관적임)

그러나 실행결과는 충격적이다.

Elapsed time: 5.86744 ms (C++)

Elapsed time: 164.7193431854248 ms (Python)

 

이렇게 간단한 코드에서 약 30배가 넘어가는 정도의 차이가 났다.

 

왜 이렇게 차이가 날까

 

1. 언어의 실행 방식 차이

  • C++: C++는 컴파일된 언어입니다. 즉, 코드를 컴파일러가 기계어로 번역하여 실행됩니다. 컴파일된 코드는 운영 체제에서 직접 실행되기 때문에 속도가 매우 빠릅니다. 특히 반복문이나 수학 계산과 같은 작업에서 큰 성능 이점을 제공합니다.
  • Python: Python은 인터프리터 언어로, 코드를 실행할 때 한 줄씩 해석하여 실행합니다. 이 해석 과정이 추가되므로 실행 속도가 느려질 수밖에 없습니다. 또한 Python의 많은 연산은 내부적으로 C++에 비해 더 복잡한 데이터 타입과 구조를 사용합니다.

2. 연산 최적화

  • C++: C++ 컴파일러는 많은 최적화를 수행하여 가능한 한 효율적으로 코드를 실행합니다. 특히, g++ 같은 컴파일러는 반복문 최적화와 같은 다양한 기법을 사용하여 성능을 극대화합니다.
  • Python: Python은 이러한 최적화를 적용하지 않습니다. Python의 데이터 타입은 유연하지만 그로 인해 성능이 저하될 수 있습니다. 예를 들어, Python의 float는 내부적으로 더 복잡한 구조를 가지고 있으며, 반복문에서의 연산 처리도 최적화되지 않습니다.

3. Python의 동적 타입

  • Python은 동적 타입 언어이기 때문에 변수의 타입을 실행 시간에 결정합니다. 이 과정에서 추가적인 메모리와 시간이 소모됩니다. 반면, C++는 정적 타입 언어로, 변수의 타입이 컴파일 시점에 고정되므로 타입 확인에 드는 시간이 줄어듭니다.

4. Python의 함수 호출 오버헤드

  • Python은 함수 호출 시에도 오버헤드가 더 큽니다. Python에서 함수 호출 시, 스택을 관리하는 동작이 C++보다 더 복잡하며, 이 또한 성능 차이에 기여합니다.

5. 메모리 관리 차이

  • Python은 가비지 컬렉션(자동 메모리 관리)을 사용하여 메모리를 관리하지만, 이 과정이 추가적인 비용을 발생시킵니다. 반면, C++에서는 개발자가 직접 메모리를 관리하거나 자동화된 메모리 관리 기법을 사용할 수 있지만, 가비지 컬렉션과 같은 오버헤드는 발생하지 않습니다.

 

결국엔 사용자 입장에서 편하다고 생각했던 것들이 실행시간이 훨씬 늘어나는 결과를 야기했다.

 

결과적으로 실시간 반응, 복잡한 계산, 하드웨어 성능 등을 생각해보았을 때 Python보다는 C++을 사용하는 것이 좋다! 

 

 

'c,c++' 카테고리의 다른 글

멀티 스레드 관련 궁금증 (Python vs C++)  (0) 2024.12.12