文書バージョン: V1.0、改訂日: 2024-10-12。
概要
MRDVS Camera SDK for 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 をインストールする [カメラ画像を表示可能]

2.4.2 PCL をインストールする [点群を表示可能]

サンプルコードを準備する
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 ディレクトリに移動します。内容は次のとおりです。

CMakeLists ファイルがあり、各フォルダーには CPP ファイルが含まれます。
各 CPP の主な機能は次のとおりです。
application_obstacle: カメラストリームを取得し、障害物回避アルゴリズムを有効にして結果を出力します。application_pallet: カメラストリームを取得し、パレットアルゴリズムを有効にして結果を出力します。arm_local_camera: カメラ上の SDK [ARM] を呼び出し、ストリームデータを取得します。frame_callback: コールバック方式でカメラストリームデータを取得します。multi_cameras: 複数のカメラを開き、ストリームデータを取得します。single_camera: 1 台のカメラを開き、ストリームデータを取得します。single_camera2: 構造体を介してフレームデータを取得します。
3.2.2 Java サンプルコード
java ディレクトリに移動します。内容は次のとおりです。

postman.json ファイル、README が含まれます。
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 フォルダーに移動します。

C フォルダーでターミナルを開き、次を実行します。
build フォルダーを開きます。内容は次のとおりです。

bin ディレクトリにあります。内容は次のとおりです。

arm サンプルを除くすべてのサンプルがビルドされます。実行ファイル名はサンプルフォルダー名と同じで、直接実行できます。
4.2 Javaサンプルの実行手順
Javaサンプルはソースコードを直接提供せず、HTTPサーバーとPostmanサンプルを提供します。HTTP経由でカメラを制御する場合は、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 フォルダーで次のコマンドを実行します。


devel と build が生成されます。

roslaunch でノードを起動します。
4.4 ROS2サンプルコードのビルドと実行
ros2 フォルダーを開きます。内容は次のとおりです。

colcon でビルドします。
まず、ビルドツールをインストールします。

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 and 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はサーバーにハードコードされているため変更しません。応答メッセージの形式と内容はbody に含まれます。

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 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の3つの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ファイル内の構成を使用します。
0 と 1 のどちらであっても、このパラメータより前のすべての項目は設定されます。0 と 1 の違いは、このパラメータより後の項目にのみ適用されます。
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ファイル内の構成を使用します。
0 と 1 のどちらであっても、このパラメータより前のすべての項目は設定されます。0 と 1 の違いは、このパラメータより後の項目にのみ適用されます。
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:カメラ温度です。
LxCamera_FrameRate ノードを購読して関連情報を取得できます。出力は次のとおりです。

5.3.3.2 Obstacle.msg
obstacle は障害物回避アルゴリズムの結果を出力します。メッセージ形式は次のとおりです。

header:現在のデータのフレーム情報とタイムスタンプです。status:障害物回避から返される状態情報です。
io_output:IOインターフェースから出力される障害物回避情報です。
box_number:障害物の数です。box:障害物情報です。可変長配列で、長さはbox_numberで決まります。
LxCamera_Obstacel ノードを購読して関連情報を取得できます。出力は次のとおりです(図のデータはシミュレーションデータです)。

5.3.3.3 Obstacle_box.msg
obstacle_box は障害物関連情報を出力します。メッセージ形式は次のとおりです。

center:点群内の障害物の重心です。rotation:障害物点群の回転行列です。translation:障害物点群の並進ベクトルです。width:障害物ボックスの幅です。height:障害物ボックスの高さです。depth:障害物ボックスの奥行きです。
LxCamera_Obstacel ノードを購読して関連情報を取得できます。出力は次のとおりです。

5.3.3.4 Result.msg
ノード内のサービスへコマンドメッセージを送信したときの戻り値はResult に格納されます。

ret:SDK実行時の戻り値です。msg:SDK実行時の戻り値の説明です。
5.3.3.5 Pallet.msg
パレットノードはパレットアルゴリズムの結果を出力します。メッセージ形式は次のとおりです。
header:現在のデータのフレーム情報とタイムスタンプです。status:パレット認識から返される状態情報です。
x:パレットとカメラ光学中心のX方向距離です。y:パレットとカメラ光学中心のY方向距離です。yaw:パレット中心とカメラ光学中心の角度です。
LxCamera_Pallet ノードを購読して関連情報を取得できます。出力は次のとおりです。

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 を実行します。

