문서 버전: V1.0, 개정일: 2024-10-12.
개요
Linux용 MRDVS Camera SDK에는 C/C++, Java(HTTP 서비스), ROS 및 ROS 2 예제가 포함되어 있습니다. 예제는 기본 SDK 작업 흐름을 보여주므로 프로젝트에 맞는 로직과 오류 처리를 추가하세요. 먼저 환경 설정, 설치 스크립트 및 샘플 디렉터리 확인을 완료하세요. 그런 다음 대상 언어의 컴파일 및 실행 섹션을 따르세요. 부록에는 일반 종속성과 테스트 패키지의 설치 방법이 정리되어 있습니다.시스템 및 환경
호환 시스템 및 종속성 버전
다음 Linux 시스템을 지원합니다. 기본 프로그램 버전은 아래와 같습니다.2.2 시스템 및 애플리케이션 버전 확인
2.2.1 시스템 버전 확인

- 주 버전 번호: 5
- 버전 번호: 15 [홀수는 개발 버전이고 짝수는 안정 버전입니다]
- 개정 번호: 0 [수정 횟수]
- 이 버전의 N번째 개정: 97
- 커널 버전: #107~20.0.4.1, 일반적으로 시스템 버전은 커널 버전입니다
2.2.2 CMake 버전 확인

2.2.3 GCC 버전 확인

2.2.4 OpenCV 버전 확인

2.2.5 PCL 버전 확인
2.2.6 ROS 버전 확인


2.3 기본 개발 환경 구성
설치하기 전에 설치 목록을 업데이트해야 합니다.
2.3.1 CMake 설치

2.3.2 GCC 설치

