Guides(으)로 돌아가기

로봇 프로그래밍 언어: 파이썬, C++, ROS

로봇을 위한 최고의 프로그래밍 언어: 프로토타입을 만드는 파이썬, 실시간 제어용 C++, 시스템 통합을 위한 ROS.

언어 비교

Language Typical 지연시간 Key Libraries Best For Limitation
Python 1-10 ms (non-deterministic) NumPy, OpenCV, PyTorch, rclpy Rapid prototyping, ML/AI, data processing, research GIL prevents true parallelism; not real-time safe
C++ <1 ms (deterministic with RT kernel) Eigen, rclcpp, MoveIt2, Drake Real-time control loops, drivers, production systems Slow iteration; complex build systems; memory management
Rust <1 ms (deterministic) ros2_rust, nalgebra Safety-critical systems, memory-safe drivers Small robotics ecosystem; steep learning curve
MATLAB / Simulink N/A (offline / codegen) Robotics System Toolbox, ROS Toolbox Control system design, simulation, academic research Expensive license ($2K+/yr); not used in production
Proprietary (KRL, RAPID, Karel) <1 ms (built into controller) Vendor-specific Industrial robot programming on OEM controllers No portability; vendor lock-in; limited ecosystem

로봇 제어 ROS2 아키텍처

ROS2 (로봇 운영체제 2) 는 언어가 아니라 통신 (DDS) 을 제공하는 중소 소프트웨어 프레임워크, 패키지 관리 및 로봇 소프트웨어를 만드는 표준 아키텍처입니다. 주요 개념은:

  • ** 노드:** 독립적인 프로세스 (센서, 컨트롤러, 계획자마다 하나) 주제를 통해 (pub/sub), 서비스를 통해 (소원/ 응답) 그리고 행동을 통해 (장기적인 작업) 통신한다.
  • ** 주제는:** 비동기 메시지 전달. T2 (센서_msgs/JointState) 는 100-1000 Hz에서 공동 위치를 게시합니다. T3 (센서_msgs/ 이미지) 는 30-60 Hz에서 프레임을 게시합니다.
  • ** 제어 루프 계층:** 서버 레벨 (1-10 kHz, 모터 컨트롤러 펌웨어에서 실행) → 공동 레벨 (100-1000 Hz, ros2_control) → 작업 레벨 (10-30 Hz, MoveIt2/정책 추론)

실용적인 권고: ** 인식, 계획 및 고급 논리용 파이썬 노드를** 작성하십시오. ** 시기를 보장해야 하는 제어 루프에 ** C++ 노드를** 작성하십시오. 이것은 모든 주요 ROS2 로봇 드라이버에서 사용되는 패턴입니다.

실시간 제어 요구 사항

다른 로봇 구성 요소들은 다른 시간 요구사항을 가지고 있습니다.

  • Servo 제어 루프: <1 ms (1-10 kHz) 모터 컨트롤러 펌웨어에서 실행됩니다 (코드에 포함되지 않습니다). PID 위치/속도/토크 제어 기능을 처리합니다.
  • ** 공동 제어 루프:** 1-10 ms (100-1000 Hz). 모터에 목표 위치/속도/토크를 전송한다. 결정적일 것이다. 실시간 커널 (리눅스용 PREEMPT_RT 패치) 을 사용하여 T4을 사용한다.
  • ** 운동 계획:** 계획당 10-100 ms. MoveIt2는 충돌 없는 궤도를 생성합니다. 실시간으로 작동하지는 않지만 반응적인 재계획을 위해 충분히 빠르어야 합니다.
  • ** 정책 추론:** 단계마다 10-50 ms (20-100 Hz). 신경 네트워크 정책 (이미테이션 학습, RL) 가 GPU에서 실행됩니다. 파이썬은 여기 괜찮습니다. GPU는 무거운 계산을 처리합니다.
  • 비전 처리: 프레임 દીઠ 16-33 ms (30-60 Hz) 검출, 세그먼트, 포즈 추정, GPU 가속화, PyTorch/ONNX로 파이썬