lx_camera_node の画像が正常に動作して更新されると、次の情報を確認できます。

lx_camera_node_ws ディレクトリで bash pallet.sh を実行します。

lx_camera_node の画像が正常に動作して更新されると、次の情報を確認できます。

lx_camera_node_ws ディレクトリで bash obstacle.sh を実行します。

lx_camera_node の画像が正常に動作して更新されると、次の情報を確認できます。

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 を実行すると、次のウィンドウが表示されます。



map に mrdvs を入力する必要があります。
5.3.5.4 点群データを購読する
ノードが出力する点群情報は、ROSまたはROS2付属の点群ツールで確認できます。 コマンド:ROS1ではrviz、ROS2では rviz2
コマンドを実行すると、次のウィンドウが表示されます。


lx_camera_node ノード内の LxCamera_Cloud トピックを開き、PointCloud2 メッセージを選択して OK をクリックします。完了後の画面は次のとおりです。


map に mrdvs を入力します。点群は次のように表示されます。

rviz で確認する場合は、launchファイルの lx_tof_unit を 1 に設定します(既定値も 1)。
5.3.6 サービス通信方式
ROS1ではTabキーでコマンド全体を補完できます。ROS2ではトピックのみ補完され、メッセージ部分は手入力します。 ROS1では補完形式で入力できます。ROS2ではYAML形式で入力してください。 ノード起動後、lx_camera_node_ws フォルダーでターミナルを開き、環境を設定して source devel/setup.bash を実行します。
5.3.6.1 すべてのパラメータ番号を取得する(Lx_Cmd)
ros1 ターミナルで次のコマンドを実行します:rosservice call /lx_camera_node/LxCamera_LxCmd "cmd: 0"


ret はパラメータ番号です。msg にはパラメータの型と説明が含まれます。たとえば 1001 は int 型で、1つ目の露出値の取得と変更に使用します。
ros2
ターミナルで次のコマンドを実行します:ros2 service call /LxCamera_LxCmd lx_camera_ros/srv/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 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 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 service call /LxCamera_LxString lx_camera_ros/srv/LxString '{cmd: 4001,val: "put:\\"123\\"",is_set: true}'


