メインコンテンツへスキップ
文書バージョン: 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
  • メジャーバージョン: 5
  • バージョン番号: 15 [奇数は開発版、偶数は安定版]
  • リビジョン番号: 0 [変更回数]
  • このバージョンのリビジョン: 97
  • カーネルバージョン: #107~20.0.4.1。通常、システムバージョンはカーネルバージョンです。

2.2.2 CMake バージョンを確認する

result:
CMake バージョンの確認画面
CMake 3.16.3 のバージョン情報を示します。

2.2.3 GCC バージョンを確認する

出力:
GCC バージョンの確認画面
バージョン番号は左下の青い枠内に表示されます。この例のバージョンは 9.4.0 です。

2.2.4 OpenCV バージョンを確認する

出力:
OpenCV バージョンの確認画面
この例のバージョンは 3.2.0 です。

2.2.5 PCL バージョンを確認する

出力: この例のバージョンは 1.8.1 です。

2.2.6 ROS バージョンを確認する

出力:
ROS バージョンの確認画面
この例のバージョンは eloquent です(Ubuntu 18.04 に対応する ROS 2 バージョン)。
別の ROS バージョン確認画面
この例のバージョンは noetic です(Ubuntu 20 に対応する ROS 1 バージョン)。

2.3 基本開発環境を構築する

インストール前にパッケージリストを更新します。
出力例:
基本開発環境の構築画面

2.3.1 CMake をインストールする

CMake のインストール画面

2.3.2 GCC をインストールする

GCC のインストール画面

2.4 任意の開発環境を構築する

2.4.1 OpenCV をインストールする [カメラ画像を表示可能]

OpenCV のインストール画面

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

PCL のインストール画面

サンプルコードを準備する

3.1 インストールスクリプトを実行する

  1. Lanxin-MRDVS ファイルを展開し、Lanxin-MRDVS フォルダーに移動します。
Illustrations related to executing the installation script
  1. 右クリックしてコンソールを開きます。
  2. install.sh スクリプトを実行します。
Illustration related to executing the installation script 2
  1. /opt/ ディレクトリに移動し、インストールが成功したか確認します。
Illustration related to executing the installation script 3
  1. フォルダーが見つかれば、インストールは成功です。
  2. インストールに失敗した場合は、opt ディレクトリに手動で追加してください。
  3. set_socket_buffer_size.sh スクリプトを実行します。
Illustrations related to executing the installation script 4
  1. 以上でインストールスクリプトの実行は完了です。

3.2 サンプルコードの概要

Sample ディレクトリに移動します。ディレクトリの内容は次のとおりです。
Illustrations related to sample code introduction
  • C フォルダーには C および C++ 関連のコードが含まれます。
  • Java フォルダーには、SDK を間接的に呼び出す HTTP サーバーが含まれます。
  • Ros フォルダーには ROS のサンプルが含まれます。
  • Ros2 フォルダーには ROS 2 のサンプルが含まれます。

3.2.1 C および C++ サンプルコード

C ディレクトリに移動します。内容は次のとおりです。
Illustrations related to C and C++ sample code
9 つのフォルダーと 1 つの 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 ディレクトリに移動します。内容は次のとおりです。
Illustrations related to Java sample code
ディレクトリには 2 つのフォルダー、postman.json ファイル、README が含まれます。
  • Config: サーバー関連の設定を格納します。
  • Middleware: サーバー本体です。
  • LxCamera.postman_collection.json: Postman 設定ファイルです。
  • README: Java 仮想サーバーの使用チュートリアルです。

3.2.3 ROS サンプルコード

ros ディレクトリに移動します。内容は次のとおりです。
Illustrations related to ROS sample code
  • lx_camera_node_ws: 標準 ROS ドライバーを含むフォルダーです。
  • README.EN: ノードのコンパイル方法と新しいノードの作成方法を英語で説明します。

3.2.4 ROS 2 サンプルコード

ros2 ディレクトリに移動します。内容は次のとおりです。
ROS2 sample code related images
  • lx_camera_node_ws: 標準 ROS 2 ドライバーを含むフォルダーです。
  • README.EN: ノードのコンパイル方法と新しいノードの作成方法を英語で説明します。

3.2.5 ros-v1pro サンプルコード

ros-v1pro ディレクトリに移動します。内容は次のとおりです。
Illustrations related to ros-v1pro sample code
  • src: 標準 ROS ドライバーを含むフォルダーです。
  • README: このノードの使用方法を説明します。
  • README.pdf: このノードの使用方法を説明します。

サンプルをコンパイルして実行する

4.1 C および C++ サンプルコードのコンパイルと実行

サンプル内の C フォルダーに移動します。
Illustrations related to compiling and running C and C++ sample code
C フォルダーでターミナルを開き、次を実行します。
実行に成功したら、build フォルダーを開きます。内容は次のとおりです。
サンプルコードとROS設定の画面
実行ファイルは bin ディレクトリにあります。内容は次のとおりです。
サンプルコードとROS設定の画面
arm サンプルを除くすべてのサンプルがビルドされます。実行ファイル名はサンプルフォルダー名と同じで、直接実行できます。