샘플 코드: ROS2 파이썬으로 기본 팔 제어

import rclpy
from rclpy.node import Node
from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint
from builtin_interfaces.msg import Duration

class ArmController(Node):
    def __init__(self):
        super().__init__('arm_controller')
        self.publisher = self.create_publisher(
            JointTrajectory,
            '/joint_trajectory_controller/joint_trajectory',
            10
        )
        self.joint_names = [
            'joint1', 'joint2', 'joint3',
            'joint4', 'joint5', 'joint6'
        ]

    def move_to_pose(self, positions, duration_sec=2.0):
        """Send arm to target joint positions."""
        msg = JointTrajectory()
        msg.joint_names = self.joint_names

        point = JointTrajectoryPoint()
        point.positions = positions  # radians
        point.time_from_start = Duration(sec=int(duration_sec),
            nanosec=int((duration_sec % 1) * 1e9))
        msg.points = [point]

        self.publisher.publish(msg)
        self.get_logger().info(f'Moving to: {positions}')

def main():
    rclpy.init()
    controller = ArmController()

    # Home position
    controller.move_to_pose([0.0, -1.57, 1.57, 0.0, 1.57, 0.0])

    rclpy.spin(controller)
    rclpy.shutdown()

if __name__ == '__main__':
    main()

이 예는 ROS2 호환 가능한 팔 (OpenArm 1, UR, Kinova) 에 T5을 노출시키는 모든 팔과 작동합니다. [OpenArm 1]T10) 에 대해서는, 팔과 함께 제공되는 URDF 및 MoveIt2 구성에 공동 이름이 문서화됩니다.

주요 도서관 및 프레임워크

  • MoveIt2: 운동 계획 프레임워크. 충돌 인식 궤도 생성, 역 운동학, 포착 계획. 파이썬 및 C++ API. ROS2에서 팔 조작 표준.
  • Nav2: 모바일 로봇의 내비게이션 스택. 경로 계획, 장애물 피த்தல், 현지화 (AMCL). TurtleBot 4, Unitree Go2와 사용된다.
  • ** 드레이크:** MIT의 로봇 라이브러리 멀티부디 역학, 최적화 기반 제어 및 시뮬레이션. C++와 파이썬 결합. 접촉 풍부한 조작 연구에 탁월하다.
  • PyTorch / JAX: ML 교육 조작 정책의 프레임워크. PyTorch는 로봇 연구 (RT-2, Octo, ACT에서 사용된다). JAX는 RL (brax, mujoco-mjx) 에 대한 견인력을 얻고 있습니다.
  • OpenCV: 컴퓨터 비전. 카메라 캘리브레이션, 이미지 처리, ArUco 탐지. 파이썬과 C++에서 사용할 수 있습니다.
  • LeRobot (Hugging Face): 로봇 학습을 위한 오픈소스 프레임워크. 데이터셋 관리, 정책 훈련 (ACT, 퍼포시전 정책) 및 배포. 파이썬 기반.

각 언어 를 언제 사용 해야 합니까?

  • ** 파이썬을 사용하세요:** 새로운 행동들을 프로토타입하는 것, ML 훈련 파이프라인을 작성하는 것, 센서 데이터를 처리하는 것, 스크립트 실험, 웹 패시보드 구축.
  • ** C++를 사용:** 엔진 드라이버를 작성하고, 하드 타임 deadlines (<1ms jitter) 를 충족해야 하는 제어 루프를 구현하고, 성능이 중요할 때 생산 시스템을 구축하고, MoveIt2 또는 Nav2에 기여합니다.
  • ** 안전성 중요 요소를 만드는 데 있어서 메모리 안전성이 최우선으로 중요시하는 경우, 새로운 모터 드라이버를 작성하거나 팀의 경우, Rust 전문성을 가지고 있을 때 Rust을 사용하십시오.
  • **** 산업용 로봇 (KUKA, ABB, FANUC) 을 네이티브 컨트롤러에 프로그래밍해야 합니다. 가능하면 ROS2 브릿지를 선호하십시오.

