一.realsense API中关键的几个类
rs2::context类
- 继承关系
- 函数
返回值 函数原型 详细说明 context () 构造 device_list query_devices () const 在呼叫时创建所有连接设备的静态快照 device_list query_devices (int mask) const 在呼叫时创建所有连接设备的静态快照 std::vector< sensor > query_all_sensors () const 从所有RealSense设备生成所有可用传感器的列表 device get_sensor_parent (const sensor &s) const 获取传感器所属的父设备 template void set_devices_changed_callback (T callback) 注册设备更改回调 playback load_device (const std::string &file) 从RealSense文件创建设备,成功加载后,设备将被附加到上下文中,并触发devices_changed事件 void unload_device (const std::string &file) void unload_tracking_module () context (std::shared_ptr< rs2_context > ctx) operator std::shared_ptr< rs2_context > ()
主要使用query_devices()
函数去枚举连接到当前计算机下的intel realsense设备,以及利用set_devices_changed_callback (T callback)
函数设置计算机上连接的intel realsense设备变化时的回调函数
#include <iostream>
#include <librealsense2\rs.hpp>
using namespace std;
void device_changed_callback(rs2::event_information info)
{
rs2::device_list devices = info.get_new_devices();
cout << "detected " << devices.size() << " connected!" << endl;
}
int main()
{
// 首先, 创建rs2::context对象. context表示与所连接设备相关的当前平台
rs2::context ctx;
// 利用context设置设备变化时的回调函数
ctx.set_devices_changed_callback(device_changed_callback);
// 使用context可以获取到所有连接到当前平台的设备
rs2::device_list devices = ctx.query_devices();
while(1)
{
}
}
rs2::device类
-
继承关系
-
函数
返回值 函数原型 详细说明 std::vector< sensor > query_sensors () const 列出设备底下的所有传感器 template T first () const bool supports (rs2_camera_info info) const 检查是否支持特定的摄像头信息 const char * get_info (rs2_camera_info info) const 检索特定于相机的信息,如各种内部组件的版本 void hardware_reset () 向设备发送硬件重置请求 device & operator= (const std::shared_ptr< rs2_device > dev) device & operator= (const device &dev) device () 构造函数 operator bool () const const std::shared_ptr< rs2_device > & get () const template bool is () const template T as () const virtual ~device () 析构函数 operator std::shared_ptr< rs2_device > () device (std::shared_ptr< rs2_device > dev)
主要使用supports (rs2_camera_info info)
和get_info (rs2_camera_info info)
函数来检查和获取设备的相关信息,以及query_sensors ()
函数来获取设备底下的传感器。其中,设备的信息枚举体rs2_camera_info
内容如下:
rs2_camera_info中的枚举值 | 详细说明 |
---|---|
RS2_CAMERA_INFO_NAME | 设备名称 |
RS2_CAMERA_INFO_SERIAL_NUMBER | 设备序列号 |
RS2_CAMERA_INFO_FIRMWARE_VERSION | 主要固件版本 |
RS2_CAMERA_INFO_RECOMMENDED_FIRMWARE_VERSION | 建议的固件版本 |
RS2_CAMERA_INFO_PHYSICAL_PORT | 设备连接到的端口的唯一标识符(特定于平台) |
RS2_CAMERA_INFO_DEBUG_OP_CODE | 如果设备支持固件日志记录,这是发送以从固件获取日志的命令 |
RS2_CAMERA_INFO_ADVANCED_MODE | 如果设备处于高级模式,则为True |
RS2_CAMERA_INFO_PRODUCT_ID | USB描述符中报告的产品ID |
RS2_CAMERA_INFO_CAMERA_LOCKED | 如果EEPROM被锁定,则为True |
RS2_CAMERA_INFO_USB_TYPE_DESCRIPTOR | 指定USB规格:USB2/USB3 |
RS2_CAMERA_INFO_PRODUCT_LINE | 设备产品线D400/SR300/L500/T200 |
RS2_CAMERA_INFO_ASIC_SERIAL_NUMBER | ASIC序列号 |
RS2_CAMERA_INFO_FIRMWARE_UPDATE_ID | 固件更新ID |
RS2_CAMERA_INFO_IP_ADDRESS | 远程摄像机的IP地址。 |
RS2_CAMERA_INFO_COUNT | 枚举值的数量。无效输入:用于for-loop。 |
#include <iostream>
#include <iomanip>
#include <librealsense2\rs.hpp>
using namespace std;
int main()
{
// 首先, 创建rs2::context对象. context表示与所连接设备相关的当前平台
rs2::context ctx;
// 使用context可以获取到所有连接到当前平台的设备
rs2::device_list devices = ctx.query_devices();
rs2::device selected_device; //用来接收要控制的设备
if (devices.size() == 0)
{
cerr << "No device connected, please connect a RealSense device" << endl;
//用来解决设备插入前等待的过程
rs2::device_hub device_hub(ctx);
//device_hub会阻塞程序,直到设备插入
selected_device = device_hub.wait_for_device();
}
else
{
cout << "Found the following devices:" << endl;
// 通过循环遍历接入平台的设备,打印设备名称
int index = 0;
for (rs2::device device : devices)
{
// 每个设备都提供了一些关于自身的信息,例如名称:
string name = "Unknown Device";
if (device.supports(RS2_CAMERA_INFO_NAME))
{
name = device.get_info(RS2_CAMERA_INFO_NAME);
}
// 以及设备的序列号:
string sn = "########";
if (device.supports(RS2_CAMERA_INFO_SERIAL_NUMBER))
{
sn = string("#") + device.get_info(RS2_CAMERA_INFO_SERIAL_NUMBER);
}
cout << " " << index++ << " : " << name << " " << sn << endl;
}
// 选择一个设备
selected_device = devices[0];
// 每个设备都提供一些关于自身的信息
// 使用“RS2_CAMERA_INFO_*”枚举表示不同类型的可用信息
cout << "Device information: " << endl;
// 以下代码显示了如何枚举所有RS2_CAMERA_INFO
// 请注意,SDK中的所有枚举类型都以零值开始,以“*_COUNT”值结束
for (int i = 0; i < static_cast<int>(RS2_CAMERA_INFO_COUNT); i++)
{
rs2_camera_info info_type = static_cast<rs2_camera_info>(i);
// 可以以流的方式处理SDK枚举类型,以获取表示它们的字符串
cout << " " << left << setw(20) << info_type << " : ";
//设备可能不支持所有类型的RS2_CAMERA_INFO。
//为了防止从“get_info”方法引发异常,我们首先检查设备是否支持这种类型的信息
if (selected_device.supports(info_type))
cout << selected_device.get_info(info_type) << endl;
else
cout << "N/A" << endl;
}
}
}
rs2::sensor类
-
继承关系
-
函数
返回值 函数原型 详细说明 void open (const stream_profile &profile) const 通过提交配置,打开传感器进行独占访问 bool supports (rs2_camera_info info) const 检查是否支持特定的摄像头信息 const char * get_info (rs2_camera_info info) const 检索特定于相机的信息,如各种内部组件的版本 void open (const std::vector< stream_profile > &profiles) const 开放传感器进行独占访问,通过提交复合配置,指定一个或多个流配置文件,这种方法应该用于必须一起配置的相互依赖的流,如深度和红外 void close () const 关闭传感器进行独占访问此方法应用于释放传感器资源 template void start (T callback) const 开始将帧传递到用户提供的回调中 void stop () const 停止将帧传递到用户提供的回调中 template void set_notifications_callback (T callback) const 注册通知回调 std::vector< stream_profile > get_stream_profiles () const 检索传感器支持的流配置文件列表。 std::vector< stream_profile > get_active_streams () const 检索当前在传感器上进行流式传输的流配置文件列表。 std::vector< filter > get_recommended_filters () const 获取传感器推荐的过滤器列表 sensor & operator= (const std::shared_ptr< rs2_sensor > other) sensor & operator= (const sensor &other) sensor () 构造函数 operator bool () const const std::shared_ptr< rs2_sensor > & get () const template bool is () const template T as () const sensor (std::shared_ptr< rs2_sensor > dev) operator std::shared_ptr< rs2_sensor > () bool supports (rs2_option option) const 检查是否支持特定选项
主要使用supports (rs2_camera_info info)
和get_info (rs2_camera_info info)
来获取相机传感器的信息,get_option_description (rs2_option option)
,get_option_value_description (rs2_option option, float val)
,set_option (rs2_option option, float value)
来获取和设置相机传感器的参数。相机的可选参数,如下所示:
rs2_option中的枚举值 | 详细说明 |
---|---|
RS2_OPTION_BACKLIGHT_COMPENSATION | 启用/禁用彩色背光补偿 |
RS2_OPTION_BRIGHTNESS | 彩色图像亮度 |
RS2_OPTION_CONTRAST | 彩色图像对比度 |
RS2_OPTION_EXPOSURE | 控制彩色相机的曝光时间。设置任何值都将禁用自动曝光 |
RS2_OPTION_GAIN | 彩色图像增益 |
RS2_OPTION_GAMMA | 彩色图像gamma设置 |
RS2_OPTION_HUE | 彩色图像色调 |
RS2_OPTION_SATURATION | 彩色图像饱和度设置 |
RS2_OPTION_SHARPNESS | 彩色图像清晰度设置 |
RS2_OPTION_WHITE_BALANCE | 控制彩色图像的白平衡。设置任何值都将禁用自动白平衡 |
RS2_OPTION_ENABLE_AUTO_EXPOSURE | 启用/禁用彩色图像自动曝光 |
RS2_OPTION_ENABLE_AUTO_WHITE_BALANCE | 启用/禁用彩色图像自动白平衡 |
RS2_OPTION_VISUAL_PRESET | 提供对深度相机的多组推荐选项预设的访问 |
RS2_OPTION_LASER_POWER | 激光发射器的功率,0表示投影仪关闭 |
RS2_OPTION_ACCURACY | 设置每帧投影的图案数。精度值越高,投影的图案越多。增加图案数量有助于实现更好的准确性。请注意,此控件影响深度FPS |
RS2_OPTION_MOTION_RANGE | 运动与范围的权衡,较低的值允许更好的运动灵敏度,较高的值允许更佳的深度范围 |
RS2_OPTION_FILTER_OPTION | 设置过滤器以应用于每个深度帧。每个过滤器都根据应用要求进行了优化 |
RS2_OPTION_CONFIDENCE_THRESHOLD | 深度算法管道使用的置信度阈值,用于设置像素是获得有效范围还是标记为无效范围 |
RS2_OPTION_EMITTER_ENABLED | 发射器选择:0–禁用所有发射器。1–启用激光器。2–启用自动激光器。3–启用LED。 |
RS2_OPTION_FRAMES_QUEUE_SIZE | 每个流允许用户保留的帧数。试图保留更多帧将导致帧丢失。 |
RS2_OPTION_TOTAL_FRAME_DROPS | 从所有流中检测到的帧丢弃总数 |
RS2_OPTION_AUTO_EXPOSURE_MODE | 自动曝光模式:静态、防舔和混合 |
RS2_OPTION_POWER_LINE_FREQUENCY | 防闪烁电源线频率控制Off/50Hz/60Hz/Auto |
RS2_OPTION_ASIC_TEMPERATURE | 当前Asic温度 |
RS2_OPTION_ERROR_POLLING_ENABLED | 禁用错误处理 |
RS2_OPTION_PROJECTOR_TEMPERATURE | 当前投影仪温度 |
RS2_OPTION_OUTPUT_TRIGGER_ENABLED | 在每个深度帧上启用/禁用从相机输出到任何外部设备的触发器 |
RS2_OPTION_MOTION_MODULE_TEMPERATURE | 电流运动-模块温度 |
RS2_OPTION_DEPTH_UNITS | 单个深度单位表示的米数 |
RS2_OPTION_ENABLE_MOTION_CORRECTION | 启用/禁用运动数据的自动校正 |
RS2_OPTION_AUTO_EXPOSURE_PRIORITY | 允许传感器根据照明条件动态调整帧速率 |
RS2_OPTION_COLOR_SCHEME | 数据可视化的颜色方案 |
RS2_OPTION_HISTOGRAM_EQUALIZATION_ENABLED | 对深度数据进行直方图均衡化后处理 |
RS2_OPTION_MIN_DISTANCE | 与目标的最小距离 |
RS2_OPTION_MAX_DISTANCE | 到目标的最大距离 |
RS2_OPTION_TEXTURE_SOURCE | 纹理映射流唯一ID |
RS2_OPTION_FILTER_MAGNITUDE | 2D-filter效果。具体解释在过滤器上下文中给出 |
RS2_OPTION_FILTER_SMOOTH_ALPHA | 2D-filter参数控制平滑的权重/半径。 |
RS2_OPTION_FILTER_SMOOTH_DELTA | 二维滤波器范围/有效性阈值 |
RS2_OPTION_HOLES_FILL | 在适当情况下,通过钻孔填充来增强深度数据后处理 |
RS2_OPTION_STEREO_BASELINE | 立体测深相机中第一和第二成像仪之间的距离(mm) |
RS2_OPTION_AUTO_EXPOSURE_CONVERGE_STEP | 允许在自动曝光算法中动态调整目标曝光的收敛步长值 |
RS2_OPTION_INTER_CAM_SYNC_MODE | 实施Inter-camera硬件同步模式。适用于D400/L500/卷帘SKU |
RS2_OPTION_STREAM_FILTER | 选择要处理的流 |
RS2_OPTION_STREAM_FORMAT_FILTER | 选择要处理的流格式 |
RS2_OPTION_STREAM_INDEX_FILTER | 选择要处理的流索引 |
RS2_OPTION_EMITTER_ON_OFF | 如果支持,此选项将使摄影机在每一帧切换发射器状态。0表示禁用,1表示启用 |
RS2_OPTION_ZERO_ORDER_POINT_X | 不推荐!!!-零阶点x |
RS2_OPTION_ZERO_ORDER_POINT_Y | 不推荐!!!-零阶点y |
RS2_OPTION_LLD_TEMPERATURE | LDD温度 |
RS2_OPTION_MC_TEMPERATURE | MC温度 |
RS2_OPTION_MA_TEMPERATURE | MA温度 |
RS2_OPTION_HARDWARE_PRESET | 硬件流配置 |
RS2_OPTION_GLOBAL_TIME_ENABLED | 禁用全局时间 |
RS2_OPTION_APD_TEMPERATURE | APD温度 |
RS2_OPTION_ENABLE_MAPPING | 启用内部映射 |
RS2_OPTION_ENABLE_RELOCALIZATION | 启用基于外观的重新缩放 |
RS2_OPTION_ENABLE_POSE_JUMPING | 启用位置跳跃 |
RS2_OPTION_ENABLE_DYNAMIC_CALIBRATION | 启用动态校准 |
RS2_OPTION_DEPTH_OFFSET | 从传感器到深度原点的偏移(毫米) |
RS2_OPTION_LED_POWER | LED(发光二极管)的功率,0表示LED关闭 |
RS2_OPTION_ZERO_ORDER_ENABLED | 已弃用!-切换零阶模式 |
RS2_OPTION_ENABLE_MAP_PRESERVATION | 启动时保留上一个地图 |
RS2_OPTION_FREEFALL_DETECTION_ENABLED | 检测到自由下落时启用/禁用传感器关闭(默认为启用) |
RS2_OPTION_AVALANCHE_PHOTO_DIODE | 更改接收器中雪崩光电二极管的曝光时间 |
RS2_OPTION_POST_PROCESSING_SHARPENING | 更改后处理图像中的锐化量 |
RS2_OPTION_PRE_PROCESSING_SHARPENING | 更改预处理图像中的锐化量 |
RS2_OPTION_NOISE_FILTERING | 控制边缘和背景噪音 |
RS2_OPTION_INVALIDATION_BYPASS | 启用像素无效 |
RS2_OPTION_AMBIENT_LIGHT | 已弃用!-请改用RS2_OPTION_DIGITAL_GAIN。 |
RS2_OPTION_DIGITAL_GAIN | 更改深度数字增益值,请参阅rs2_digital_gain |
RS2_OPTION_SENSOR_MODE | 分辨率模式:有关值,请参阅rs2_sensor_mode |
RS2_OPTION_EMITTER_ALWAYS_ON | 持续启用激光器(仅限GS SKU) |
RS2_OPTION_THERMAL_COMPENSATION | 选定D400 SKU的深度热补偿 |
RS2_OPTION_TRIGGER_CAMERA_ACCURACY_HEALTH | 自2.46起已弃用! |
RS2_OPTION_RESET_CAMERA_ACCURACY_HEALTH | 自2.46起已弃用! |
RS2_OPTION_HOST_PERFORMANCE | 设置主机性能模式以优化设备设置,使主机能够跟上工作负载,例如,USB事务粒度,将选项设置为低性能主机会导致更大的USB事务大小和减少事务数量,如果主机与工作负载相比较弱,则会提高性能和稳定性 |
RS2_OPTION_HDR_ENABLED | 启用/禁用HDR |
RS2_OPTION_SEQUENCE_NAME | HDR序列名称 |
RS2_OPTION_SEQUENCE_SIZE | HDR序列大小 |
RS2_OPTION_SEQUENCE_ID | HDR序列ID-0不是HDR;HDR配置的序列ID从1开始 |
RS2_OPTION_HUMIDITY_TEMPERATURE | 湿度温度[摄氏度] |
RS2_OPTION_ENABLE_MAX_USABLE_RANGE | 根据场景中环境光的数量,打开/关闭最大可用深度传感器范围 |
RS2_OPTION_ALTERNATE_IR | 打开/关闭备用红外,启用备用红外时,红外图像保持深度相关性的振幅。 |
RS2_OPTION_NOISE_ESTIMATION | 噪声估计-指示红外图像上的噪声 |
RS2_OPTION_ENABLE_IR_REFLECTIVITY | 启用数据收集以计算红外像素反射率 |
RS2_OPTION_AUTO_EXPOSURE_LIMIT | 设置并获取以微秒为单位的自动曝光限制。默认值为0,表示完全曝光范围。如果请求的曝光限制大于帧时间,则会在运行时设置为帧时间。设置在下一个流会话之前不会生效。 |
RS2_OPTION_AUTO_GAIN_LIMIT | 设置并获取16到248之间的自动增益限制。默认值为0,表示完全增益。如果请求的增益限制小于16,则将其设置为16。如果请求的增益限制大于248,则将其设置为248。设置在下一个流会话之前不会生效。 |
RS2_OPTION_AUTO_RX_SENSITIVITY | 根据受接收器增益控制限制的环境光启用接收器灵敏度。 |
RS2_OPTION_TRANSMITTER_FREQUENCY | 改变发射机频率,增加有效范围。 |
RS2_OPTION_VERTICAL_BINNING | 启用垂直装箱,增加最大感应距离。 |
RS2_OPTION_RECEIVER_SENSITIVITY | 控制接收器对投射光和环境光的灵敏度(与L515上的APD相同)。 |
RS2_OPTION_AUTO_EXPOSURE_LIMIT_TOGGLE | 启用/禁用彩色图像自动曝光 |
RS2_OPTION_AUTO_GAIN_LIMIT_TOGGLE | 启用/禁用彩色图像自动捕获 |
RS2_OPTION_COUNT | 枚举值的数量。无效输入:用于for-loop。 |
这些参数,正好是realsene-viewer软件中所列出的所有参数,例如,要设置相机的参数为预设模式中的高精度(HIGH_ACCURACY),可以通过以下代码实现:
std::vector<rs2::sensor> sensors = device.query_sensors(); //获取设备的传感器
rs2::sensor sensor = sensors[0]; //获取高度传感器
rs2::depth_sensor depth_sensor = rs2::depth_sensor(sensor); //获取高度传感器
depth_sensor.set_option(RS2_OPTION_VISUAL_PRESET, RS2_RS400_VISUAL_PRESET_HIGH_ACCURACY ); //设置预设模式为高精度
rs2_rs400_visual_preset中的枚举值 | 详细说明 |
---|---|
RS2_RS400_VISUAL_PRESET_CUSTOM | |
RS2_RS400_VISUAL_PRESET_DEFAULT | |
RS2_RS400_VISUAL_PRESET_HAND | |
RS2_RS400_VISUAL_PRESET_HIGH_ACCURACY | |
RS2_RS400_VISUAL_PRESET_HIGH_DENSITY | |
RS2_RS400_VISUAL_PRESET_MEDIUM_DENSITY | |
RS2_RS400_VISUAL_PRESET_REMOVE_IR_PATTERN | |
RS2_RS400_VISUAL_PRESET_COUNT | 枚举值的数量。无效输入:用于for-loop。 |
#include <iostream>
#include <iomanip>
#include <librealsense2\rs.hpp>
using namespace std;
int main()
{
// 首先, 创建rs2::context对象. context表示与所连接设备相关的当前平台
rs2::context ctx;
// 使用context可以获取到所有连接到当前平台的设备
rs2::device_list devices = ctx.query_devices();
rs2::device selected_device; //用来接收要控制的设备
if (devices.size() == 0)
{
cerr << "No device connected, please connect a RealSense device" << endl;
//用来解决设备插入前等待的过程
rs2::device_hub device_hub(ctx);
//device_hub会阻塞程序,直到设备插入
selected_device = device_hub.wait_for_device();
}
else
{
cout << "Found the following devices:" << endl;
// 通过循环遍历接入平台的设备,打印设备名称
int index = 0;
for (rs2::device device : devices)
{
// 每个设备都提供了一些关于自身的信息,例如名称:
string name = "Unknown Device";
if (device.supports(RS2_CAMERA_INFO_NAME))
{
name = device.get_info(RS2_CAMERA_INFO_NAME);
}
// 以及设备的序列号:
string sn = "########";
if (device.supports(RS2_CAMERA_INFO_SERIAL_NUMBER))
{
sn = string("#") + device.get_info(RS2_CAMERA_INFO_SERIAL_NUMBER);
}
cout << " " << index++ << " : " << name << " " << sn << endl;
}
// 选择一个设备
selected_device = devices[0];
std::vector<rs2::sensor> sensors = selected_device.query_sensors();
std::cout << "Device consists of " << sensors.size() << " sensors:" << std::endl;
// 枚举设备底线传感器的名称
for (rs2::sensor sensor : sensors)
{
if (sensor.supports(RS2_CAMERA_INFO_NAME))
{
cout << " " << index++ << " : " << sensor.get_info(RS2_CAMERA_INFO_NAME) << endl;
}
else
{
cout << " " << index++ << " : " << "Unknown Sensor" << endl;
}
}
// 枚举设备底线传感器的名称
for (rs2::sensor sensor : sensors)
{
if (sensor.supports(RS2_CAMERA_INFO_NAME))
{
cout << sensor.get_info(RS2_CAMERA_INFO_NAME) << " Sensor supports the following options:" << endl;
// 打印出传感器所支持的选项
for (int i = 0; i < static_cast<int>(RS2_OPTION_COUNT); i++)
{
rs2_option option_type = static_cast<rs2_option>(i);
//可以对SDK枚举类型进行流式传输,以获得表示它们的字符串
std::cout << " " << i << ": " << option_type;
// 要控制一个选项,请使用以下api:
// 首先,验证传感器是否真的支持此选项
if (sensor.supports(option_type))
{
std::cout << std::endl;
// 获取选项的可读描述
const char* description = sensor.get_option_description(option_type);
std::cout << " Description : " << description << std::endl;
// 获取选项的当前值
float current_value = sensor.get_option(option_type);
std::cout << " Current Value : " << current_value << std::endl;
//要更改选项的值,请执行change_sensor_option()函数
}
else
{
std::cout << " is not supported" << std::endl;
}
}
}
else
{
cout << " " << index++ << " : " << "Unknown Sensor" << endl;
}
}
}
}
rs2::option类
-
继承关系
-
函数
返回值 函数原型 详细说明 bool supports (rs2_option option) const 检查是否支持特定选项 const char * get_option_description (rs2_option option) const 获取选项描述 const char * get_option_name (rs2_option option) const 获取选项名称 const char * get_option_value_description (rs2_option option, float val) const 获取选项值描述(在特定选项值具有特殊含义的情况下) float get_option (rs2_option option) const 读取选项的值 option_range get_option_range (rs2_option option) const 检索受支持选项的可用值范围 void set_option (rs2_option option, float value) const 将新值写入选项 bool is_option_read_only (rs2_option option) const 检查特定选项是否为只读 std::vector< rs2_option > get_supported_options () 获取所支持的选项 options & operator= (const options &other) options (const options &other) 构造函数 virtual ~options ()=default 析构函数