4.2 Javaサンプルの実行手順

Javaサンプルはソースコードを直接提供せず、HTTPサーバーとPostmanサンプルを提供します。HTTP経由でカメラを制御する場合は、java フォルダーを使用します。内容は次のとおりです。
サンプルコードとROS設定の画面
実行手順は次のとおりです。
  • config フォルダーで Configs.json の http_sever_host と http_sever_port を変更します。
  • middleware フォルダーで start.sh を実行し、転送サーバーを起動します。
サンプルコードとROS設定の画面
  • Postmanで LxCamera.postman_collection.json を開き、サンプルのポートへデータを送信します。

4.3 ROSサンプルコードのビルドと実行

ROS フォルダーでコンソールを開き、次のコマンドを実行します。
サンプルコードとROS設定の画面
サンプルコードとROS設定の画面
右クリックしてコンソールを開き、lx_camera_node_ws フォルダーで次のコマンドを実行します。
サンプルコードとROS設定の画面
実行に成功すると、次のように表示されます。
サンプルコードとROS設定の画面
この時点で、フォルダー内に devel と build が生成されます。
サンプルコードとROS設定の画面
次のコマンドで環境を読み込み、roslaunch でノードを起動します。
上から順に通常ノード、障害物回避アルゴリズム2、障害物回避アルゴリズム、パレットアルゴリズムのノードです。複数のノードを同時には有効にできません。

4.4 ROS2サンプルコードのビルドと実行

ros2 フォルダーを開きます。内容は次のとおりです。
サンプルコードとROS設定の画面
ROSサンプルノードは colcon でビルドします。 まず、ビルドツールをインストールします。
サンプルコードとROS設定の画面
次に ros-pcl 依存パッケージをインストールします。foxy は使用中のROS 2ディストリビューションに置き換えてください。
インストール後、lx_camera_node_ws ディレクトリでプロジェクトをビルドします。
コンピューター性能により、ビルドには通常30〜120秒かかります。成功すると次のように表示されます。
サンプルコードとROS設定の画面
一部の警告はバージョン互換性によるもので、対応不要です。ビルド後のフォルダー内容は次のとおりです。
サンプルコードとROS設定の画面
次のコマンドで環境を読み込み、ros2 launch でノードを起動します。
上から順に通常ノード、障害物回避アルゴリズム2、障害物回避アルゴリズム、パレットアルゴリズムのノードです。複数のノードを同時には有効にできません。

4.5 ros-v1proサンプルコードのビルドと実行

ros-v1pro はV1PROカメラ専用のROSドライバーです。ros-v1pro フォルダーの README.pdf に詳細があります。ここでは概要のみを説明します。 ros-v1pro フォルダーでビルドします。
サンプルコードとROS設定の画面
環境を読み込みます。
サンプルコードとROS設定の画面
最後にノードを実行します。
  • 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 に含まれます。
サンプルコードとROS設定の画面
  1. DcGetApiVersion:SDKのバージョン番号を取得します。入力パラメータはありません。
サンプルコードとROS設定の画面
  1. DcSetInfoOutput:SDKログの出力先を設定します。パラメータは次のとおりです。
  • log_path:ログの出力先パスです。
  • print_level:ログ出力レベルです。
  • enable_screen_print:コンソールへログを出力するかを指定します。
  1. DcLog:SDKログへ出力します。入力内容はSDKログに記録されます。
  2. DcGetDeviceList:デバイス一覧を取得します。入力パラメータはなく、結果はJSONで返されます。
  3. DcOpenDevice:デバイスを開きます。次の値を入力します。
ROS設定とメッセージの画面
  • open_mode:カメラを開くモードです。
  • param:カメラを開くためのパラメータです。
  1. DcStartStream:指定したカメラのストリーミングを開始します。入力パラメータは次のとおりです。
ROS設定とメッセージの画面
  • handle:DcOpenDevice で返されるカメラハンドルです。
  1. DcSetCmd:カメラにコマンドを送信します。
ROS設定とメッセージの画面
  • handle:設定対象のカメラハンドルです。
  • cmd:コマンド番号です。
  1. DcGetPtrValue:画像やパラメータなどのポインター型データを取得します。
  • handle:設定対象のカメラハンドルです。
  • cmd:コマンド番号です。
  1. DcSetIntValue:カメラの int 型パラメータを設定します。
ROS設定とメッセージの画面
  • handle:設定対象のカメラハンドルです。
  • cmd:コマンド番号です。
  • value:設定する値です。
  1. DcGetIntValue:デバイスの int 型パラメータを取得します。
  • handle:設定対象のカメラハンドルです。
  • cmd:コマンド番号です。
  1. その他の説明は次の表を参照してください。

5.3 ROS1 & ROS2

ROSではドライバーソースコードではなく、launchファイルの設定、設定の調整、メッセージの送受信を扱います。提供されるROSノードには主要機能が含まれるため、ソースコードを直接変更することは推奨しません。特別な要件がある場合は、先にC++サンプルのコードフローを確認してください。 ROSドライバーを実行する前に、システム既定パス上のOpenCVおよびPCLのバージョンが一意であることを確認してください。複数バージョンがあるとROSライブラリのリンクでエラーが発生し、ビルド失敗や実行時クラッシュの原因になります。