언어 비교

Language Typical 지연시간 Key Libraries Best For Limitation
Python 1-10 ms (non-deterministic) NumPy, OpenCV, PyTorch, rclpy Rapid prototyping, ML/AI, data processing, research GIL prevents true parallelism; not real-time safe
C++ <1 ms (deterministic with RT kernel) Eigen, rclcpp, MoveIt2, Drake Real-time control loops, drivers, production systems Slow iteration; complex build systems; memory management
Rust <1 ms (deterministic) ros2_rust, nalgebra Safety-critical systems, memory-safe drivers Small robotics ecosystem; steep learning curve
MATLAB / Simulink N/A (offline / codegen) Robotics System Toolbox, ROS Toolbox Control system design, simulation, academic research Expensive license ($2K+/yr); not used in production
Proprietary (KRL, RAPID, Karel) <1 ms (built into controller) Vendor-specific Industrial robot programming on OEM controllers No portability; vendor lock-in; limited ecosystem

로봇 제어 ROS2 아키텍처

ROS2 (로봇 운영체제 2) 는 언어가 아니라 통신 (DDS) 을 제공하는 중소 소프트웨어 프레임워크, 패키지 관리 및 로봇 소프트웨어를 만드는 표준 아키텍처입니다. 주요 개념은:

  • ** 노드:** 독립적인 프로세스 (센서, 컨트롤러, 계획자마다 하나) 주제를 통해 (pub/sub), 서비스를 통해 (소원/ 응답) 그리고 행동을 통해 (장기적인 작업) 통신한다.
  • ** 주제는:** 비동기 메시지 전달. T6 (센서_msgs/JointState) 는 100-1000 Hz에서 공동 위치를 게시합니다. T7 (센서_msgs/ 이미지) 는 30-60 Hz에서 프레임을 게시합니다.
  • ** 제어 루프 계층:** 서버 레벨 (1-10 kHz, 모터 컨트롤러 펌웨어에서 실행) → 공동 레벨 (100-1000 Hz, ros2_control) → 작업 레벨 (10-30 Hz, MoveIt2/정책 추론)

실용적인 권고: ** 인식, 계획 및 고급 논리용 파이썬 노드를** 작성하십시오. ** 시기를 보장해야 하는 제어 루프에 ** C++ 노드를** 작성하십시오. 이것은 모든 주요 ROS2 로봇 드라이버에서 사용되는 패턴입니다.

실시간 제어 요구 사항

다른 로봇 구성 요소들은 다른 시간 요구사항을 가지고 있습니다.

  • Servo 제어 루프: <1 ms (1-10 kHz) 모터 컨트롤러 펌웨어에서 실행됩니다 (코드에 포함되지 않습니다). PID 위치/속도/토크 제어 기능을 처리합니다.
  • ** 공동 제어 루프:** 1-10 ms (100-1000 Hz). 모터에 목표 위치/속도/토크를 전송한다. 결정적일 것이다. 실시간 커널 (리눅스용 PREEMPT_RT 패치) 를 사용하여 T8을 사용한다.
  • ** 운동 계획:** 계획당 10-100 ms. MoveIt2는 충돌 없는 궤도를 생성합니다. 실시간으로 작동하지는 않지만 반응적인 재계획을 위해 충분히 빠르어야 합니다.
  • ** 정책 추론:** 단계마다 10-50 ms (20-100 Hz). 신경 네트워크 정책 (이미테이션 학습, RL) 가 GPU에서 실행됩니다. 파이썬은 여기 괜찮습니다. GPU는 무거운 계산을 처리합니다.
  • 비전 처리: 프레임 દીઠ 16-33 ms (30-60 Hz) 검출, 세그먼트, 포즈 추정, GPU 가속화, PyTorch/ONNX로 파이썬

샘플 코드: ROS2 파이썬으로 기본 팔 제어