PUT”123” は PUT\”123\” と入力します。
ROSの推奨ハードウェアとリソース使用量
6.1 推奨ハードウェア構成
推奨構成はCPUコア数、CPU使用率、メモリ容量に基づきます。**これは最小要件ではなく推奨構成です。**性能が不足する場合でも、ストリーム出力の削減、点群計算の無効化、アルゴリズム負荷の低減により安定動作することがあります。**利用可能なリソースを超える負荷では、ROSコアまたはUbuntuがクラッシュするおそれがあります。**以下の使用量データを参照し、環境に適した構成を選択してください。本データはM4 Proを使用したVM環境で収集しました。 Ubuntu16.04
Ubuntu18.04
Ubuntu20.04
Ubuntu22.04
6.2 CPUの詳細
この節では、各動作条件におけるノードのCPU使用量を示します。テスト環境は AMD64(8コア)、メモリ8 GB、カメラは M4 Pro、アルゴリズムは パレットアルゴリズムです。2D解像度は1280×960、3D解像度は 640×480 です。測定はVM環境で実施しているため、実機では値が変動する場合があります。S2など、上位機で一部のアルゴリズムを計算するカメラでは、リソース使用量が大きくなることがあります。1. 用語
- 単一ストリーム:RGB、深度、強度のいずれか1つを有効にした状態です。
- デュアルストリーム:RGB、深度、強度のいずれか2つを有効にした状態です。
- 3ストリーム:RGB、深度、強度の3つをすべて有効にした状態です。
- 4ストリーム:RGB、深度、強度、点群をすべて有効にした状態です。
- パレットアルゴリズムには深度ストリームが必要です。
- 障害物回避アルゴリズムには深度ストリームが必要です。
- 位置決めアルゴリズムにはRGBストリームが必要です。
表の水色の行は点群を有効にした構成、無色の行は点群を無効にした構成です。以下の測定では既定でアルゴリズムを下位機へ移行しています。S2シリーズでは一部のアルゴリズムが上位機で実行されるため、測定値が小さくなる場合があります。 Ubuntu16.04
Ubuntu18.04
Ubuntu20.04
Ubuntu22.04
6.3 メモリの詳細
この節では、各動作条件におけるノードのメモリ使用量を示します。テスト環境は AMD64(8コア)、メモリ8 GB、カメラは M4 Pro、アルゴリズムは パレットアルゴリズムです。2D解像度は1280×960、3D解像度は 640×480 です。測定はVM環境で実施しているため、実機では値が変動する場合があります。S2など、上位機で一部のアルゴリズムを計算するカメラでは、リソース使用量が大きくなることがあります。1. 用語
- 単一ストリーム:RGB、深度、強度のいずれか1つを有効にした状態です。
- デュアルストリーム:RGB、深度、強度のいずれか2つを有効にした状態です。
- 3ストリーム:RGB、深度、強度の3つをすべて有効にした状態です。
- 4ストリーム:RGB、深度、強度、点群をすべて有効にした状態です。
- パレットアルゴリズムには深度ストリームが必要です。
- 障害物回避アルゴリズムには深度ストリームが必要です。
- 位置決めアルゴリズムにはRGBストリームが必要です。
- 表の水色の行は点群を有効にした構成、無色の行は点群を無効にした構成です。以下の測定では既定でアルゴリズムを下位機へ移行しています。S2シリーズでは一部のアルゴリズムが上位機で実行されるため、測定値が小さくなる場合があります。
Ubuntu18.04
Ubuntu20.04
Ubuntu22.04
付録
この付録では、いくつかのツールのインストール方法を説明します。手順を実行するには、Linux の基礎知識が必要です。PC ごとに環境が異なるため、ここで示す手順ですべての環境に正常にインストールできることを保証するものではありません。ここに記載されていない問題が発生した場合は、原因と解決方法を個別に調査してください。1. 指定バージョンの CMake をインストールする
CMake のダウンロードページから必要なバージョンを取得します。ダウンロードしたパッケージをtar -zxvf cmake-XXX.tar.gz で展開し、展開先のディレクトリでコンパイルと設定を実行します。
./bootstrap
make
sudo make install
次のコマンドで CMake のバージョンを確認し、インストールが完了したことを確認します。
cmake —version
2. 指定バージョンの OpenCV をインストールする
- OpenCV Releasesから必要なバージョンをダウンロードします。

- 環境を準備します。次のコマンドを順に実行します。
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 関連ツールをインストールします。
- ROS1 のインストール後、付属のサンプルを実行して正しくインストールされたか確認します。
roscore を実行します。
別のターミナルで rosrun turtlesim turtlesim\_node を実行します。
さらに別のターミナルで rosrun turtlesim turtle\_teleop\_key を実行します。
3 つ目のターミナルで、矢印キーを使ってタートルを操作できます。
次のように正常に動作すれば、ROS は正しくインストールされています。

Ubuntu18.04
- ソフトウェアソースを設定します。
- 公開鍵を設定します。
- パッケージリストを更新します。
- Ubuntu 18.04 向けの ROS1 をインストールします。
- 環境変数を設定します。
- ROS 関連ツールをインストールします。
- ROS1 のインストール後、付属のサンプルを実行して正しくインストールされたか確認します。
roscore を実行します。
別のターミナルで rosrun turtlesim turtlesim\_node を実行します。
さらに別のターミナルで rosrun turtlesim turtle\_teleop\_key を実行します。
3 つ目のターミナルで、矢印キーを使ってタートルを操作できます。
次のように正常に動作すれば、ROS は正しくインストールされています。

- 公開鍵を設定します。
- サーバーに接続できない、またはタイムアウトする場合は、先にパッケージリストを更新します。
- 公開鍵を設定した後、パッケージリストを再度更新して ROS をインストールします。
- 環境変数を設定します。
- ROS ツールをインストールします。
- ROS1 のインストール後、付属のサンプルを実行して正しくインストールされたか確認します。
roscore を実行します。
別のターミナルで rosrun turtlesim turtlesim\_node を実行します。
さらに別のターミナルで rosrun turtlesim turtle\_teleop\_key を実行します。
3 つ目のターミナルで、矢印キーを使ってタートルを操作できます。
次のように正常に動作すれば、ROS は正しくインストールされています。