5.3.1 ROS1 launchファイルの説明

5.3.1.1 すべてのlaunchファイル
  1. src/launch フォルダーには次のファイルがあります。
ROS launch設定の画面
  • localization.launch:視覚位置決めノードの実行ファイルです。
  • lx_camera_ros.launch:通常ノードの実行ファイルです。
  • mapping.launch:視覚位置決めマッピングの実行ファイルです。
  • obstacle.launch:障害物回避アルゴリズムの実行ファイルです。
  • obstacleV2.launch:障害物回避アルゴリズムV2の実行ファイルです。
  • pallet.launch:パレットアルゴリズムの実行ファイルです。
  • sensor_sim.launch:位置決めデータをシミュレーションする実行ファイルです。
  1. 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 フォルダーには次のファイルがあります。
ROS 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:位置決めデータをシミュレーションする実行ファイルです。
launchファイルを切り替えることで、ノードの異なる機能を実行できます。**localization、mapping、sensorを除き、すべてのノードでパラメータ項目は同じですが、設定値は異なります。**詳細は後続の節で説明します。localization、mapping、sensorの3つのlaunchファイルのパラメータについては、ros-v1proノードの説明を参照してください。
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 フォルダーには次のファイルがあります。
ROS launch設定の画面
5.3.3.1 FrameRate.msg
このノードはフレームレート情報を出力します。メッセージ形式は次のとおりです。
ROS launch設定の画面
  • header:現在のデータのフレーム情報とタイムスタンプです。
  • depth:深度マップ有効時の深度マップフレームレートです。
  • amp:強度マップ有効時の強度マップフレームレートです。
  • rgb:RGB有効時のRGBフレームレートです。
  • temperature:カメラ温度です。
ノードを起動後(視覚位置決め関連ノードを除く)、LxCamera_FrameRate ノードを購読して関連情報を取得できます。出力は次のとおりです。
ROS launch設定の画面
5.3.3.2 Obstacle.msg
obstacle は障害物回避アルゴリズムの結果を出力します。メッセージ形式は次のとおりです。
ROS launch設定の画面
  • header:現在のデータのフレーム情報とタイムスタンプです。
  • status:障害物回避から返される状態情報です。
0:正常な障害物回避です。 -1:地面が設定されていません。 -2:入力が設定されていません。 -3:範囲内に点群がありません。 -4:地面フィルタリング後に点群が空です。 -5:半径フィルタリング後に点群が空です。 -6:セグメンテーション結果を取得できませんでした。 -99:未定義のエラーです。
  • io_output:IOインターフェースから出力される障害物回避情報です。
0:正常 1:警告 2:停止
  • box_number:障害物の数です。
  • box:障害物情報です。可変長配列で、長さは box_number で決まります。
ノードを起動後(障害物回避アルゴリズムを有効にする必要があります)、LxCamera_Obstacel ノードを購読して関連情報を取得できます。出力は次のとおりです(図のデータはシミュレーションデータです)。
ROSメッセージとサービスの画面
5.3.3.3 Obstacle_box.msg
obstacle_box は障害物関連情報を出力します。メッセージ形式は次のとおりです。
ROSメッセージとサービスの画面
  • center:点群内の障害物の重心です。
  • rotation:障害物点群の回転行列です。
  • translation:障害物点群の並進ベクトルです。
  • width:障害物ボックスの幅です。
  • height:障害物ボックスの高さです。
  • depth:障害物ボックスの奥行きです。
ノードを起動後(障害物回避アルゴリズムを有効にする必要があります)、LxCamera_Obstacel ノードを購読して関連情報を取得できます。出力は次のとおりです。
ROSメッセージとサービスの画面
5.3.3.4 Result.msg
ノード内のサービスへコマンドメッセージを送信したときの戻り値は Result に格納されます。
ROSメッセージとサービスの画面
  • ret:SDK実行時の戻り値です。
  • msg:SDK実行時の戻り値の説明です。
5.3.3.5 Pallet.msg
パレットノードはパレットアルゴリズムの結果を出力します。メッセージ形式は次のとおりです。
ROSメッセージとサービスの画面
  • header:現在のデータのフレーム情報とタイムスタンプです。
  • status:パレット認識から返される状態情報です。
0:検出に成功しました。 -1:地面を検出できません。 -2:パレット脚を検出できません。 -3:パレット間の距離が大きすぎます。 -4:不明なエラーです。
  • x:パレットとカメラ光学中心のX方向距離です。
  • y:パレットとカメラ光学中心のY方向距離です。
  • yaw:パレット中心とカメラ光学中心の角度です。
ノードを起動後(パレットアルゴリズムを有効にする必要があります)、LxCamera_Pallet ノードを購読して関連情報を取得できます。出力は次のとおりです。
ROSメッセージとサービスの画面

5.3.4 独自サービスの説明