import rclpy
from rclpy.node import Node
from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint
from builtin_interfaces.msg import Duration

class ArmController(Node):
    def __init__(self):
        super().__init__('arm_controller')
        self.publisher = self.create_publisher(
            JointTrajectory,
            '/joint_trajectory_controller/joint_trajectory',
            10
        )
        self.joint_names = [
            'joint1', 'joint2', 'joint3',
            'joint4', 'joint5', 'joint6'
        ]

    def move_to_pose(self, positions, duration_sec=2.0):
        """Send arm to target joint positions."""
        msg = JointTrajectory()
        msg.joint_names = self.joint_names

        point = JointTrajectoryPoint()
        point.positions = positions  # radians
        point.time_from_start = Duration(sec=int(duration_sec),
            nanosec=int((duration_sec % 1) * 1e9))
        msg.points = [point]

        self.publisher.publish(msg)
        self.get_logger().info(f'Moving to: {positions}')

def main():
    rclpy.init()
    controller = ArmController()

    # Home position
    controller.move_to_pose([0.0, -1.57, 1.57, 0.0, 1.57, 0.0])

    rclpy.spin(controller)
    rclpy.shutdown()

if __name__ == '__main__':
    main()

이 예는 ROS2 호환 가능한 팔 (OpenArm 1, UR, Kinova) 에 T9을 노출시키는 모든 팔과 작동합니다. [OpenArm 1]T11) 에 대해서는, 팔과 함께 제공되는 URDF 및 MoveIt2 구성에 공동 이름이 문서화됩니다.

주요 도서관 및 프레임워크

  • MoveIt2: 운동 계획 프레임워크. 충돌 인식 궤도 생성, 역 운동학, 포착 계획. 파이썬 및 C++ API. ROS2에서 팔 조작 표준.
  • Nav2: 모바일 로봇의 내비게이션 스택. 경로 계획, 장애물 피த்தல், 현지화 (AMCL). TurtleBot 4, Unitree Go2와 사용된다.
  • ** 드레이크:** MIT의 로봇 라이브러리 멀티부디 역학, 최적화 기반 제어 및 시뮬레이션. C++와 파이썬 결합. 접촉 풍부한 조작 연구에 탁월하다.
  • PyTorch / JAX: ML 교육 조작 정책의 프레임워크. PyTorch는 로봇 연구 (RT-2, Octo, ACT에서 사용된다). JAX는 RL (brax, mujoco-mjx) 에 대한 견인력을 얻고 있습니다.
  • OpenCV: 컴퓨터 비전. 카메라 캘리브레이션, 이미지 처리, ArUco 탐지. 파이썬과 C++에서 사용할 수 있습니다.
  • LeRobot (Hugging Face): 로봇 학습을 위한 오픈소스 프레임워크. 데이터셋 관리, 정책 훈련 (ACT, 퍼포시전 정책) 및 배포. 파이썬 기반.

각 언어 를 언제 사용 해야 합니까?

  • ** 파이썬을 사용하세요:** 새로운 행동들을 프로토타입하는 것, ML 훈련 파이프라인을 작성하는 것, 센서 데이터를 처리하는 것, 스크립트 실험, 웹 패시보드 구축.
  • ** C++를 사용:** 엔진 드라이버를 작성하고, 하드 타임 deadlines (<1ms jitter) 를 충족해야 하는 제어 루프를 구현하고, 성능이 중요할 때 생산 시스템을 구축하고, MoveIt2 또는 Nav2에 기여합니다.
  • ** 안전성 중요 요소를 만드는 데 있어서 메모리 안전성이 최우선으로 중요시하는 경우, 새로운 모터 드라이버를 작성하거나 팀의 경우, Rust 전문성을 가지고 있을 때 Rust을 사용하십시오.
  • **** 산업용 로봇 (KUKA, ABB, FANUC) 을 네이티브 컨트롤러에 프로그래밍해야 합니다. 가능하면 ROS2 브릿지를 선호하십시오.