Версия документа: V1.0; дата редакции: 2024-10-12.
Обзор
Camera SDK MRDVS для Linux включает примеры на C/C++, Java (HTTP-сервис), ROS и ROS 2. Примеры показывают базовый рабочий процесс SDK; добавьте логику приложения и обработку ошибок, необходимые для вашего проекта. Сначала завершите настройку среды, выполните установочный скрипт и проверьте каталоги примеров. Затем следуйте разделу компиляции и запуска для нужного языка. В приложении приведены способы установки распространённых зависимостей и тестовых пакетов.Система и среда
Совместимые системы и версии зависимостей
Поддерживаются следующие системы Linux. Версии программ по умолчанию приведены ниже:2.2 Проверка версии системы и приложений
2.2.1 Проверка версии системы

- Основной номер версии: 5
- Номер версии: 15 [Нечётные номера соответствуют версиям разработки, чётные — стабильным версиям]
- Номер редакции: 0 [Количество изменений]
- Номер редакции этой версии: 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 [для отображения изображений камеры]
![Install Opencv [can display camera images] related icons](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 [для отображения облака точек]
![Install Pcl [can display point cloud] related icons](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 содержит HTTP-сервер для косвенного вызова SDK.
- Папка Ros содержит пример ROS.
- Папка Ros2 содержит пример ROS 2.
3.2.1 Примеры кода C и C++
Перейдите в каталог C. Его содержимое выглядит следующим образом:
- application_obstacle: получение данных потока камеры, включение алгоритма объезда препятствий и вывод результатов алгоритма;
- application_pallet: получение данных потока камеры, включение алгоритма паллет и вывод результатов алгоритма;
- arm_local_camera: вызов SDK на камере [ARM] и получение данных потока;
- frame_callback: получение данных потока камеры с помощью 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 и измените поля http_sever_host и http_sever_port в файле Configs.json:
- Перейдите в папку middleware и выполните скрипт start.sh, чтобы включить сервер передачи данных.

- Откройте файл LxCamera.postman_collection.json в Postman и отправьте данные на порт примера.
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 — специализированный драйвер ROS для камеры V1PRO. В папке 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: он жёстко задан внутри сервера. Формат и содержимое ответа находятся в теле сообщения. В примере доступны следующие интерфейсы:
- DcGetApiVersion: получить номер версии SDK; параметры не требуются.

- DcSetInfoOutput: задать путь для вывода журнала SDK. Параметры:
- log_path: путь вывода журнала;
- print_level: уровень вывода журнала;
- enable_screen_print: выводится ли журнал в консоль.
- DcLog: вывести сообщение в журнал SDK. Любое переданное содержимое будет записано в журнал SDK.
- DcGetDeviceList: получить список устройств; входные параметры не требуются, вывод имеет формат JSON.
- DcOpenDevice: открыть устройство и передать следующие параметры:

- open_mode: режим открытия камеры;
- param: параметры открытия камеры.
- DcStartStream: запустить передачу потоковых данных с выбранной камеры. Входные параметры:

- handle: дескриптор камеры, возвращаемый функцией DcOpenDevice.
- DcSetCmd: отправить команды камере. Передайте следующие параметры:

- handle: дескриптор настраиваемой камеры;
- cmd: номер команды.
- DcGetPtrValue: получить данные указателя (изображение, параметры и т. д.). Передайте следующие параметры:
- handle: дескриптор настраиваемой камеры;
- cmd: номер команды.
- DcSetIntValue: задать параметры камеры типа int. Входные параметры:

- handle: дескриптор настраиваемой камеры;
- cmd: номер команды;
- value: задаваемое значение.
- DcGetIntValue: получить параметр устройства типа int. Входные параметры:
- handle: дескриптор настраиваемой камеры;
- cmd: номер команды.
- Другие соответствующие инструкции приведены в таблице ниже:
5.3 ROS 1 и ROS 2
В описании ROS рассматриваются не исходный код драйвера, а параметры конфигурации в launch-файле, их настройка, а также отправка и подписка на сообщения. Предоставленный узел ROS уже содержит большинство функций, поэтому напрямую изменять исходный код драйвера не рекомендуется. При особых требованиях сначала изучите поток выполнения в примере C++, а затем изменяйте исходный код драйвера. При запуске драйвера ROS убедитесь, что в системном пути по умолчанию присутствует только одна версия OpenCV и PCL. В противном случае при связывании библиотеки ROS возникнет ошибка, которая может привести к сбою компиляции или аварийному завершению во время выполнения.5.3.1 Описание launch-файлов ROS 1
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, набор параметров во всех узлах одинаков, но их значения различаются. Подробности приведены в следующих разделах. Описание параметров трёх launch-файлов localization, mapping и sensor см. в разделе об узле 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 Описание launch-файлов ROS2
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
Возвращаемое значение после отправки командного сообщения в сервис узла сохраняется в Result:
- ret: возвращаемое значение, полученное при выполнении SDK
- msg: описание возвращаемого значения, полученного при выполнении SDK
5.3.3.5 Pallet.msg
Топик pallet содержит информацию о результатах алгоритма распознавания палет. Формат сообщения pallet выглядит следующим образом:
- header: информация о кадре и временная метка текущих данных
- status: сведения о состоянии, возвращённые алгоритмом распознавания палет:
- x: расстояние по оси X между палетой и оптическим центром камеры
- y: расстояние по оси Y между палетой и оптическим центром камеры
- yaw: угол theta между центром палеты и оптическим центром камеры

5.3.4 Описание уникальных сервисов
Поскольку уникальные типы сервисов ROS1 и ROS2 одинаковы, далее в качестве примера используется ROS1. В папкеsrc/srv находятся следующие файлы:

5.3.4.1 LxBool.srv

- cmd: номер параметра, который требуется получить или установить
- val: задаваемое значение
- is_set: нужно ли устанавливать параметр. Если значение true, значение val будет установлено в камере. Если значение false, параметр будет считан из камеры и выведен.
- val: текущее значение параметра камеры, возвращаемое при чтении или установке
- result: значение и информация, возвращённые при вызове интерфейса SDK
5.3.4.2 LxCmd.srv

- cmd: номер параметра, который требуется получить или установить. При значении 0 возвращаются номера всех параметров.
- result: значение и информация, возвращённые при вызове интерфейса SDK; cmd может иметь несколько возвращаемых значений
5.3.4.3 LxFloat.srv

- cmd: номер параметра, который требуется получить или установить
- val: задаваемое значение
- is_set: нужно ли устанавливать параметр. Если значение true, значение val будет установлено в камере. Если значение false, параметр будет считан из камеры и выведен.
- max_value: максимальное значение, которое можно установить для этого параметра
- min_value: минимальное значение, которое можно установить для этого параметра
- cur_value: текущее значение этого параметра в камере
- available: поддерживает ли этот параметр установку значения
- result: значение и информация, возвращённые при вызове интерфейса SDK
5.3.4.4 LxInt.srv

- cmd: номер параметра, который требуется получить или установить
- val: задаваемое значение
- is_set: нужно ли устанавливать параметр. Если значение true, значение val будет установлено в камере. Если значение false, параметр будет считан из камеры и выведен.
- max_value: максимальное значение, которое можно установить для этого параметра
- min_value: минимальное значение, которое можно установить для этого параметра
- cur_value: текущее значение этого параметра в камере
- available: поддерживает ли этот параметр установку значения
- result: значение и информация, возвращённые при вызове интерфейса SDK
5.3.4.5 LxString.srv

- cmd: номер параметра, который требуется получить или установить
- val: задаваемое значение
- is_set: нужно ли устанавливать параметр. Если значение true, значение val будет установлено в камере. Если значение false, параметр будет считан из камеры и выведен.
- val: текущее значение параметра камеры, возвращаемое при чтении или установке
- result: значение и информация, возвращённые при вызове интерфейса SDK
5.3.5 Описание способов подписки на топики
5.3.5.1 Подписка на данные о частоте кадров и результаты алгоритмов распознавания палет и предотвращения столкновений
Подписка на частоту кадров В каталоге lx_camera_node_ws выполните команду: bash rate.sh





5.3.5.2 Подписка на данные изображений (ROS1)
Информацию об изображениях, выводимую узлом, можно просматривать с помощью инструмента изображений, входящего в ROS: Введите в консоли команду: rqt_image_view После выполнения команды появится следующее окно:

amp — карта интенсивности, depth — карта глубины, rgb — карта RGB.
Выбирайте разные элементы для просмотра разных изображений или используйте rviz для просмотра данных изображений. Введите в консоли команду rviz, после чего появится следующее окно:



5.3.5.3 Подписка на данные изображений (ROS2)
Информацию об изображениях, выводимую узлом, можно просматривать с помощью инструмента изображений, входящего в ROS2. Введите в консоли командуrqt.
После выполнения команды появится следующее окно:



amp — карта интенсивности, depth — карта глубины, rgb — карта RGB.
Выбирайте разные элементы для просмотра разных изображений или используйте rviz2 для просмотра данных изображений. Введите в консоли команду rviz2, после чего появится следующее окно:



5.3.5.4 Подписка на данные облака точек
Информацию об облаке точек, выводимую узлом, можно просматривать с помощью инструмента облака точек из ROS или ROS2: Команды: rviz【ROS1】, rviz2【ROS2】 После выполнения команды появится следующее окно:

lx\_camera\_node, содержащий топик LxCamera\_Cloud. В этом топике находится сообщение PointCloud2. Выберите его и нажмите OK. После этого интерфейс будет выглядеть следующим образом:


mrdvs в поле карты, выделенном красным и зелёным цветом выше, чтобы увидеть облако точек. Результат выглядит следующим образом:

5.3.6 Описание способов обмена данными с сервисами
В ROS1 все команды можно дополнять клавишей Tab, а в ROS2 таким образом дополняются только топики; часть с сообщением необходимо вводить вручную. В ROS1 данные можно вводить в формате автодополнения. В ROS2 данные необходимо вводить в формате YAML-файла. После запуска узла откройте терминал в папке lx_camera_node_ws, настройте окружение и выполните команду:source devel/setup.bash.
5.3.6.1 Получение списка номеров всех параметров (Lx_Cmd)
ROS1 Enter in the terminal: rosservice call /lx_camera_node/LxCamera_LxCmd “cmd: 0”

ret — номер параметра. В msg указаны тип и описание параметра. Например, параметр 1001 имеет тип int и используется для получения и изменения значения первой экспозиции.
ROS2
Enter in the terminal: ros2 service call /LxCamera_LxCmd lx_camera_ros/srv/LxCmd ‘cmd: 0’


Some parameters need to stop the flow before they can be set, or there is a sequence of settings. Please contact the technical support staff for specific needs.
5.3.6.2 Get Int parameter (Lx_Int)
ROS1 Enter in the terminal: rosservice call /lx_camera_node/LxCamera_LxInt “cmd: 1001 val: 0 is_set: false”

ROS2 Enter in the terminal:
ros2 service call /LxCamera_LxInt lx_camera_ros/srv/LxInt '{cmd: 1001,val: 0,is_set: false}'


5.3.6.3 Set Int parameters (Lx_Int)
ROS1 Enter in the terminal: rosservice call /lx_camera_node/LxCamera_LxInt “cmd: 1001 val: 2000 is_set: true”

ROS2 Enter in the terminal:
ros2 service call /LxCamera_LxInt lx_camera_ros/srv/LxInt '{cmd: 1001,val: 3000,is_set: true}'


5.3.6.4 Get Float parameters (Lx_Float)
ROS1 Enter in the terminal: rosservice call /lx_camera_node/LxCamera_LxFloat “cmd: 2007 val: 0.0 is_set: false”

ROS2 Enter in the terminal:
ros2 service call /LxCamera_LxFloat lx_camera_ros/srv/LxFloat '{cmd: 2007,val: 0,is_set: false}'


5.3.6.5 Set Float parameters (Lx_Float)
ROS1 Enter in the terminal: rosservice call /lx_camera_node/LxCamera_LxFloat “cmd: 2007 val: 5.0 is_set: true”

ROS2 Enter in the terminal:
ros2 service call /LxCamera_LxFloat lx_camera_ros/srv/LxFloat '{cmd: 2007,val: 5.0,is_set: true}'


5.3.6.6 Get Bool parameters (Lx_Bool)
ROS1 Enter in the terminal: rosservice call /lx_camera_node/LxCamera_LxBool “cmd: 3012 val: false is_set: false”

ROS2 Enter in the terminal:
ros2 service call /LxCamera_LxBool lx_camera_ros/srv/LxBool '{cmd: 3012,val: false,is_set: false}'


5.3.6.7 Set Bool parameters (Lx_Bool)
ROS1 Enter in the terminal: rosservice call /lx_camera_node/LxCamera_LxBool “cmd: 3012 val: true is_set: true”

ROS2 Enter in the terminal:
ros2 service call /LxCamera_LxBool lx_camera_ros/srv/LxBool '{cmd: 3012,val: true,is_set: true}'


5.3.6.8 Get String parameter (Lx_String)
ROS1 Enter in the terminal: rosservice call /lx_camera_node/LxCamera_LxString “cmd: 4001 val: ” is_set: false”

ROS2 Enter in the terminal:
ros2 service call /LxCamera_LxString lx_camera_ros/srv/LxString '{cmd: 4001,val: '',is_set: false}'


5.3.6.9 Set String parameters (Lx_String)
ROS1 Enter in the terminal: rosservice call /lx_camera_node/LxCamera_LxString “cmd: 4001 val: ‘put:\“123\”’ is_set: true”

ROS2 Enter in the terminal:
ros2 service call /LxCamera_LxString lx_camera_ros/srv/LxString '{cmd: 4001,val: "put:\\"123\\"",is_set: true}'


ROS recommended hardware and resource usage
6.1 Recommended hardware configuration
In the recommended hardware configuration, the analysis is based on CPU core count, CPU usage, and memory size. These are recommended configurations, not minimum requirements. If your hardware is below the recommendation, stable operation may still be possible by reducing stream output, disabling point-cloud computation, or lowering the algorithm load. Running a workload above the available configuration may crash the ROS core or Ubuntu. The second and third sections of this chapter provide detailed usage data. Choose the operating environment and stream configuration that best fits your system. All data here was collected in a VM using an M4 Pro camera. Ubuntu16.04
Ubuntu18.04
Ubuntu20.04
Ubuntu22.04
6.2 CPU details
The CPU details will show the amount of CPU resources occupied by the node under different operating conditions. The test is based on AMD64 [8 cores], 8G memory hardware environment, the test camera is M4 Pro, the test algorithm is tray algorithm, 2D width and height are 1280*960, and 3D width and height are 640*480, 2D anti-distortion is on, 3D anti-distortion is off, and integration 110 - 3000, depth 0 - 8000, ToF frame rate 14, streaming mode, smoothing level 1, noise level 1, time domain level 0, statistics command is TOP. Because the test soft environment is VM virtual machine, it is normal for the data displayed by the physical machine to fluctuate compared with that in the document. For some cameras, such as S2, some algorithms are calculated on the host computer, which results in a large amount of resource usage, which is normal.1. Some nouns are explained as follows: -Single stream: refers to turning on any stream of RGB, depth, and intensity
- Dual stream: refers to turning on any two streams of RGB, depth and intensity
- Four streams: means RGB, depth, intensity, and point cloud are all turned on
- To enable the pallet algorithm, the depth must be enabled
- To turn on the obstacle avoidance algorithm, you must turn on depth
- To turn on the positioning algorithm, you must turn on RGB
The light blue background in the table is the running configuration with point cloud enabled, and the colorless background is the running configuration without point cloud enabled. All the test data below have the algorithm shifted down by default, so for S2 series cameras, all test values may be too small [some algorithms of S2 series cameras are forced to move up]. Ubuntu16.04
Ubuntu18.04
Ubuntu20.04
Ubuntu22.04
6.3 Memory details
The memory details will show the amount of memory resources occupied by the node under different operating conditions. The test is based on AMD64 [8 cores], 8G memory hardware environment, the test camera is M4 Pro, the test algorithm is tray algorithm, 2D width and height are 1280*960, and 3D width and height are 640*480, 2D anti-distortion is on, 3D anti-distortion is off, points 110 - 3000, depth 0 - 8000, ToF frame rate 14, streaming mode, smoothing level 1, noise level 1, time domain level 0, statistics command is TOP. Because the test soft environment is VM virtual machine, it is normal for the data displayed by the physical machine to fluctuate compared with that in the document. For some cameras, such as S2, some algorithms are calculated on the host computer, which results in a large amount of resource usage, which is normal.1. Some nouns are explained as follows: -Single stream: refers to turning on any stream of RGB, depth, and intensity
- Dual stream: refers to turning on any two streams of RGB, depth and intensity
- Four streams: means RGB, depth, intensity, and point cloud are all turned on
- To enable the pallet algorithm, the depth must be enabled
- To turn on the obstacle avoidance algorithm, you must turn on depth
- To turn on the positioning algorithm, you must turn on RGB
- The light blue background in the table is the running configuration with point cloud enabled, and the colorless background is the running configuration without point cloud enabled. All the test data below have the algorithm shifted down by default, so for S2 series cameras, all test values may be too small [some algorithms of S2 series cameras are forced to move up].
Ubuntu18.04
Ubuntu20.04
Ubuntu22.04
Appendix
This appendix provides installation methods for some tools. When using these methods, you need to have at least some basic knowledge of Linux. There is no guarantee that every computer can be successfully installed through the methods shown in the appendix of this document. The environment of each computer is different, and the problems encountered may not be consistent. If you encounter problems not shown in this appendix, please search for solutions yourself.1. Cmake specified version installation method
Go to https://cmake.org/download/ and download the required CMake version. Extract the downloaded package withtar -zxvf cmake-XXX.tar.gz. Enter the extracted directory, then compile and configure it:
./bootstrap
make
sudo make install
Check the Cmake version to see if the installation is successful:
cmake —version
2. Opencv specified version installation method
- Download the required version of opencv: Releases-OpenCV

- Environment configuration, execute the following commands in sequence:
- Create a new opencv folder and extract the downloaded source code into the opencv folder.
- Execute the following commands in sequence:
- cd opencv
- mkdir build && cd build
- sudocmake-DCMAKE_BUILD_TYPE=Release-D
- CMAKE_INSTALL_PREFIX=/usr/local ..
- sudo make -j4
- sudo make install and wait for the installation to complete
3. Pcl specified version installation method
- Check the supported pcl version:
- Install the specified pcl version (where 1.10.0 needs to be replaced with the required version number):
4. Install ROS
Ubuntu16.04- Add the software source and set the secret key:
- Add secret key:
- Update source:
- Install complete ros:
- Configure environment variables:
- Complete ROS-related tools:
- Now that the installation of ROS1 is complete, run the example that comes with ROS to check whether the installation is correct:

Ubuntu18.04
- Set up the software source:
- Update software list:
- Install Ubuntu18.04 version of ROS1:
- Set environment variables:
- Complete ROS-related tools:
- Now that the installation of ROS1 is complete, run the example that comes with ROS to check whether the installation is correct:

- Configure the public key:
- If it shows that it cannot connect to the server or times out, please update the software source list first:
- After configuring the public key, update the software list again:
- Set environment variables:
- Install ROS tools:
- Now that the installation of ROS1 is complete, run the example that comes with ROS to check whether the installation is correct:

5. How to create a new test package in Ros
- Create a new folder ws, create a new src folder in the ws folder, enter the src folder and execute:
- This creates a new package named example, which depends on std_msgs rospy roscpp
- Then compile this new package: catkin_make This is an empty package, there will not be any executable program, it is just a package
- Next, we will demonstrate how to create a package that can output ‘Hellow world’
- Based on the package just now, we enter the src folder (src in the package) and create a new main.cpp, as shown below (pay attention to the path):

- In main.cpp, we enter some codes:

- Then we change the outside CMakeLists.txt and add a line at the bottom: add_executable(example src/main.cpp)

- Then return to the ws directory to compile and execute the command: catkin_make

- Seeing these means the compilation is successful.
- Next we configure the environment:

- Then execute the program and you can see the output:

6. Install ROS2
Ubuntu16.04- Add secret key:
- Add permissions:
- If an error is reported in this step, use VPN to bypass the wall and then open the browser, enter the URL, and copy the content, then create a new ros.asc and copy the content to the file. After the copy is completed, the following is as follows:
- Then re-execute step 3: sudo apt-key add ros.asc
- Continue execution:
- Install ROS2:
- Configure environment variables:
- Install the function package:
- Try running the example program, open a terminal and run:
- Open another interrupt to run:
- The following terminal output proves that the installation is successful:
- Add software source
- If this step reports an error as follows:
- Use VPN to bypass the wall, then open the browser, enter the URL, and copy the content, then create a new ros.asc and copy the content to the file. After the copy is completed, it is as follows:
- Then re-execute step 3: sudo apt-key add ros.asc
- Continue execution:
- After completion, start downloading ros2, in which the red fonts need to be replaced with different versions (see the table above):
- Wait for the installation to complete and continue to install the python library. Execute: sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete
- Try running the sample program, open a terminal and run:
- Open another interrupt to run:
- The following terminal output proves that the installation is successful:
- Add software source
- If you encounter the error “ailed to connect to raw.githubusercontent.com port 443 after 13 ms: connection refused”

- Add the following analysis
- The added files are as follows:

- Continue execution:
- After completion, start downloading ros2:
- Wait for the installation to complete and continue to install the python library. Execute: sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete
- Then configure the environment variables:
- Try running the sample program, open a terminal and run:
- Open another interrupt to run:
- The following terminal output proves that the installation is successful:
- Add software source
- If you encounter the error “ailed to connect to raw.githubusercontent.com port 443 after 13 ms: connection refused”


- After completion, start downloading ros2: sudo apt update
- Wait for the installation to complete and continue to install the python library. Execute: sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete
- Then configure the environment variables:
- Try running the sample program, open a terminal and run:
- Open another interrupt to run:
- The following terminal output proves that the installation is successful:
7. How to create a new test package in Ros2
- Execute the command:
- You can create a new package named example_p and a node named example_n. After running, it will output: hello world example_p package