ROS1とROS2の独自サービス型は同じため、ここではROS1を例にします。src/srv フォルダーには次のファイルがあります。
ROSメッセージとサービスの画面
これらのメッセージは、カメラのパラメータ値を設定または取得するために使用します。 --- より上が送信データ、下が返却データです。
5.3.4.1 LxBool.srv
ROSメッセージとサービスの画面
  • cmd:取得または設定するパラメータ番号です。
  • val:設定時に指定する値です。
  • is_set:パラメータを設定するかを指定します。true の場合は val をカメラに設定し、false の場合はパラメータ値をカメラから読み出して表示します。
  • val:取得または設定後に返されるカメラの現在のパラメータ値です。
  • result:SDKインターフェース呼び出しで返る値と情報です。
5.3.4.2 LxCmd.srv
ROSメッセージとサービスの画面
  • cmd:取得または設定するパラメータ番号です。0 の場合はすべてのパラメータ番号を返します。
  • result:SDKインターフェース呼び出しで返る値と情報です。cmd により複数の値が返る場合があります。
5.3.4.3 LxFloat.srv
ROSメッセージとサービスの画面
  • cmd:取得または設定するパラメータ番号です。
  • val:設定時に指定する値です。
  • is_set:パラメータを設定するかを指定します。true の場合は val をカメラに設定し、false の場合はパラメータ値をカメラから読み出して表示します。
  • max_value:このパラメータに設定可能な最大値です。
  • min_value:このパラメータに設定可能な最小値です。
  • cur_value:カメラ内の現在のパラメータ値です。
  • available:このパラメータが設定に対応するかを示します。
  • result:SDKインターフェース呼び出しで返る値と情報です。
5.3.4.4 LxInt.srv
ROSメッセージとサービスの画面
  • cmd:取得または設定するパラメータ番号です。
  • val:設定時に指定する値です。
  • is_set:パラメータを設定するかを指定します。true の場合は val をカメラに設定し、false の場合はパラメータ値をカメラから読み出して表示します。
  • max_value:このパラメータに設定可能な最大値です。
  • min_value:このパラメータに設定可能な最小値です。
  • cur_value:カメラ内の現在のパラメータ値です。
  • available:このパラメータが設定に対応するかを示します。
  • result:SDKインターフェース呼び出しで返る値と情報です。
5.3.4.5 LxString.srv
ROSメッセージとサービスの画面
  • cmd:取得または設定するパラメータ番号です。
  • val:設定時に指定する値です。
  • is_set:パラメータを設定するかを指定します。true の場合は val をカメラに設定し、false の場合はパラメータ値をカメラから読み出して表示します。
  • val:取得または設定後に返されるカメラの現在のパラメータ値です。
  • result:SDKインターフェース呼び出しで返る値と情報です。

5.3.5 トピック購読方式の説明

