URG センサ制御 [詳細]
#include "urg_connection.h"
データ構造 | |
struct | urg_t |
URG センサ管理 [詳細] | |
型定義 | |
typedef urg_measurement_type_t(* | urg_error_handler )(const char *status, void *urg) |
列挙型 | |
enum | urg_measurement_type_t { URG_DISTANCE, URG_DISTANCE_INTENSITY, URG_MULTIECHO, URG_MULTIECHO_INTENSITY, URG_STOP, URG_UNKNOWN } |
計測タイプ [詳細] | |
enum | urg_range_data_byte_t { URG_COMMUNICATION_3_BYTE, URG_COMMUNICATION_2_BYTE } |
距離を何 byte で表現するかの指定 [詳細] | |
enum | { URG_SCAN_INFINITY = 0, URG_MAX_ECHO = 3 } |
関数 | |
int | urg_open (urg_t *urg, urg_connection_type_t connection_type, const char *device_or_address, long baudrate_or_port) |
接続 [詳細] | |
void | urg_close (urg_t *urg) |
切断 [詳細] | |
void | urg_set_timeout_msec (urg_t *urg, int msec) |
タイムアウト時間の設定 [詳細] | |
int | urg_start_time_stamp_mode (urg_t *urg) |
タイムスタンプモードの開始 | |
long | urg_time_stamp (urg_t *urg) |
タイムスタンプの取得 [詳細] | |
int | urg_stop_time_stamp_mode (urg_t *urg) |
タイムスタンプモードの終了 | |
int | urg_start_measurement (urg_t *urg, urg_measurement_type_t type, int scan_times, int skip_scan) |
距離データの取得を開始 [詳細] | |
int | urg_get_distance (urg_t *urg, long data[], long *time_stamp) |
距離データの取得 [詳細] | |
int | urg_get_distance_intensity (urg_t *urg, long data[], unsigned short intensity[], long *time_stamp) |
距離と強度データの取得 [詳細] | |
int | urg_get_multiecho (urg_t *urg, long data_multi[], long *time_stamp) |
距離データの取得 (マルチエコー版) [詳細] | |
int | urg_get_multiecho_intensity (urg_t *urg, long data_multi[], unsigned short intensity_multi[], long *time_stamp) |
距離と強度データの取得 (マルチエコー版) [詳細] | |
int | urg_stop_measurement (urg_t *urg) |
計測を中断し、レーザを消灯させます [詳細] | |
int | urg_set_scanning_parameter (urg_t *urg, int first_step, int last_step, int skip_step) |
計測範囲を設定します [詳細] | |
int | urg_set_communication_data_size (urg_t *urg, urg_range_data_byte_t data_byte) |
通信データのサイズ変更 [詳細] | |
int | urg_laser_on (urg_t *urg) |
レーザを発光させる | |
int | urg_laser_off (urg_t *urg) |
レーザを消灯する | |
int | urg_reboot (urg_t *urg) |
センサを再起動する | |
void | urg_sleep (urg_t *urg) |
センサを低消費電力の状態に遷移させる [詳細] | |
void | urg_wakeup (urg_t *urg) |
センサを低消費電力のモードから通常の状態に遷移させる [詳細] | |
int | urg_is_stable (urg_t *urg) |
センサが計測できる状態かを返す [詳細] | |
const char * | urg_sensor_product_type (urg_t *urg) |
センサ型式を文字列で返す [詳細] | |
const char * | urg_sensor_serial_id (urg_t *urg) |
センサのシリアル ID 文字列を返す [詳細] | |
const char * | urg_sensor_firmware_version (urg_t *urg) |
センサのバージョン文字列を返す [詳細] | |
const char * | urg_sensor_status (urg_t *urg) |
センサのステータス文字列を返す [詳細] | |
const char * | urg_sensor_state (urg_t *urg) |
センサの状態を返す [詳細] | |
void | urg_set_error_handler (urg_t *urg, urg_error_handler handler) |
計測用のエラーハンドラを登録する [詳細] | |
long | urg_scip_decode (const char data[], int size) |
SCIP 文字列のデコードを行う [詳細] | |
typedef urg_measurement_type_t(* urg_error_handler)(const char *status, void *urg) |
エラーハンドラ
int urg_open | ( | urg_t * | urg, |
urg_connection_type_t | connection_type, | ||
const char * | device_or_address, | ||
long | baudrate_or_port | ||
) |
接続
指定したデバイスに接続し、距離を計測できるようにする。
[in,out] | urg | URG センサ管理 |
[in] | connection_type | 通信タイプ |
[in] | device_or_address | 接続デバイス名 / IP アドレス |
[in] | baudrate_or_port | 接続ボーレート [bps] / TCP/IP ポート |
0 | 正常 |
<0 | エラー |
connection_type には、以下の項目が指定できます。
Example
void urg_close | ( | urg_t * | urg | ) |
切断
レーザを消灯し、URG との接続を切断します。
[in,out] | urg | URG センサ管理 |
void urg_set_timeout_msec | ( | urg_t * | urg, |
int | msec | ||
) |
タイムアウト時間の設定
[in,out] | urg | URG センサ管理 |
[in] | msec | タイムアウトする時間 [msec] |
long urg_time_stamp | ( | urg_t * | urg | ) |
タイムスタンプの取得
[in,out] | urg | URG センサ管理 |
>=0 | タイムスタンプ [msec] |
<0 | エラー |
Example
int urg_start_measurement | ( | urg_t * | urg, |
urg_measurement_type_t | type, | ||
int | scan_times, | ||
int | skip_scan | ||
) |
距離データの取得を開始
距離データの取得を開始します。実際のデータは urg_get_distance(), urg_get_distance_intensity(), urg_get_multiecho(), urg_get_multiecho_intensity() で取得できます。
[in,out] | urg | URG センサ管理 |
[in] | type | データ・タイプ |
[in] | scan_times | データの取得回数 |
[in] | skip_scan | データの取得間隔 |
0 | 正常 |
<0 | エラー |
type には取得するデータの種類を指定します。
scan_times は何回のデータを取得するかを 0 以上の数で指定します。ただし、0 または URG_SCAN_INFINITY を指定した場合は、無限回のデータを取得します。
開始した計測を中断するには urg_stop_measurement() を使います。
skip_scan はミラーの回転数のうち、1回のスキャン後に何回スキャンしないかを指定します。skip_scan に指定できる範囲は [0, 9] です。
たとえば、ミラーの1回転が 100 [msec] のセンサで skip_scan に 1 を指定した場合、データの取得間隔は 200 [msec] になります。
Example
int urg_get_distance | ( | urg_t * | urg, |
long | data[], | ||
long * | time_stamp | ||
) |
距離データの取得
センサから距離データを取得します。事前に urg_start_measurement() を URG_DISTANCE 指定で呼び出しておく必要があります。
[in,out] | urg | URG センサ管理 |
[out] | data | 距離データ [mm] |
[out] | time_stamp | タイムスタンプ [msec] |
>=0 | 受信したデータ個数 |
<0 | エラー |
'data' には、センサから取得した距離データが格納されます。data はデータを格納するのサイズを確保しておく必要があります。data に格納されるデータ数は urg_max_data_size() で取得できます。
'time_stamp' には、センサ内部のタイムスタンプが格納されます。time_stamp を取得したくない場合 NULL を指定して下さい。
Example
int urg_get_distance_intensity | ( | urg_t * | urg, |
long | data[], | ||
unsigned short | intensity[], | ||
long * | time_stamp | ||
) |
距離と強度データの取得
urg_get_distance() に加え、強度データの取得ができる関数です。事前に urg_start_measurement() を URG_DISTANCE_INTENSITY 指定で呼び出しておく必要があります。
[in,out] | urg | URG センサ管理 |
[out] | data | 距離データ [mm] |
[out] | intensity | 強度データ |
[out] | time_stamp | タイムスタンプ [msec] |
>=0 | 受信したデータ個数 |
<0 | エラー |
強度データとは、距離計算に使った波形の反射強度であり、センサのシリーズ毎に特性が異なります。 強度データを使うことで、物体の反射率や環境の大まかな濃淡を推測できます。
data, time_stamp については urg_get_distance() と同じです。
intensity には、センサから取得した強度データが格納されます。intensity はデータを格納するのサイズを確保しておく必要があります。intensity に格納されるデータ数は urg_max_data_size() で取得できます。
Example
int urg_get_multiecho | ( | urg_t * | urg, |
long | data_multi[], | ||
long * | time_stamp | ||
) |
距離データの取得 (マルチエコー版)
マルチエコー版の距離データ取得関数です。事前に urg_start_measurement() を URG_MULTIECHO 指定で呼び出しておく必要があります。
[in,out] | urg | URG センサ管理 |
[out] | data_multi | 距離データ [mm] |
[out] | time_stamp | タイムスタンプ [msec] |
>=0 | 受信したデータ個数 |
<0 | エラー |
マルチエコーとは複数の距離データです。 マルチエコーは、1つのレーザ発光において複数の距離データが得られたときに得られます。
'time_stamp' については urg_get_distance() と同じです。
data_multi には、センサから取得した距離データが1つの step あたり最大で URG_MAX_ECHO (3 つ)格納されます。マルチエコーが存在しない項目のデータ値は -1 が格納されています。
data_multi[0] ... step n の距離データ (1 つめ) data_multi[1] ... step n の距離データ (2 つめ) data_multi[2] ... step n の距離データ (3 つめ) data_multi[3] ... step (n + 1) の 距離データ (1 つめ) data_multi[4] ... step (n + 1) の 距離データ (2 つめ) data_multi[5] ... step (n + 1) の 距離データ (3 つめ) ...
データは昇順に格納されます。
Example
int urg_get_multiecho_intensity | ( | urg_t * | urg, |
long | data_multi[], | ||
unsigned short | intensity_multi[], | ||
long * | time_stamp | ||
) |
距離と強度データの取得 (マルチエコー版)
urg_get_multiecho() に加え、強度データの取得できる関数です。事前に urg_start_measurement() を URG_MULTIECHO_INTENSITY 指定で呼び出しておく必要があります。
[in,out] | urg | URG センサ管理 |
[out] | data_multi | 距離データ [mm] |
[out] | intensity_multi | 強度データ |
[out] | time_stamp | タイムスタンプ [msec] |
>=0 | 受信したデータ個数 |
<0 | エラー |
'data_multi', 'time_stamp' については urg_get_multiecho() と同じです。
'intensity_multi' のデータの並びは data_multi と対応したものになります。intensity_multi に格納されるデータ数は urg_max_data_size() で取得できます。
Example
int urg_stop_measurement | ( | urg_t * | urg | ) |
計測を中断し、レーザを消灯させます
urg_start_measurement() の計測を中断します。
[in,out] | urg | URG センサ管理 |
0 | 正常 |
<0 | エラー |
Example
int urg_set_scanning_parameter | ( | urg_t * | urg, |
int | first_step, | ||
int | last_step, | ||
int | skip_step | ||
) |
計測範囲を設定します
センサが計測する範囲を step 値で指定します。urg_get_distance() などの距離データ取得の関数で返されるデータ数は、ここで指定した範囲で制限されます。
[in,out] | urg | URG センサ管理 |
[in] | first_step | 計測の開始 step |
[in] | last_step | 計測の終了 step |
[in] | skip_step | 計測データをグルーピングする個数 |
0 | 正常 |
<0 | エラー |
センサの step は、センサ正面を 0 とし、センサ上部から見て反時計まわりの向きが正の値となる順に割り振られます。
step の間隔と、最大値、最小値はセンサ依存です。step 値の最大値、最小値は urg_step_min_max() で取得できます。
first_step, last_step でデータの計測範囲を指定します。計測範囲は [first_step, last_step] となります。
skip_step は、計測データをグルーピングする個数を指定します。指定できる値は [0, 99] です。
skip_step は、指定された数のデータを 1 つにまとめることで、センサから受信するデータ量を減らし、距離取得を行う関数の応答性を高めるときに使います。ただし、データをまとめるため、得られるデータの分解能は減ります。
例えば以下のような距離データが得られる場合に
100, 101, 102, 103, 104, 105, 106, 107, 108, 109
skip_step に 2 を指定すると、得られるデータは以下のようになります。
100, 102, 104, 106, 108
データは、まとめるデータのうち、一番小さな値のデータが用いられます。
Example
int urg_set_communication_data_size | ( | urg_t * | urg, |
urg_range_data_byte_t | data_byte | ||
) |
通信データのサイズ変更
距離データをセンサから受信の際のデータサイズを変更します。
[in,out] | urg | URG センサ管理 |
[in] | data_byte | 距離値を表現するデータのバイト数 |
0 | 成功 |
<0 | エラー |
data_byte には
を指定できます。
初期状態では距離を 3 byte で表現するようになっています。この設定を 2 byte に設定することで、センサから受信するデータ数は 2/3 になります。ただし、取得できる距離の最大値が 4095 になるため、観測したい対象が 4 [m] 以内の範囲に存在する場合のみ利用して下さい。
void urg_sleep | ( | urg_t * | urg | ) |
センサを低消費電力の状態に遷移させる
低消費電力のモードでは、スキャナの回転が停止し計測も中断されます。
低消費電力のモードから抜けるためには urg_wakeup() 関数を呼び出して下さい。
void urg_wakeup | ( | urg_t * | urg | ) |
センサを低消費電力のモードから通常の状態に遷移させる
int urg_is_stable | ( | urg_t * | urg | ) |
センサが計測できる状態かを返す
1 | センサが計測できる状態にある |
0 | センサが計測できる状態にない |
起動直後でスキャナの回転が安定していない場合や、何らかのエラーで計測できない場合、この関数は 0 を返します。
const char* urg_sensor_product_type | ( | urg_t * | urg | ) |
センサ型式を文字列で返す
センサの型式を文字列で返す。返される文字列はセンサ依存となる。
[in] | urg | URG センサ管理 |
const char* urg_sensor_serial_id | ( | urg_t * | urg | ) |
センサのシリアル ID 文字列を返す
センサのシリアル ID 文字列を返す。返される文字列はセンサ依存となる。
[in] | urg | URG センサ管理 |
const char* urg_sensor_firmware_version | ( | urg_t * | urg | ) |
センサのバージョン文字列を返す
センサのソフトウェア・バージョン文字列を返す。返される文字列はセンサ依存となる。
[in] | urg | URG センサ管理 |
const char* urg_sensor_status | ( | urg_t * | urg | ) |
センサのステータス文字列を返す
センサのステータス文字列を返す。返される文字列はセンサ依存となる。
[in] | urg | URG センサ管理 |
const char* urg_sensor_state | ( | urg_t * | urg | ) |
センサの状態を返す
センサのステータス文字列を返す。返される文字列はセンサ依存となる。
[in] | urg | URG センサ管理 |
void urg_set_error_handler | ( | urg_t * | urg, |
urg_error_handler | handler | ||
) |
計測用のエラーハンドラを登録する
エラーハンドラは Gx, Mx 系のコマンドの応答が "00" か "99" 以外のときに呼び出される。
long urg_scip_decode | ( | const char | data[], |
int | size | ||
) |
SCIP 文字列のデコードを行う
[in] | data | SCIP 文字列 |
[in] | data | の byte サイズ |
デコード後の数値 |