2.4 선택적 개발 환경 구성
2.4.1 OpenCV 설치 [카메라 이미지를 표시할 수 있음]
![OpenCV 설치 [카메라 이미지를 표시할 수 있음] 관련 이미지](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-install-opencv-can-display-camera-images.avif?fit=max&auto=format&n=tL-WJIR2I7zXpd8i&q=85&s=2d198482de6242a7b996cf46e67a11e5)
2.4.2 PCL 설치 [포인트 클라우드를 표시할 수 있음]
![PCL 설치 [포인트 클라우드를 표시할 수 있음] 관련 이미지](https://mintcdn.com/mrdvs/tL-WJIR2I7zXpd8i/images/developers/camera-sdk-linux-examples-install-pcl-can-display-point-cloud.avif?fit=max&auto=format&n=tL-WJIR2I7zXpd8i&q=85&s=d3a7769cccce429095b1c579bfee93b1)
샘플 코드 준비
3.1 설치 스크립트 실행
- Lanxin-MRDVS 파일의 압축을 풀고 Lanxin-MRDVS 폴더로 이동하세요.

- 마우스 오른쪽 버튼을 클릭하여 콘솔을 여세요.
- install.sh 스크립트를 실행하세요.

- /opt/ 디렉터리로 이동하여 설치가 성공했는지 확인하세요.

- 폴더를 찾을 수 있으면 설치가 성공한 것입니다.
- 설치에 실패하면 opt 디렉터리에 수동으로 추가해야 합니다.
- set_socket_buffer_size.sh 스크립트를 실행하세요.

- 이제 설치 스크립트 실행이 완전히 완료되었습니다!
3.2 샘플 코드 소개
Sample 디렉터리로 이동하세요. 디렉터리 내용은 다음과 같습니다.
- C 폴더에는 C 및 C++ 관련 코드가 들어 있습니다.
- Java 폴더에는 SDK를 간접적으로 호출하기 위한 HTTP 서버가 들어 있습니다.
- ROS 폴더에는 ROS 예제가 들어 있습니다.
- ROS2 폴더에는 ROS 2 예제가 들어 있습니다.
3.2.1 C 및 C++ 샘플 코드
C 디렉터리로 이동하세요. 디렉터리 내용은 다음과 같습니다.
- application_obstacle: 카메라 스트림 데이터를 가져와 장애물 회피 알고리즘을 활성화하고 알고리즘 결과를 출력합니다.
- application_pallet: 카메라 스트림 데이터를 가져와 팔레트 알고리즘을 활성화하고 알고리즘 결과를 출력합니다.
- arm_local_camera: 카메라 [ARM]에서 SDK를 호출하고 스트림 데이터를 가져옵니다.
- frame_callback: 콜백 방식으로 카메라 스트림 데이터를 가져옵니다.
- multi_cameras: 여러 카메라를 열고 스트리밍 데이터를 가져옵니다.
- single_camera: 단일 카메라를 열고 스트리밍 데이터를 가져옵니다.
- single_camera2: 구조체를 통해 프레임 데이터를 가져옵니다.
3.2.2 Java 샘플 코드
Java 디렉터리로 이동하세요. 디렉터리 내용은 다음과 같습니다.
- Config: 서버 관련 구성이 저장된 폴더
- Middleware: 서버 토픽
- LxCamera.postman_collection.json: Postman 구성 파일
- README: Java 가상 서버 사용 안내
3.2.3 ROS 샘플 코드
ros 디렉터리로 이동하세요. 디렉터리 내용은 다음과 같습니다.
- lx_camera_node_ws: 표준 ROS 드라이버가 들어 있는 폴더
- README.EN: 노드를 컴파일하고 새 노드를 만드는 방법을 영어로 설명합니다.
3.2.4 ROS 2 샘플 코드
ros2 디렉터리로 이동하세요. 디렉터리 내용은 다음과 같습니다.
- lx_camera_node_ws: 표준 ROS 2 드라이버가 들어 있는 폴더
- README.EN: 노드를 컴파일하고 새 노드를 만드는 방법을 영어로 설명합니다.
3.2.5 ros-v1pro 샘플 코드
ros-v1pro 디렉터리로 이동하세요. 디렉터리 내용은 다음과 같습니다.
- src: 표준 ROS 드라이버가 들어 있는 폴더
- README: 이 노드의 사용 방법을 설명합니다.
- README.pdf: 이 노드의 사용 방법을 설명합니다.
샘플 컴파일 및 실행
4.1 C 및 C++ 샘플 코드 컴파일 및 실행
예제의 C 폴더로 이동하세요.


4.2 Java 샘플 실행 절차
Java는 다른 샘플 코드와 다릅니다. 소스 코드를 직접 제공하지 않고 HTTP 서버와 Postman 예제를 제공합니다. HTTP를 통해 카메라를 간접적으로 제어하려면 Java 예제를 선택하고 Java 폴더로 이동하세요. 폴더 내용은 다음과 같습니다.
- config 폴더로 이동하여 Configs.json 파일의 http_sever_host 필드와 http_sever_port 필드를 수정하세요.
- middleware 폴더로 이동하여 start.sh 스크립트를 실행하고 전송 서버를 활성화하세요.

- Postman으로 LxCamera.postman_collection.json 파일을 열어 샘플 포트로 데이터를 보내세요.
4.3 ROS 샘플 코드 컴파일 및 실행
ROS 폴더로 이동하여 콘솔을 열고 다음을 실행하세요.

lx_camera_node_ws 폴더로 이동한 다음 다음을 실행하세요.



roslaunch로 노드를 시작하세요.
4.4 ROS 2 샘플 코드 컴파일 및 실행
ros2 폴더로 이동하세요. 폴더 내용은 다음과 같습니다.

ros-pcl 종속 패키지를 설치하세요. foxy를 시스템에 설치된 ROS 2 배포판 이름으로 바꾸세요.
lx_camera_node_ws 디렉터리로 이동하여 프로젝트를 빌드하세요.


ros2 launch로 노드를 시작하세요.
4.5 ros-v1pro 샘플 코드 컴파일 및 실행
ros-v1pro는 V1PRO 카메라 전용 ROS 드라이버입니다. ros-v1pro 폴더의 README.pdf에서 드라이버를 자세히 설명합니다. 이 문서에서는 간단한 소개만 제공합니다.ros-v1pro 폴더로 이동하여 컴파일하세요.


- roslaunch lx_camera_ros localization.launch
- roslaunch lx_camera_ros mapping.launch
- roslaunch lx_camera_ros sensor_sim.launch
샘플 코드 참고
이 섹션에서는 모든 코드와 의사 코드를 여러 부분으로 나눕니다. 일반적으로 한 섹션의 내용은 같은 파일에 속합니다. 자세한 설명이 있는 특수 파일을 제외하면 소스 코드 파일에는 일반 모듈만 설명되어 있으며 세부 설명은 코드 주석으로 제공됩니다.5.1 C 및 C++
5.1.1 CMakeLists
5.1.2 application_obstacle 및 application_pallet
5.1.3 arm_local_camera
5.1.4 frame_callback
5.1.5 multi_cameras
5.1.6 single_camera
5.1.7 single_camera2
5.2 Java
Java 예제는 HTTP 서버만 제공하므로 여기서는 인터페이스와 메시지 형식만 설명합니다. 아래와 같이 Postman으로 샘플 파일을 여세요. 모든 메시지는 POST 방식입니다. 보내기 전에 IP를 서버 IP로 변경하되 URL은 수정하지 마세요. URL은 서버 내부에 하드 코딩되어 있습니다. 응답 메시지 형식과 내용은 모두 body에 있습니다. 예제에서 제공하는 인터페이스는 다음과 같습니다.

- log_path: 로그 출력 경로
- print_level: 로그 출력 수준
- enable_screen_print: 콘솔에 로그를 출력할지 여부

- open_mode: 카메라를 여는 모드
- param: 카메라를 열기 위한 매개변수

- handle: 카메라 핸들입니다. DcOpenDevice에서 반환됩니다.

- handle: 설정할 카메라의 핸들
- cmd: 명령 번호
- handle: 설정할 카메라의 핸들
- cmd: 명령 번호

- handle: 설정할 카메라의 핸들
- cmd: 명령 번호
- value: 설정할 값
- handle: 설정할 카메라의 핸들
- cmd: 명령 번호
- 기타 관련 지침은 다음 표를 참고하세요.
5.3 ROS1 및 ROS2
ROS 설명에서는 드라이버 소스 코드 자체보다 launch 파일의 구성에 해당하는 내용, 구성 조정 방법, 메시지 송수신 및 구독 방법을 다룹니다. 제공되는 ROS 노드에는 대부분의 기능이 이미 포함되어 있으므로 드라이버 소스 코드를 직접 수정하지 않는 것이 좋습니다. 특별한 요구 사항이 있다면 먼저 C++ 예제의 코드 흐름을 이해한 후 드라이버 소스 코드를 수정하세요. ROS 드라이버를 실행할 때는 시스템 기본 경로에 있는 OpenCV와 PCL 버전이 각각 하나만 존재하는지 확인해야 합니다. 그렇지 않으면 ROS 라이브러리를 링크할 때 오류가 발생하여 컴파일이 실패하거나 실행 중 충돌이 발생할 수 있습니다.5.3.1 ROS1 launch 파일 설명
5.3.1.1 모든 launch 파일
- src/launch 폴더에는 다음 파일이 있습니다.

- localization.launch: 시각 위치 추정 노드 실행 파일
- lx_camera_ros.launch: 일반 노드 실행 파일
- mapping.launch: 시각 위치 추정 매핑 실행 파일
- obstacle.launch: 장애물 회피 알고리즘 실행 파일
- obstacleV2.launch: 장애물 회피 알고리즘 V2 실행 파일
- pallet.launch: 팔레트 알고리즘 실행 파일
- sensor_sim.launch: 위치 추정 데이터를 시뮬레이션하는 실행 파일
- 서로 다른 launch 파일을 실행하면 노드의 다른 기능을 실행할 수 있습니다. localization, mapping 및 sensor를 제외하면 모든 노드의 매개변수 내용은 같지만 구성은 다릅니다. 자세한 내용은 다음 섹션에서 설명합니다. localization, mapping 및 sensor 세 launch 파일의 매개변수에 대한 자세한 설명은 ros-v1pro 노드 설명을 참고하세요.
5.3.1.2 카메라 IP, 스트림 구성, 작동 모드 구성, 포인트 클라우드 단위 등
- ip: 연결할 카메라의 IP입니다. 0으로 설정하면 기본적으로 첫 번째 카메라에 연결합니다.
- log_path: SDK 로그 저장 경로이며 절대 경로를 입력해야 합니다.
- is_xyz: 포인트 클라우드 데이터를 전송할지 여부
- is_depth: 깊이 데이터를 전송할지 여부
- is_amp: 강도 맵 데이터를 전송할지 여부
- is_rgb: RGB 이미지 데이터를 전송할지 여부
- lx_work_mode: 작동 모드
- lx_application: 알고리즘 활성화 여부. 0: 끔, 1: 장애물 회피 알고리즘, 2: 팔레트 알고리즘, 3: 위치 추정 알고리즘, 4: 장애물 회피 알고리즘 V2
- lx_tof_unit: 포인트 클라우드 단위. 1은 미터, 0은 밀리미터이며 rviz에서 확인할 때는 1로 변경해야 합니다.
5.3.1.3 카메라 자세 구성
포인트 클라우드의 회전 각도와 변환 벡터를 구성할 수 있습니다.- X: 포인트 클라우드 중심을 기준으로 한 카메라의 X축 변환량
- Y: 포인트 클라우드 중심을 기준으로 한 카메라의 Y축 변환량
- Z: 포인트 클라우드 중심을 기준으로 한 카메라의 Z축 변환량
- Yaw: Z축을 기준으로 한 포인트 클라우드의 회전 각도
- Roll: X축을 기준으로 한 포인트 클라우드의 회전 각도
- Pitch: Y축을 기준으로 한 포인트 클라우드의 회전 각도
5.3.1.4 launch 구성 사용 여부
launch 파일의 카메라 매개변수 구성을 사용할지 선택할 수 있습니다.- raw_param: 0: 카메라의 구성 사용, 1: launch 파일의 구성 사용
5.3.1.5 2D 매개변수 구성
- lx_2d_binning:0:1x1,1:2x2,2:4x4
- lx_2d_undistort: 2D 왜곡 보정, 0: 끔, 1: 켬
- lx_2d_undistort_scale: 2D 왜곡 보정 계수
- lx_2d_auto_exposure: 2D 자동 노출, 0: 끔, 1: 켬
- lx_2d_auto_exposure_value: 2D 자동 노출 목표 강도
- lx_2d_exposure: 2D 노출 값
- lx_2d_gain: 2D 게인
5.3.1.6 3D 매개변수 구성
- lx_rgb_to_tof: RGB 정렬
- lx_3d_binning:0:1x1,1:2x2,2:4x4
- lx_mulit_mode: 다중 장치 모드. 다중 장치 간섭을 제거할 수 있으며 0: 끔, 1: 켬
- lx_3d_undistort: 3D 왜곡 보정, 0: 끔, 1: 켬
- lx_3d_undistort_scale: 3D 왜곡 보정 계수
- lx_hdr: HDR, 0: 끔, 1: 켬
- lx_3d_auto_exposure: 3D 자동 노출, 0: 끔, 1: 켬
- lx_3d_auto_exposure_value: 3D 자동 노출 목표 강도
- lx_3d_first_exposure: 3D 고점
- lx_3d_second_exposure: 3D 저점
- lx_3d_gain: 3D 게인
5.3.1.7 최대 및 최소 깊이
- lx_min_depth: 최소 깊이
- lx_max_depth: 최대 깊이
5.3.2 ROS2 launch 파일 설명
5.3.2.1 모든 launch 파일
src/launch 폴더에는 다음 파일이 있습니다.
- localization.launch.py: 시각 위치 추정 노드 실행 파일
- lx_camera_ros.launch.py: 일반 노드 실행 파일
- mapping.launch.py: 시각 위치 추정 매핑 실행 파일
- obstacle.launch.py: 장애물 회피 알고리즘 실행 파일
- obstacleV2.launch.py: 장애물 회피 알고리즘 V2 실행 파일
- pallet.launch.py: 팔레트 알고리즘 실행 파일
- sensor_sim.launch.py: 위치 추정 데이터를 시뮬레이션하는 실행 파일
5.3.2.2 카메라 IP, 스트림 구성, 작동 모드 구성, 포인트 클라우드 단위 등
- ip: 연결할 카메라의 IP입니다. 0으로 설정하면 기본적으로 첫 번째 카메라에 연결합니다.
- log_path: SDK 로그 저장 경로이며 절대 경로를 입력해야 합니다.
- is_xyz: 포인트 클라우드 데이터를 전송할지 여부
- is_depth: 깊이 데이터를 전송할지 여부
- is_amp: 강도 맵 데이터를 전송할지 여부
- is_rgb: RGB 이미지 데이터를 전송할지 여부
- lx_work_mode: 작동 모드
- lx_application: 알고리즘 활성화 여부. 0: 끔, 1: 장애물 회피 알고리즘, 2: 팔레트 알고리즘, 3: 위치 추정 알고리즘, 4: 장애물 회피 알고리즘 V2
- lx_tof_unit: 포인트 클라우드 단위. 1은 미터, 0은 밀리미터이며 rviz에서 확인할 때는 1로 변경해야 합니다.
5.3.2.3 카메라 자세 구성
포인트 클라우드의 회전 각도와 변환 벡터를 구성할 수 있습니다.- X: 포인트 클라우드 중심을 기준으로 한 카메라의 X축 변환량
- Y: 포인트 클라우드 중심을 기준으로 한 카메라의 Y축 변환량
- Z: 포인트 클라우드 중심을 기준으로 한 카메라의 Z축 변환량
- Yaw: Z축을 기준으로 한 포인트 클라우드의 회전 각도
- Roll: X축을 기준으로 한 포인트 클라우드의 회전 각도
- Pitch: Y축을 기준으로 한 포인트 클라우드의 회전 각도
5.3.2.4 launch 구성 사용 여부
launch 파일의 카메라 매개변수 구성을 사용할지 선택할 수 있습니다.- raw_param: 0: 카메라의 구성 사용, 1: launch 파일의 구성 사용
5.3.2.5 2D 매개변수 구성
- lx_2d_binning:0:1x1,1:2x2,2:4x4
- lx_2d_undistort: 2D 왜곡 보정, 0: 끔, 1: 켬
- lx_2d_undistort_scale: 2D 왜곡 보정 계수
- lx_2d_auto_exposure: 2D 자동 노출, 0: 끔, 1: 켬
- lx_2d_auto_exposure_value: 2D 자동 노출 목표 강도
- lx_2d_exposure: 2D 노출 값
- lx_2d_gain: 2D 게인
5.3.2.6 3D 매개변수 구성
- lx_rgb_to_tof: RGB 정렬
- lx_3d_binning:0:1x1,1:2x2,2:4x4
- lx_mulit_mode: 다중 장치 모드. 다중 장치 간섭을 제거할 수 있으며 0: 끔, 1: 켬
- lx_3d_undistort: 3D 왜곡 보정, 0: 끔, 1: 켬
- lx_3d_undistort_scale: 3D 왜곡 보정 계수
- lx_hdr: HDR, 0: 끔, 1: 켬
- lx_3d_auto_exposure: 3D 자동 노출, 0: 끔, 1: 켬
- lx_3d_auto_exposure_value: 3D 자동 노출 목표 강도
- lx_3d_first_exposure: 3D 고점
- lx_3d_second_exposure: 3D 저점
- lx_3d_gain: 3D 게인
5.3.2.7 최대 및 최소 깊이
- lx_min_depth: 최소 깊이
- lx_max_depth: 최대 깊이
5.3.3 고유 토픽 설명
ROS1과 ROS2의 고유 토픽 형식은 같으므로 여기서는 ROS1을 예로 사용합니다. src/msg 폴더에는 다음 파일이 있습니다.
5.3.3.1 FrameRate.msg
이 노드는 프레임 속도 정보를 출력합니다. 메시지 형식은 다음과 같습니다.
- header: 현재 데이터의 프레임 정보 및 타임스탬프
- depth: 깊이 맵을 켜면 깊이 맵의 프레임 속도를 출력합니다.
- amp: 강도 맵을 켜면 강도 맵의 프레임 속도를 출력합니다.
- rgb: RGB를 켜면 RGB 프레임 속도를 출력합니다.
- temperature: 카메라 온도를 출력합니다.

5.3.3.2 Obstacle.msg
obstacle은 장애물 회피 알고리즘 결과와 관련된 정보를 출력합니다. obstacle 메시지 형식은 다음과 같습니다.
- header: 현재 데이터의 프레임 정보 및 타임스탬프
- status: 장애물 회피에서 반환한 상태 정보
- io_output: IO 인터페이스에서 출력하는 장애물 회피 정보
- box_number: 장애물 수
- box: 장애물 정보. 가변 길이 배열이며 길이는 box_number로 결정됩니다.

5.3.3.3 Obstacle_box.msg
obstacle_box는 장애물 관련 정보를 출력하며 obstacle_box 메시지 형식은 다음과 같습니다.
- center: 포인트 클라우드에서 장애물의 질량 중심
- rotation: 장애물 포인트 클라우드의 회전 행렬
- translation: 장애물 포인트 클라우드의 변환 벡터
- width: 장애물 프레임의 너비
- height: 장애물 프레임의 높이
- depth: 장애물 프레임의 깊이

5.3.3.4 Result.msg
노드의 service에 명령 메시지를 보낸 후 반환되는 값은 Result에 저장됩니다.
- ret: SDK 실행으로 가져온 반환 값
- msg: SDK 실행으로 가져온 반환 값에 대한 설명
5.3.3.5 Pallet.msg
팔레트는 팔레트 알고리즘 결과와 관련된 정보를 출력합니다. 팔레트 메시지 형식은 다음과 같습니다.
- header: 현재 데이터의 프레임 정보 및 타임스탬프
- status: 팔레트 인식에서 반환한 상태 정보:
- x: 트레이와 카메라 광학 중심 사이의 X 거리
- y: 트레이와 카메라 광학 중심 사이의 Y 거리
- yaw: 트레이 중심과 카메라 광학 중심 사이의 세타 각도

5.3.4 고유 서비스 설명
ROS1과 ROS2의 고유 서비스 형식은 같으므로 여기서는 ROS1을 예로 사용합니다. src/srv 폴더에는 다음 파일이 있습니다.
5.3.4.1 LxBool.srv

- cmd: 가져오거나 설정할 매개변수 번호
- val: 설정할 때 입력하는 값
- is_set: 매개변수를 설정할지 여부입니다. true이면 val의 값이 카메라에 설정되고, false이면 카메라에서 이 매개변수의 값을 읽어 표시합니다.
- val: 가져오기 또는 설정 작업 후 반환되는 카메라의 현재 매개변수 값
- 결과: SDK 인터페이스 호출로 반환되는 값과 정보
5.3.4.2 LxCmd.srv

- cmd: 가져오거나 설정할 매개변수 번호입니다. 0이면 모든 매개변수 번호를 반환합니다.
- 결과: SDK 인터페이스 호출로 반환되는 값과 정보입니다. cmd는 여러 값을 반환할 수 있습니다.
5.3.4.3 LxFloat.srv

- cmd: 가져오거나 설정할 매개변수 번호
- val: 설정할 때 입력하는 값
- is_set: 매개변수를 설정할지 여부입니다. true이면 val의 값이 카메라에 설정되고, false이면 카메라에서 이 매개변수의 값을 읽어 표시합니다.
- max_value: 이 매개변수에 설정할 수 있는 최대값
- min_value: 이 매개변수에 설정할 수 있는 최소값
- cur_value: 카메라에 설정된 이 매개변수의 현재 값
- available: 이 매개변수를 설정할 수 있는지 여부
- 결과: SDK 인터페이스 호출로 반환되는 값과 정보
5.3.4.4 LxInt.srv

- cmd: 가져오거나 설정할 매개변수 번호
- val: 설정할 때 입력하는 값
- is_set: 매개변수를 설정할지 여부입니다. true이면 val의 값이 카메라에 설정되고, false이면 카메라에서 이 매개변수의 값을 읽어 표시합니다.
- max_value: 이 매개변수에 설정할 수 있는 최대값
- min_value: 이 매개변수에 설정할 수 있는 최소값
- cur_value: 카메라에 설정된 이 매개변수의 현재 값
- available: 이 매개변수를 설정할 수 있는지 여부
- 결과: SDK 인터페이스 호출로 반환되는 값과 정보
5.3.4.5 LxString.srv

- cmd: 가져오거나 설정할 매개변수 번호
- val: 설정할 때 입력하는 값
- is_set: 매개변수를 설정할지 여부입니다. true이면 val의 값이 카메라에 설정되고, false이면 카메라에서 이 매개변수의 값을 읽어 표시합니다.
- val: 가져오기 또는 설정 작업 후 반환되는 카메라의 현재 매개변수 값
- 결과: SDK 인터페이스 호출로 반환되는 값과 정보
5.3.5 토픽 구독 방식 설명
5.3.5.1 프레임 속도, 팔레트 알고리즘, 장애물 회피 알고리즘 출력 데이터 구독
프레임 속도 구독 lx_camera_node_ws 디렉터리에서 다음을 입력합니다: bash rate.sh





5.3.5.2 이미지 데이터 구독(ROS1)
ROS에 포함된 이미지 도구를 사용하여 노드가 출력하는 이미지 정보를 확인할 수 있습니다. 콘솔에 다음 명령을 입력합니다: rqt_image_view 명령을 입력하면 다음 창이 표시됩니다.


Add(추가) 버튼을 클릭하면 창이 표시됩니다.


5.3.5.3 이미지 데이터 구독(ROS2)
ROS2에 포함된 이미지 도구를 사용하여 노드가 출력하는 이미지 정보를 확인할 수 있습니다. 콘솔에 rqt 명령을 입력하세요. 명령을 입력하면 다음 창이 표시됩니다.
Image View(이미지 보기)를 선택하세요. 선택하면 다음 화면이 표시됩니다.



Add(추가) 버튼을 클릭하면 창이 표시됩니다.


5.3.5.4 포인트 클라우드 데이터 구독
노드가 출력하는 포인트 클라우드 정보는 ROS 또는 ROS2에서 제공하는 포인트 클라우드 도구로 확인할 수 있습니다. 명령: rviz【ROS1】, rviz2【ROS2】 명령을 입력하면 다음 창이 표시됩니다.




5.3.6 서비스 통신 방식 설명
ROS1에서는 Tab 키를 사용하여 모든 명령을 자동 완성할 수 있지만 ROS2에서는 토픽만 자동 완성할 수 있으며 메시지 부분은 직접 입력해야 합니다. ROS1에서 데이터를 입력할 때는 자동 완성 형식으로 입력할 수 있습니다. ROS2에서 데이터를 입력할 때는 YAML 파일 형식으로 입력해야 합니다. 노드가 실행되면 lx_camera_node_ws 폴더에서 터미널을 열고 터미널의 환경을 구성한 후 다음 명령을 입력합니다: source devel/setup.bash5.3.6.1 모든 매개변수 번호 목록 가져오기(Lx_Cmd)
ROS1 터미널에 다음을 입력합니다: rosservice call /lx_camera_node/LxCamera_LxCmd “cmd: 0”



일부 매개변수는 스트림을 중지해야 설정할 수 있거나 설정 순서가 정해져 있습니다. 구체적인 요구 사항은 기술 지원 담당자에게 문의하세요.
5.3.6.2 Int 매개변수 가져오기(Lx_Int)
ROS1 터미널에 다음을 입력합니다: rosservice call /lx_camera_node/LxCamera_LxInt “cmd: 1001 val: 0 is_set: false”

ROS2 터미널에 다음을 입력합니다:
ros2 service call /LxCamera_LxInt lx_camera_ros/srv/LxInt '{cmd: 1001,val: 0,is_set: false}'


5.3.6.3 Int 매개변수 설정(Lx_Int)
ROS1 터미널에 다음을 입력합니다: rosservice call /lx_camera_node/LxCamera_LxInt “cmd: 1001 val: 2000 is_set: true”

ROS2 터미널에 다음을 입력합니다:
ros2 service call /LxCamera_LxInt lx_camera_ros/srv/LxInt '{cmd: 1001,val: 3000,is_set: true}'


5.3.6.4 Float 매개변수 가져오기(Lx_Float)
ROS1 터미널에 다음을 입력합니다: rosservice call /lx_camera_node/LxCamera_LxFloat “cmd: 2007 val: 0.0 is_set: false”

ROS2 터미널에 다음을 입력합니다:
ros2 service call /LxCamera_LxFloat lx_camera_ros/srv/LxFloat '{cmd: 2007,val: 0,is_set: false}'


5.3.6.5 Float 매개변수 설정(Lx_Float)
ROS1 터미널에 다음을 입력합니다: rosservice call /lx_camera_node/LxCamera_LxFloat “cmd: 2007 val: 5.0 is_set: true”

ROS2 터미널에 다음을 입력합니다:
ros2 service call /LxCamera_LxFloat lx_camera_ros/srv/LxFloat '{cmd: 2007,val: 5.0,is_set: true}'


5.3.6.6 Bool 파라미터 가져오기 (Lx_Bool)
ROS1 터미널에 다음을 입력합니다: rosservice call /lx_camera_node/LxCamera_LxBool “cmd: 3012 val: false is_set: false”

ROS2 터미널에 다음을 입력합니다:
ros2 service call /LxCamera_LxBool lx_camera_ros/srv/LxBool '{cmd: 3012,val: false,is_set: false}'


5.3.6.7 Bool 파라미터 설정 (Lx_Bool)
ROS1 터미널에 다음을 입력합니다: rosservice call /lx_camera_node/LxCamera_LxBool “cmd: 3012 val: true is_set: true”

ROS2 터미널에 다음을 입력합니다:
ros2 service call /LxCamera_LxBool lx_camera_ros/srv/LxBool '{cmd: 3012,val: true,is_set: true}'


5.3.6.8 String 매개변수 가져오기(Lx_String)
ROS1 터미널에 다음을 입력합니다: rosservice call /lx_camera_node/LxCamera_LxString “cmd: 4001 val: ” is_set: false”

ROS2 터미널에 다음을 입력합니다:
ros2 service call /LxCamera_LxString lx_camera_ros/srv/LxString '{cmd: 4001,val: '',is_set: false}'


5.3.6.9 String 매개변수 설정(Lx_String)
ROS1 터미널에 다음을 입력합니다: rosservice call /lx_camera_node/LxCamera_LxString “cmd: 4001 val: ‘put:\“123\”’ is_set: true”

ROS2 터미널에 다음을 입력합니다:
ros2 service call /LxCamera_LxString lx_camera_ros/srv/LxString '{cmd: 4001,val: "put:\\"123\\"",is_set: true}'


ROS 권장 하드웨어 및 리소스 사용량
6.1 권장 하드웨어 구성
권장 하드웨어 구성은 CPU 코어 수, CPU 사용량 및 메모리 크기를 기준으로 분석합니다. 이는 권장 구성이지 최소 요구 사항이 아닙니다. 하드웨어가 권장 사양보다 낮아도 스트림 출력을 줄이거나 포인트 클라우드 계산을 끄거나 알고리즘 부하를 낮추면 안정적으로 작동할 수 있습니다. 사용 가능한 구성보다 높은 부하를 실행하면 ROS 코어 또는 Ubuntu가 충돌할 수 있습니다. 이 장의 두 번째 및 세 번째 섹션에서는 자세한 사용량 데이터를 제공합니다. 시스템에 가장 적합한 실행 환경과 스트림 구성을 선택하세요. 여기 제시된 모든 데이터는 M4 Pro 카메라를 사용하는 VM에서 수집했습니다. Ubuntu16.04
Ubuntu18.04
Ubuntu20.04
Ubuntu22.04
6.2 CPU 세부 정보
CPU 세부 정보에는 다양한 작동 조건에서 노드가 사용하는 CPU 리소스가 표시됩니다. 테스트는 AMD64 [8코어], 8G 메모리 하드웨어 환경을 기준으로 하며, 테스트 카메라는 M4 Pro, 테스트 알고리즘은 팔레트 알고리즘 입니다. 2D 너비와 높이는 1280*960, 3D 너비와 높이는 640*480이고, 2D 왜곡 보정은 켜짐, 3D 왜곡 보정은 꺼짐, 적분 시간 110–3000, 깊이 0–8000, ToF 프레임 속도 14, 스트리밍 모드, 평활화 수준 1, 노이즈 수준 1, 시간 영역 수준 0 으로 설정했습니다. 통계 명령은 TOP 입니다. 테스트 소프트웨어 환경이 VM 가상 머신 이므로 실제 장치에서 표시되는 데이터가 문서의 값과 비교해 변동하는 것은 정상입니다. S2와 같은 일부 카메라는 호스트 컴퓨터에서 알고리즘을 계산하므로 리소스 사용량이 많을 수 있으며 이는 정상입니다.1. 일부 용어는 다음과 같이 설명합니다.
- 단일 스트림: RGB, 깊이 및 강도 중 하나의 스트림을 켠 경우
- 듀얼 스트림: RGB, 깊이 및 강도 중 두 스트림을 켠 경우
- 세 스트림: RGB, 깊이 및 강도 세 스트림을 모두 켠 경우
- 네 스트림: RGB, 깊이, 강도 및 포인트 클라우드를 모두 켠 경우
- 팔레트 알고리즘을 켜려면 깊이를 활성화해야 합니다.
- 장애물 회피 알고리즘을 켜려면 깊이를 켜야 합니다.
- 위치 추정 알고리즘을 켜려면 RGB를 켜야 합니다.
표에서 연한 파란색 배경은 포인트 클라우드를 활성화한 실행 구성이며, 배경색이 없는 행은 포인트 클라우드를 활성화하지 않은 실행 구성입니다. 아래의 모든 테스트 데이터는 기본적으로 알고리즘을 아래쪽으로 이동한 상태를 기준으로 하므로 S2 시리즈 카메라에서는 일부 테스트 값이 너무 작을 수 있습니다 [S2 시리즈 카메라의 일부 알고리즘은 강제로 위쪽으로 이동함]. Ubuntu16.04
Ubuntu18.04
Ubuntu20.04
Ubuntu22.04
6.3 메모리 세부 정보
메모리 세부 정보에는 다양한 작동 조건에서 노드가 사용하는 메모리 리소스가 표시됩니다. 테스트는 AMD64 [8코어], 8G 메모리 하드웨어 환경을 기준으로 하며, 테스트 카메라는 M4 Pro, 테스트 알고리즘은 팔레트 알고리즘 입니다. 2D 너비와 높이는 1280*960, 3D 너비와 높이는 640*480이고, 2D 왜곡 보정은 켜짐, 3D 왜곡 보정은 꺼짐, 포인트 110–3000, 깊이 0–8000, ToF 프레임 속도 14, 스트리밍 모드, 평활화 수준 1, 노이즈 수준 1, 시간 영역 수준 0 으로 설정했습니다. 통계 명령은 TOP 입니다. 테스트 소프트웨어 환경이 VM 가상 머신 이므로 실제 장치에서 표시되는 데이터가 문서의 값과 비교해 변동하는 것은 정상입니다. S2와 같은 일부 카메라는 호스트 컴퓨터에서 알고리즘을 계산하므로 리소스 사용량이 많을 수 있으며 이는 정상입니다.1. 일부 용어는 다음과 같이 설명합니다.
- 단일 스트림: RGB, 깊이 및 인텐시티 중 하나의 스트림을 켠 경우
- 듀얼 스트림: RGB, 깊이 및 인텐시티 중 두 스트림을 켠 경우
- 3개 스트림: RGB, 깊이 및 인텐시티 세 스트림을 모두 켠 경우
- 4개 스트림: RGB, 깊이, 인텐시티 및 포인트 클라우드를 모두 켠 경우
- 팔레트 알고리즘을 활성화하려면 깊이를 켜야 합니다.
- 장애물 회피 알고리즘을 켜려면 깊이를 켜야 합니다.
- 로컬라이제이션 알고리즘을 켜려면 RGB를 켜야 합니다.
- 표에서 연한 파란색 배경은 포인트 클라우드를 켠 실행 구성이고, 색상이 없는 배경은 포인트 클라우드를 켜지 않은 실행 구성입니다. 아래의 모든 테스트 데이터는 기본적으로 알고리즘을 아래쪽으로 이동한 상태이므로 S2 시리즈 카메라에서는 모든 테스트 값이 너무 작을 수 있습니다 [S2 시리즈 카메라의 일부 알고리즘은 강제로 위쪽으로 이동합니다].
Ubuntu18.04
Ubuntu20.04
Ubuntu22.04
부록
이 부록에서는 일부 도구의 설치 방법을 제공합니다. 이 방법을 사용하려면 Linux에 대한 기본 지식이 필요합니다. 이 문서의 부록에 소개된 방법으로 모든 컴퓨터에 성공적으로 설치할 수 있다고 보장할 수는 없습니다. 컴퓨터 환경마다 다르고 발생하는 문제도 다를 수 있습니다. 부록에 없는 문제가 발생하면 직접 해결 방법을 검색하세요.1. Cmake 지정 버전 설치 방법
https://cmake.org/download/로 이동하여 필요한 CMake 버전을 다운로드하세요.tar -zxvf cmake-XXX.tar.gz로 다운로드한 패키지의 압축을 풀고 압축 해제된 디렉터리로 이동한 다음 컴파일하고 구성합니다.
./bootstrap
make
sudo make install
CMake 버전을 확인하여 설치가 성공했는지 확인하세요.
cmake —version
2. OpenCV 지정 버전 설치 방법
- 필요한 OpenCV 버전을 다운로드하세요: Releases-OpenCV

- 환경을 구성하고 다음 명령을 순서대로 실행하세요.
- 새 opencv 폴더를 만들고 다운로드한 소스 코드를 opencv 폴더에 압축 해제하세요.
- 다음 명령을 순서대로 실행하세요.
- cd opencv
- mkdir build && cd build
- sudocmake-DCMAKE_BUILD_TYPE=Release-D
- CMAKE_INSTALL_PREFIX=/usr/local ..
- sudo make -j4
- sudo make install을 실행하고 설치가 완료될 때까지 기다리세요.
3. PCL 지정 버전 설치 방법
- 지원되는 PCL 버전을 확인하세요:
- 지정한 PCL 버전 설치 (1.10.0은 필요한 버전 번호로 바꿔야 합니다):
4. ROS 설치
Ubuntu16.04- 소프트웨어 저장소와 비밀 키를 추가하세요:
- 비밀 키 추가:
- 저장소 업데이트:
- ROS 설치 완료:
- 환경 변수 구성:
- ROS 관련 도구 설치:
- ROS 1 설치가 완료되면 ROS와 함께 제공되는 예제를 실행하여 설치가 올바른지 확인하세요.

Ubuntu18.04
- 소프트웨어 저장소 설정:
- 소프트웨어 목록 업데이트:
- Ubuntu18.04용 ROS 1 설치:
- 환경 변수 설정:
- ROS 관련 도구 설치:
- ROS 1 설치가 완료되면 ROS와 함께 제공되는 예제를 실행하여 설치가 올바른지 확인하세요.

- 공개 키를 구성하세요.
- 서버에 연결할 수 없거나 시간이 초과되면 먼저 소프트웨어 저장소 목록을 업데이트하세요.
- 공개 키를 구성한 후 소프트웨어 목록을 다시 업데이트하세요.
- 환경 변수 설정:
- ROS 설치 도구:
- ROS 1 설치가 완료되면 ROS와 함께 제공되는 예제를 실행하여 설치가 올바른지 확인하세요.

5. ROS에서 새 테스트 패키지 만들기
- ws 폴더를 만들고 ws 폴더 안에 src 폴더를 만든 다음 src 폴더로 이동하여 다음을 실행하세요.
- 이렇게 하면 std_msgs, rospy, roscpp에 의존하는 example이라는 새 패키지가 생성됩니다.
- 그런 다음 새 패키지를 컴파일하세요: catkin_make. 이 패키지는 실행 프로그램이 없는 빈 패키지입니다.
- 이제 ‘Hellow world’를 출력하는 패키지를 만드는 방법을 보여줍니다.
- 방금 만든 패키지에서 src 폴더(패키지 안의 src)로 이동하여 아래와 같이 새 main.cpp를 만드세요(경로에 유의하세요).

- main.cpp에 다음 코드를 입력하세요.

- 그런 다음 외부 CMakeLists.txt를 수정하고 맨 아래에 다음 줄을 추가하세요: add_executable(example src/main.cpp)

- 그런 다음 ws 디렉터리로 돌아가 컴파일 명령을 실행하세요: catkin_make

- 이 화면이 표시되면 컴파일이 성공한 것입니다.
- 다음으로 환경을 구성하세요.

- 그런 다음 프로그램을 실행하면 출력 결과를 확인할 수 있습니다.

6. ROS2 설치
Ubuntu16.04- 비밀 키 추가:
- 권한 추가:
- 이 단계에서 오류가 발생하면 VPN으로 네트워크 제한을 우회한 후 브라우저에서 URL을 열어 내용을 복사하고 새 ros.asc 파일에 붙여 넣으세요. 복사가 완료되면 다음과 같습니다.
- 3단계를 다시 실행하세요: sudo apt-key add ros.asc
- 계속 실행하세요:
- ROS2 설치:
- 환경 변수 구성:
- 기능 패키지를 설치하세요.
- 예제 프로그램을 실행해 보세요. 터미널을 열고 다음을 실행합니다.
- 다른 터미널에서 실행하세요.
- 다음 터미널 출력이 설치 성공을 확인해 줍니다.
- 소프트웨어 저장소를 추가하세요.
- 이 단계에서 다음과 같은 오류가 발생하면:
- VPN으로 네트워크 제한을 우회한 후 브라우저에서 URL을 열어 내용을 복사하고 새 ros.asc 파일에 붙여 넣으세요. 복사가 완료되면 다음과 같습니다.
- 3단계를 다시 실행하세요: sudo apt-key add ros.asc
- 계속 실행하세요:
- 완료되면 ROS2 다운로드를 시작하세요. 빨간색으로 표시된 버전은 위 표의 해당 버전으로 바꿔야 합니다.
- 설치가 완료될 때까지 기다린 후 Python 라이브러리를 계속 설치하세요. 다음을 실행합니다: sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete
- 샘플 프로그램을 실행해 보세요. 터미널을 열고 다음을 실행합니다.
- 다른 터미널에서 실행하세요.
- 다음 터미널 출력이 설치 성공을 확인해 줍니다.
- 소프트웨어 저장소를 추가하세요.
- 다음 오류가 발생하면 “ailed to connect to raw.githubusercontent.com port 443 after 13 ms: connection refused”

- 다음 항목을 추가하세요.
- 추가된 파일은 다음과 같습니다.

- 계속 실행하세요:
- 완료되면 ROS2 다운로드를 시작하세요:
- 설치가 완료될 때까지 기다린 후 Python 라이브러리를 계속 설치하세요. 다음을 실행합니다: sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete
- 그런 다음 환경 변수를 구성하세요:
- 샘플 프로그램을 실행해 보세요. 터미널을 열고 다음을 실행합니다:
- 다른 터미널에서 실행하세요.
- 다음 터미널 출력이 설치 성공을 확인해 줍니다.
- 소프트웨어 저장소를 추가하세요.
- 다음 오류가 발생하면 “ailed to connect to raw.githubusercontent.com port 443 after 13 ms: connection refused”


- 완료되면 ROS2 다운로드를 시작하세요: sudo apt update
- 설치가 완료될 때까지 기다린 후 Python 라이브러리를 계속 설치하세요. 다음을 실행합니다: sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete
- 그런 다음 환경 변수를 구성하세요.
- 샘플 프로그램을 실행해 보세요. 터미널을 열고 다음을 실행합니다.
- 다른 터미널에서 실행하세요.
- 다음 터미널 출력이 설치 성공을 확인해 줍니다.
7. ROS2에서 새 테스트 패키지 만들기
- 다음 명령을 실행하세요.
- example_p라는 새 패키지와 example_n이라는 노드를 만들 수 있습니다. 실행하면 hello world example_p package가 출력됩니다.