5.3.5.1 フレームレート、パレット、障害物回避アルゴリズム出力を購読する
フレームレートを購読する lx_camera_node_ws ディレクトリで bash rate.sh を実行します。
ROSメッセージとサービスの画面
lx_camera_node の画像が正常に動作して更新されると、次の情報を確認できます。
ROSメッセージとサービスの画面
パレットアルゴリズム出力を購読する lx_camera_node_ws ディレクトリで bash pallet.sh を実行します。
ROSメッセージとサービスの画面
lx_camera_node の画像が正常に動作して更新されると、次の情報を確認できます。
ROSサービスと購読の画面
障害物回避アルゴリズム出力を購読する lx_camera_node_ws ディレクトリで bash obstacle.sh を実行します。
ROSサービスと購読の画面
lx_camera_node の画像が正常に動作して更新されると、次の情報を確認できます。
ROSサービスと購読の画面
5.3.5.2 画像データを購読する(ROS1)
ノードが出力する画像情報は、ROS付属の画像ツールで確認できます。 コンソールで rqt_image_view を実行します。 コマンドを実行すると、次のウィンドウが表示されます。
ROSサービスと購読の画面
赤枠で各ノードの画像を選択できます。図ではMRDVSカメラのRGB画像を選択しています。ストリームが有効なら、深度マップまたは強度マップも選択できます。
ROSサービスと購読の画面
最初の赤枠は位置決めアルゴリズムノードが出力するRGB情報です。残りは通常ノードの画像情報です。amp は強度マップ、depth は深度マップ、rgb はRGB画像を表します。 項目を切り替えて画像を確認するか、rviz で画像データを確認できます。コンソールで rviz を実行すると、次のウィンドウが表示されます。
ROSサービスと購読の画面
左下の Add をクリックすると、ウィンドウが表示されます。
ROSサービスと購読の画面
目的の画像トピックを選択し、Image を選んで右下の OK をクリックします。メイン画面左側で画像データを確認できます。
ROSサービスと購読の画面
5.3.5.3 画像データを購読する(ROS2)
ノードが出力する画像情報は、ROS2付属の画像ツールで確認できます。コンソールで rqt を実行します。 コマンドを実行すると、次のウィンドウが表示されます。
ROSサービスと購読の画面
メニューバー下部の2番目の項目で、最初の Image View を選択します。次の画面が表示されます。
ROSサービスと購読の画面
赤枠で各ノードの画像を選択できます。図ではMRDVSカメラのRGB画像を選択しています。ストリームが有効なら、深度マップや強度マップも選択できます。
ROSサービスと購読の画面
図の最初の赤枠は位置決めアルゴリズムノードが出力するRGB情報です。残りの3つは通常ノードの画像情報です。amp は強度マップ、depth は深度マップ、rgb はRGB画像を表します。 項目を選択して画像を切り替えるか、rviz2 で画像データを確認できます。コンソールで rviz2 を実行すると、次のウィンドウが表示されます。
ROSサービスと購読の画面
左下の Add をクリックすると、ウィンドウが表示されます。
ROSサービスと購読の画面
目的の画像トピックを選択し、Image を選んで右下の OK をクリックします。次のようにメイン画面左側で画像データを確認できます。
ROSサービスと購読の画面
一部のシステムでは、画像を表示するために上図の map に mrdvs を入力する必要があります。
5.3.5.4 点群データを購読する
ノードが出力する点群情報は、ROSまたはROS2付属の点群ツールで確認できます。 コマンド:ROS1では rviz、ROS2では rviz2 コマンドを実行すると、次のウィンドウが表示されます。
ROSサービスと購読の画面
赤枠のボタンをクリックすると、次のダイアログが表示されます。
ROSサービスと購読の画面
2番目のタブを選択します。lx_camera_node ノード内の LxCamera_Cloud トピックを開き、PointCloud2 メッセージを選択して OK をクリックします。完了後の画面は次のとおりです。
ROSサービスと購読の画面
(ROS1画面)
ROSサービスと購読の画面
(ROS2画面) この時点で点群が正しく表示されない場合は、上図の赤枠・緑枠の map に mrdvs を入力します。点群は次のように表示されます。
ROSサービスと購読の画面
ROSの既定の点群単位はメートルです。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"
ROSサービスと購読の画面
出力は次のとおりです。
ROSサービスと購読の画面
ret はパラメータ番号です。msg にはパラメータの型と説明が含まれます。たとえば 1001 は int 型で、1つ目の露出値の取得と変更に使用します。 ros2 ターミナルで次のコマンドを実行します:ros2 service call /LxCamera_LxCmd lx_camera_ros/srv/LxCmd 'cmd: 0'
ROSサービスと購読の画面
出力は次のとおりです。
ROSサービスと購読の画面
ROS2ではパラメータ詳細を確認しにくいため、すべてのパラメータの番号、型、説明を次の表に示します。 一部のパラメータはストリーミング停止後に設定する必要があるか、設定順序があります。詳細は技術サポートへお問い合わせください。
5.3.6.2 Intパラメータを取得する (Lx_Int)
ROS1 ターミナルで次のコマンドを実行します: rosservice call /lx_camera_node/LxCamera_LxInt “cmd: 1001 val: 0 is_set: false”
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。
ROS2 ターミナルで次のコマンドを実行します: ros2 service call /LxCamera_LxInt lx_camera_ros/srv/LxInt '{cmd: 1001,val: 0,is_set: false}'
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。
5.3.6.3 Intパラメータを設定する (Lx_Int)
ROS1 ターミナルで次のコマンドを実行します: rosservice call /lx_camera_node/LxCamera_LxInt “cmd: 1001 val: 2000 is_set: true”
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。
ROS2 ターミナルで次のコマンドを実行します: ros2 service call /LxCamera_LxInt lx_camera_ros/srv/LxInt '{cmd: 1001,val: 3000,is_set: true}'
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。
5.3.6.4 Floatパラメータを取得する (Lx_Float)
ROS1 ターミナルで次のコマンドを実行します: rosservice call /lx_camera_node/LxCamera_LxFloat “cmd: 2007 val: 0.0 is_set: false”
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。 ROS2 ターミナルで次のコマンドを実行します: ros2 service call /LxCamera_LxFloat lx_camera_ros/srv/LxFloat '{cmd: 2007,val: 0,is_set: false}'
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。
5.3.6.5 Floatパラメータを設定する (Lx_Float)
ROS1 ターミナルで次のコマンドを実行します: rosservice call /lx_camera_node/LxCamera_LxFloat “cmd: 2007 val: 5.0 is_set: true”
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。 ROS2 ターミナルで次のコマンドを実行します: ros2 service call /LxCamera_LxFloat lx_camera_ros/srv/LxFloat '{cmd: 2007,val: 5.0,is_set: true}'
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。
5.3.6.6 Boolパラメータを取得する (Lx_Bool)
ROS1 ターミナルで次のコマンドを実行します: rosservice call /lx_camera_node/LxCamera_LxBool “cmd: 3012 val: false is_set: false”
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。
ROS2 ターミナルで次のコマンドを実行します: ros2 service call /LxCamera_LxBool lx_camera_ros/srv/LxBool '{cmd: 3012,val: false,is_set: false}'
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。
5.3.6.7 Boolパラメータを設定する (Lx_Bool)
ROS1 ターミナルで次のコマンドを実行します: rosservice call /lx_camera_node/LxCamera_LxBool “cmd: 3012 val: true is_set: true”
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。
ROS2 ターミナルで次のコマンドを実行します: ros2 service call /LxCamera_LxBool lx_camera_ros/srv/LxBool '{cmd: 3012,val: true,is_set: true}'
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。
5.3.6.8 Stringパラメータを取得する (Lx_String)
ROS1 ターミナルで次のコマンドを実行します: rosservice call /lx_camera_node/LxCamera_LxString “cmd: 4001 val: ” is_set: false”
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。
ROS2 ターミナルで次のコマンドを実行します: ros2 service call /LxCamera_LxString lx_camera_ros/srv/LxString '{cmd: 4001,val: '',is_set: false}'
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。
5.3.6.9 Stringパラメータを設定する (Lx_String)
ROS1 ターミナルで次のコマンドを実行します: rosservice call /lx_camera_node/LxCamera_LxString “cmd: 4001 val: ‘put:\“123\”’ is_set: true”
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。 ROS2 ターミナルで次のコマンドを実行します: ros2 service call /LxCamera_LxString lx_camera_ros/srv/LxString '{cmd: 4001,val: "put:\\"123\\"",is_set: true}'
サービス通信の実行結果
出力は次のとおりです。
サービス通信の実行結果
返り値は赤枠に表示されます。最大値、最小値、現在値、設定可否、APIの戻り値、およびメッセージを確認してください。 String型の値を設定する場合、ROS2の先頭の二重引用符およびROS1の先頭の単一引用符を除き、単一・二重引用符をエスケープしてください。たとえば 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、深度、強度、点群をすべて有効にした状態です。
2. アルゴリズムとストリームの依存関係
  • パレットアルゴリズムには深度ストリームが必要です。
  • 障害物回避アルゴリズムには深度ストリームが必要です。
  • 位置決めアルゴリズムには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、深度、強度、点群をすべて有効にした状態です。