5. ROS でテストパッケージを作成する
wsディレクトリを作成し、その中にsrcディレクトリを作成します。srcに移動して次を実行します。
exampleという新しいパッケージが作成されます。このパッケージはstd\_msgs、rospy、roscppに依存します。catkin\_makeでパッケージをコンパイルします。この時点では空のパッケージであり、実行可能プログラムは含まれません。- 次に、
Hello worldを出力するパッケージを作成します。 - 作成したパッケージの
srcディレクトリに移動し、main.cppを作成します。パスに注意してください。

main.cppに次のコードを入力します。

- パッケージ直下の
CMakeLists.txtを編集し、末尾にadd\_executable(example src/main.cpp)を追加します。

wsディレクトリに戻り、catkin\_makeを実行してコンパイルします。

- この表示が出れば、コンパイルは成功です。
- 次に環境を設定します。

- 次のコマンドでプログラムを実行し、出力を確認します。

6. ROS2 をインストールする
Ubuntu16.04- キーを追加します。
- 必要なツールをインストールします。
-
この手順でエラーが発生する場合は、ネットワーク接続を確認して URL をブラウザーで開き、内容を
ros.ascという新規ファイルに保存します。保存後の状態は次のとおりです。 -
次に
sudo apt-key add ros.ascを実行します。 - 続けて次を実行します。
- ROS2 をインストールします。
- 環境変数を設定します。
- 関連パッケージをインストールします。
- サンプルプログラムを試します。ターミナルで次を実行します。
- 別のターミナルで次を実行します。
- 次のターミナル出力が表示されれば、インストールは成功です。
- ソフトウェアソースを追加します。
- この手順で次のエラーが発生した場合:
-
ネットワーク接続を確認して URL をブラウザーで開き、内容を
ros.ascという新規ファイルに保存します。保存後の状態は次のとおりです。 -
次に
sudo apt-key add ros.ascを実行します。 - 続けて次を実行します。
- 完了後、ROS2 をダウンロードします。赤字部分は対象バージョンに置き換えてください(上表を参照)。
- インストール完了後、Python ライブラリをインストールします。
sudo apt install -y libpython3-dev python3-pip pip3 install -U argcompleteを実行します。
- サンプルプログラムを試します。ターミナルで次を実行します。
- 別のターミナルで次を実行します。
- 次のターミナル出力が表示されれば、インストールは成功です。
- ソフトウェアソースを追加します。
raw.githubusercontent.comのポート 443 への接続に失敗するエラーが発生した場合:

- 次のエントリを追加します。
- 追加後のファイルは次のとおりです。

- 続けて次を実行します。
- 完了後、ROS2 をダウンロードします。
- インストール完了後、Python ライブラリをインストールします。
sudo apt install -y libpython3-dev python3-pip pip3 install -U argcompleteを実行します。 - 続けて環境変数を設定します。
- サンプルプログラムを試します。ターミナルで次を実行します。
- 別のターミナルで次を実行します。
- 次のターミナル出力が表示されれば、インストールは成功です。
- ソフトウェアソースを追加します。
raw.githubusercontent.comのポート 443 への接続に失敗するエラーが発生した場合:

sudo vi /etc/hosts を実行し、次のエントリを追加します。
185.199.108.133raw.githubusercontent.com
追加後のファイルは次のとおりです。

- 完了後、
sudo apt updateを実行して ROS2 をダウンロードします。
- インストール完了後、Python ライブラリをインストールします。
sudo apt install -y libpython3-dev python3-pip pip3 install -U argcompleteを実行します。 - 続けて環境変数を設定します。
- サンプルプログラムを試します。ターミナルで次を実行します。
- 別のターミナルで次を実行します。
- 次のターミナル出力が表示されれば、インストールは成功です。
7. ROS2 でテストパッケージを作成する
- 次のコマンドを実行します。
example\_pという新しいパッケージとexample\_nというノードが作成されます。実行するとhello world example\_p packageが出力されます。