원격웹캠동작 - dingdongdengdong/astra_ws GitHub Wiki

원격 조종 웹캠(사용자 컴퓨터 웹캠)을 통해 동작을 수행하고 싶으시군요. 이 웹캠은 index.js에서 navigator.mediaDevices.getUserMedia를 통해 직접 접근하며, 그 영상은 로컬에서 OpenCV.js로 처리되어 손 제스처 인식을 통해 hand 데이터 채널을 통해 로봇으로 제어 신호를 보냅니다.

이 기능을 활성화하고 사용하기 위한 단계는 다음과 같습니다:

1. 전체 ROS 2 시스템 실행

먼저, 로봇과 웹 서버, 그리고 웹 페이지의 백엔드 통신을 담당하는 전체 ROS 2 시스템을 구동해야 합니다.

  • ROS 2 환경 소싱:

    source /opt/ros/<YOUR_ROS_DISTRO>/setup.bash
    source install/setup.bash
    

    (새로운 터미널을 열 때마다 실행해야 합니다.)

  • 런치 파일 실행: ros2_ws 디렉터리에서 start.launch.py 파일을 실행합니다.

    ros2 launch astra_controller start.launch.py
    

    이 명령을 통해 teleop_web_node (내부에 webserver.pyteleoprator.py 포함)를 포함한 필요한 모든 ROS 2 노드가 시작됩니다.

2. 웹 브라우저에서 텔레오퍼레이션 인터페이스 접속

  1. URL 접속: 웹 서버가 성공적으로 시작되면 콘솔에 표시되는 URL(https://localhost:9443/index.html)로 웹 브라우저를 통해 접속합니다.
    • 보안 경고가 나타나면 무시하고 진행합니다.

3. 원격 조종 웹캠 활성화 및 제어 시작

웹 페이지에 접속하면, "Capture Playback" 섹션 아래에 있는 사용자 컴퓨터 웹캠을 활성화하고 손 제스처를 통해 로봇을 조종할 수 있습니다.

  1. Start Stream 버튼 클릭: 웹 페이지 왼쪽 상단에 있는 Start Stream 버튼을 클릭하여 로봇 카메라로부터의 비디오 스트림을 시작합니다. 이 단계에서 video-head, video-wrist-left, video-wrist-right 화면에 로봇 카메라 영상이 나타날 것입니다.

  2. Start Capture 버튼 클릭: Start Stream 버튼 아래에 있는 Start Capture 버튼을 클릭합니다.

    • 이 버튼을 클릭하면 브라우저가 사용자 컴퓨터의 웹캠 접근 권한을 요청할 것입니다. 반드시 허용해야 합니다.
    • 권한을 허용하면 "Capture Playback" 섹션 아래의 <canvas id="canvas-imshow"> 영역에 사용자 컴퓨터의 웹캠 영상이 표시되기 시작할 것입니다. 이 영상은 로컬에서 OpenCV.js를 통해 처리됩니다.
  3. Calibrate Camera 버튼 클릭 (필요시): 만약 손 제스처 인식이 정확하지 않다면, Calibrate Camera 버튼을 클릭하여 웹캠 캘리브레이션을 수행해야 할 수 있습니다. 이는 ARUCO 마커 기반의 손 제스처 인식을 위해 카메라의 내부 파라미터 및 왜곡 계수를 보정하는 과정입니다.

  4. Connect PedalCalibrate Pedal 버튼 클릭 (페달 사용 시): 만약 페달 장치를 사용하여 로봇을 조종한다면, Connect PedalCalibrate Pedal 버튼을 클릭하여 페달 장치를 연결하고 캘리브레이션 해야 합니다.

  5. 손 제스처를 통한 로봇 조종: Start Capture가 활성화되고 웹캠 영상이 canvas-imshow에 표시되면, 이제 웹캠 앞에서 손 제스처를 수행하여 로봇을 조종할 수 있습니다.

    • index.jscapture() 함수는 웹캠 영상에서 ARUCO 마커를 감지하고, 이 마커의 위치와 자세 정보를 handChannel을 통해 webserver.py로 보냅니다.
    • webserver.pyon_datachannel 콜백은 이 hand 채널 데이터를 수신하여 teleopoperator.on_hand 콜백으로 전달합니다.
    • teleoprator.pyhand_cb 메서드는 이 데이터를 바탕으로 로봇 팔의 목표 자세를 계산하고 제어 명령을 ROS 2 토픽으로 발행하여 로봇을 움직입니다.

요약: 웹 브라우저에서 Start Capture 버튼을 누르는 것이 사용자 컴퓨터 웹캠을 활성화하고 손 제스처를 통한 원격 조종을 시작하는 핵심 단계입니다.