2. アルゴリズムとストリームの依存関係
  • パレットアルゴリズムには深度ストリームが必要です。
  • 障害物回避アルゴリズムには深度ストリームが必要です。
  • 位置決めアルゴリズムにはRGBストリームが必要です。
  1. 表の水色の行は点群を有効にした構成、無色の行は点群を無効にした構成です。以下の測定では既定でアルゴリズムを下位機へ移行しています。S2シリーズでは一部のアルゴリズムが上位機で実行されるため、測定値が小さくなる場合があります。
Ubuntu16.04 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 をインストールする

  1. OpenCV Releasesから必要なバージョンをダウンロードします。
指定バージョンの OpenCV をインストールする画面
  1. 環境を準備します。次のコマンドを順に実行します。
sudo apt-get install build-essential sudo apt-getinstallcmake gitlibgtk2.0-devpkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
  1. opencv ディレクトリを作成し、ダウンロードしたソースコードをそのディレクトリに展開します。
  2. 次のコマンドを順に実行します。
  3.   cd opencv
  4.   mkdir build && cd build
  5.   sudocmake-DCMAKE_BUILD_TYPE=Release-D
  6.   CMAKE_INSTALL_PREFIX=/usr/local ..
  7.   sudo make -j4
  8. sudo make install を実行し、インストールが完了するまで待ちます。

3. 指定バージョンの PCL をインストールする

  1. インストール可能な PCL のバージョンを確認します。
apt-cache madison libpcl-dev
  1. 指定した PCL バージョンをインストールします。1.10.0 は必要なバージョン番号に置き換えてください。
sudo apt-get install libpcl-dev=1.10.0

4. ROS をインストールする

Ubuntu16.04
  1. ソフトウェアソースを追加し、キーを設定します。
sudo sh -c ‘echo “deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list’ sudoapt-keyadv—keyserver’hkp://keyserver.ubuntu.com:80’—recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  1. キーを追加します。
curl -sSL ‘http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654’ | sudo apt-key add -
  1. ソースを更新します。
sudo apt-get update
  1. ROS の完全版をインストールします。
sudo apt-get install ros-kinetic-desktop-full
  1. 環境変数を設定します。
echo “source /opt/ros/kinetic/setup.bash” >> ~/.bashrc source ~/.bashrc
  1. ROS 関連ツールをインストールします。
sudoaptinstallpython-rosinstallpython-rosinstall-generatorpython-wstool build-essential
  1. ROS1 のインストール後、付属のサンプルを実行して正しくインストールされたか確認します。
ターミナルを開き、roscore を実行します。 別のターミナルで rosrun turtlesim turtlesim\_node を実行します。 さらに別のターミナルで rosrun turtlesim turtle\_teleop\_key を実行します。 3 つ目のターミナルで、矢印キーを使ってタートルを操作できます。 次のように正常に動作すれば、ROS は正しくインストールされています。 ROS のインストール結果
Ubuntu18.04
  1. ソフトウェアソースを設定します。
sudo sh -c ’. /etc/lsb-release && echo “deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main” > /etc/apt/sources.list.d/ros-latest.list’
  1. 公開鍵を設定します。
sudoapt-keyadv—keyserver’hkp://keyserver.ubuntu.com:80’—recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  1. パッケージリストを更新します。
sudo apt update
  1. Ubuntu 18.04 向けの ROS1 をインストールします。
sudo apt install ros-melodic-desktop-full
  1. 環境変数を設定します。
echo “source /opt/ros/melodic/setup.bash” >> ~/.bashrc zsh を使用している場合は、次を実行します。 echo “source /opt/ros/melodic/setup.bash” >> ~/.zshrc source ~/.zshrc
  1. ROS 関連ツールをインストールします。
sudoaptinstallpython-rosdeppython-rosinstallpython-rosinstall-generator python-wstool build-essential
  1. ROS1 のインストール後、付属のサンプルを実行して正しくインストールされたか確認します。
ターミナルを開き、roscore を実行します。 別のターミナルで rosrun turtlesim turtlesim\_node を実行します。 さらに別のターミナルで rosrun turtlesim turtle\_teleop\_key を実行します。 3 つ目のターミナルで、矢印キーを使ってタートルを操作できます。 次のように正常に動作すれば、ROS は正しくインストールされています。
ROS のインストール結果 2
Ubuntu20.04
  1. 公開鍵を設定します。
sudoapt-keyadv—keyserver’hkp://keyserver.ubuntu.com:80’—recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  1. サーバーに接続できない、またはタイムアウトする場合は、先にパッケージリストを更新します。
sudo apt-get update sudo apt-get upgrade
  1. 公開鍵を設定した後、パッケージリストを再度更新して ROS をインストールします。
sudo apt-get update install ros: sudo apt install ros-noetic-desktop-full
  1. 環境変数を設定します。
echo “source /opt/ros/noetic/setup.bash” >> ~/.bashrc source ~/.bashrc
  1. ROS ツールをインストールします。
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
  1. ROS1 のインストール後、付属のサンプルを実行して正しくインストールされたか確認します。
ターミナルを開き、roscore を実行します。 別のターミナルで rosrun turtlesim turtlesim\_node を実行します。 さらに別のターミナルで rosrun turtlesim turtle\_teleop\_key を実行します。 3 つ目のターミナルで、矢印キーを使ってタートルを操作できます。 次のように正常に動作すれば、ROS は正しくインストールされています。
ROS のインストール結果 3
Ubuntu 22.04 Ubuntu 22.04 での ROS1 のインストールは推奨しません。公式にはサポートされておらず、多数の依存関係の問題が発生する可能性があります。

5. ROS でテストパッケージを作成する

  1. ws ディレクトリを作成し、その中に src ディレクトリを作成します。src に移動して次を実行します。
catkin_create_pkg example std_msgs rospy roscpp
  1. example という新しいパッケージが作成されます。このパッケージは std\_msgs、rospy、roscpp に依存します。
  2. catkin\_make でパッケージをコンパイルします。この時点では空のパッケージであり、実行可能プログラムは含まれません。
  3. 次に、Hello world を出力するパッケージを作成します。
  4. 作成したパッケージの src ディレクトリに移動し、main.cpp を作成します。パスに注意してください。
ROS でテストパッケージを作成する手順
  1. main.cpp に次のコードを入力します。
ROS テストパッケージの作成例 2
  1. パッケージ直下の CMakeLists.txt を編集し、末尾に add\_executable(example src/main.cpp) を追加します。
ROS テストパッケージの作成例 3
  1. ws ディレクトリに戻り、catkin\_make を実行してコンパイルします。
ROS テストパッケージの作成例 4
  1. この表示が出れば、コンパイルは成功です。
  2. 次に環境を設定します。
source devel/setup.bash
ROS テストパッケージの作成例 5
  1. 次のコマンドでプログラムを実行し、出力を確認します。
rosrun example example
ROS テストパッケージの作成例 6

6. ROS2 をインストールする

Ubuntu16.04
  1. キーを追加します。
sudo apt-get update && sudo apt-get install curl curl http://repo.ros2.org/repos.key | sudo apt-key add -
  1. 必要なツールをインストールします。
sudo apt update && sudo apt install curl gnupg2 lsb-release curl-shttps://raw.githubusercontent.com/ros/rosdistro/master/ros.asc|sudo apt-key add -
  1. この手順でエラーが発生する場合は、ネットワーク接続を確認して URL をブラウザーで開き、内容を ros.asc という新規ファイルに保存します。保存後の状態は次のとおりです。
  2. 次に sudo apt-key add ros.asc を実行します。
  3. 続けて次を実行します。
sudo sh -c ‘echo “deb [arch=amd64] http://packages.ros.org/ros2/ubuntu bionic main” > /etc/apt/sources.list.d/ros2-latest.list’
  1. ROS2 をインストールします。
sudo apt update sudo apt install ros-ardent-desktop
  1. 環境変数を設定します。
source /opt/ros/ardent/setup.bash
  1. 関連パッケージをインストールします。
sudo apt-get update sudo apt-get install ros-ardent-ros1-bridge sudo apt-get install ros-ardent-turtlebot2-*
  1. サンプルプログラムを試します。ターミナルで次を実行します。
source ~/.bashrc ros2 run demo_nodes_cpp talker
  1. 別のターミナルで次を実行します。
source~/.bashrc ros2 run demo_nodes_cpp talker
  1. 次のターミナル出力が表示されれば、インストールは成功です。
Ubuntu 18.04
  1. ソフトウェアソースを追加します。
sudo apt update && sudo apt install curl gnupg2 lsb-release curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc sudo apt-key add ros.asc
  1. この手順で次のエラーが発生した場合:
  2. ネットワーク接続を確認して URL をブラウザーで開き、内容を ros.asc という新規ファイルに保存します。保存後の状態は次のとおりです。
  3. 次に sudo apt-key add ros.asc を実行します。
  4. 続けて次を実行します。
sudo sh -c ‘echo “deb [arch=amd64] http://packages.ros.org/ros2/ubuntu bionic main” > /etc/apt/sources.list.d/ros2-latest.list’
  1. 完了後、ROS2 をダウンロードします。赤字部分は対象バージョンに置き換えてください(上表を参照)。
sudo apt update sudo apt install ros-eloquent-desktop
  1. インストール完了後、Python ライブラリをインストールします。sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete を実行します。
続けて環境変数を設定します。 echo “source /opt/ros/eloquent/setup.bash” >> ~/.bashrc source ~/.bashrc
  1. サンプルプログラムを試します。ターミナルで次を実行します。
source ~/.bashrc ros2 run demo_nodes_cpp talker
  1. 別のターミナルで次を実行します。
source ~/.bashrc ros2 run demo_nodes_py listener
  1. 次のターミナル出力が表示されれば、インストールは成功です。
Ubuntu20.04
  1. ソフトウェアソースを追加します。
sudo apt update && sudo apt install curl gnupg2 lsb-release sudo curl -sSL [https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o](https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o) /usr/share/keyrings/ros-archive-keyring.gpg
  1. raw.githubusercontent.com のポート 443 への接続に失敗するエラーが発生した場合:
ROS2 の接続エラー例
sudo vi /etc/hosts
  1. 次のエントリを追加します。
185.199.108.133raw.githubusercontent.com
  1. 追加後のファイルは次のとおりです。
ROS2 の hosts 設定例
echo”deb[arch=(source/etc/os-release&&echo$UBUNTU_CODENAME) main” | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
  1. 続けて次を実行します。
sudo sh -c ‘echo “deb [arch=amd64] http://packages.ros.org/ros2/ubuntu bionicmain” > /etc/apt/sources.list.d/ros2-latest.list’
  1. 完了後、ROS2 をダウンロードします。
sudo apt update sudo apt install ros-foxy-desktop
  1. インストール完了後、Python ライブラリをインストールします。sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete を実行します。
  2. 続けて環境変数を設定します。
echo “source /opt/ros/foxy/setup.bash” >> ~/.bashrc source ~/.bashrc
  1. サンプルプログラムを試します。ターミナルで次を実行します。
source ~/.bashrc ros2 run demo_nodes_cpp talker
  1. 別のターミナルで次を実行します。
source ~/.bashrc ros2 run demo_nodes_py listener
  1. 次のターミナル出力が表示されれば、インストールは成功です。
Ubuntu 22.04
  1. ソフトウェアソースを追加します。
sudo apt update && sudo apt install curl gnupg lsb-release sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpgecho”deb[arch=(source/etc/os-release&&echo$UBUNTU_CODENAME) main” | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
  1. raw.githubusercontent.com のポート 443 への接続に失敗するエラーが発生した場合:
ROS2 の接続エラー例 9
sudo vi /etc/hosts を実行し、次のエントリを追加します。 185.199.108.133raw.githubusercontent.com 追加後のファイルは次のとおりです。
ROS2 の hosts 設定例 10
  1. 完了後、sudo apt update を実行して ROS2 をダウンロードします。
sudo apt install ros-humble-desktop
  1. インストール完了後、Python ライブラリをインストールします。sudo apt install -y libpython3-dev python3-pip pip3 install -U argcomplete を実行します。
  2. 続けて環境変数を設定します。
echo “source /opt/ros/humble/setup.bash” >> ~/.bashrc source ~/.bashrc
  1. サンプルプログラムを試します。ターミナルで次を実行します。
source ~/.bashrc ros2 run demo_nodes_cpp talker
  1. 別のターミナルで次を実行します。
source ~/.bashrc ros2 run demo_nodes_py listener
  1. 次のターミナル出力が表示されれば、インストールは成功です。

7. ROS2 でテストパッケージを作成する

  1. 次のコマンドを実行します。
mkdir example_ws && cd example_ws ros2 pkg create —build-type ament_cmake —node-name example_n example_p colcon build source install/setup.bash ros2 run example_p example_n
  1. example\_p という新しいパッケージと example\_n というノードが作成されます。実行すると hello world example\_p package が出力されます。