5.13.1 基本功能介绍
M300无人机提供了六向视觉,视觉系统是主要是双目视觉传感器。与相机视频一样,OSDK中也提供了接口用于读取M300各个方向上的视觉图像,以及双目摄像头的内参及外参,开发者在开发时也可以融合自己的算法对视觉处理,获取周围环境状态等。与实时视频流一样,C sample中主要是从飞机中获取图像裸流文件,此处并不包含视觉图像处理。
OSDK读取到的视觉图像为VGA灰度图像(区别与实时流的H264格式),帧率20FPS,分辨率640 x 480,支持六个方向视觉图像,单个方向上包括左右两个摄像头。
摄像头参数包括,内参矩阵,旋转矩阵与平移矩阵。
5.13.2 主要代码文件
C sample代码文件
perception/
├── test_perception.c
└── test_perception.h
PSDK lib头文件
5.13.3 sample代码实现
功能入口函数
T_DjiReturnCode DjiTest_PerceptionRunSample(E_DjiPerceptionDirection direction);
初始化
/**
* @brief Initialize the perception module.
* @note The interface initialization needs to be after DjiCore_Init.
* @return Execution result.
*/
T_DjiReturnCode DjiPerception_Init(void);
API简介
-
初始化视觉图像模块
读取双目视觉参数
/**
* @bref Perception camera parameters
*/
typedef struct {
uint8_t direction;
float leftIntrinsics[DJI_PERCEPTION_INTRINSICS_PARAM_ARRAY_NUM];
float rightIntrinsics[DJI_PERCEPTION_INTRINSICS_PARAM_ARRAY_NUM];
float rotationLeftInRight[DJI_PERCEPTION_ROTATION_PARAM_ARRAY_NUM];
float translationLeftInRight[DJI_PERCEPTION_TRANSLATION_PARAM_ARRAY_NUM];
} T_DjiPerceptionCameraParameters;
/**
* @bref Perception camera parameters packet
*/
typedef struct {
uint32_t timeStamp;
uint32_t directionNum;
T_DjiPerceptionCameraParameters cameraParameters[IMAGE_MAX_DIRECTION_NUM];
} T_DjiPerceptionCameraParametersPacket;
/**
* @brief Get the internal and external parameters of all stereo cameras.
* @return Execution result.
*/
T_DjiReturnCode DjiPerception_GetStereoCameraParameters(T_DjiPerceptionCameraParametersPacket *packet);
API简介:
-
读取所有视觉系统的内参和外参,M300为六向视觉系统。
参数
-
packet,存放读取参数的指针
leftIntrinsics,左相机内参矩阵
rightIntrinsics,右相机内参矩阵
rotationLeftInRight,左对右旋转矩阵
translationLeftInRight,左对右平移矩阵
因为一次读取是六个方向参数,所以sample中分开呈现出来。
订阅视觉图像
/**
* @brief Subscribe the raw images of both stereo cameras in the same direction. Default frequency at 20 Hz.
* @param direction: direction to specify the direction of the subscription. Ref to E_DjiPerceptionDirection
* @param callback callback to observer the stereo camera image and info.
* @return Execution result.
*/
T_DjiReturnCode DjiPerception_SubscribePerceptionImage(E_DjiPerceptionDirection direction,
DjiPerceptionImageCallback callback);
API简介
-
订阅指定方向上的视觉灰度图像,一旦订阅成功,将持续通过回调行数上抛数据,回调触发的频率即帧率为20HZ。直到调用DjiPerception_UnsubscribePerceptionImage,视觉图像将停止订阅。
参数
-
direction,指定需订阅的方向。
枚举定义:
/**
* @bref Perception camera direction
*/
typedef enum {
DJI_PERCEPTION_RECTIFY_DOWN = 0,
DJI_PERCEPTION_RECTIFY_FRONT = 1,
DJI_PERCEPTION_RECTIFY_REAR = 2,
DJI_PERCEPTION_RECTIFY_UP = 3,
DJI_PERCEPTION_RECTIFY_LEFT = 4,
DJI_PERCEPTION_RECTIFY_RIGHT = 5
} E_DjiPerceptionDirection; -
callback,外部用于接收灰度图像数据的回调函数。
回调函数原型
/**
* @bref Callback type to receive stereo camera image
*/
typedef void(*DjiPerceptionImageCallback)(T_DjiPerceptionImageInfo imageInfo, uint8_t *imageRawBuffer,
uint32_t bufferLen);
回调函数数据处理
保存10帧数据为图像文件。
static void DjiTest_PerceptionImageCallback(T_DjiPerceptionImageInfo imageInfo, uint8_t *imageRawBuffer,
uint32_t bufferLen)
{
char fileName[256] = {0};
snprintf(fileName, sizeof(fileName), "./image_%s_%d.raw",
directionName[imageInfo.rawInfo.direction].name,
s_perceptionImageCount);
if (s_perceptionImageCount < TEST_PERCEPTION_SAVE_IMAGE_MAX_NUM) {
DjiTest_SaveImageData(fileName, imageRawBuffer, bufferLen);
USER_LOG_INFO(
"Save perception image to path: ${binary_execute_path}/image_%s_%d.raw, direction:%s, position:%d, size:%dx%d",
directionName[imageInfo.rawInfo.direction].name,
s_perceptionImageCount,
directionName[imageInfo.rawInfo.direction].name,
imageInfo.dataType,
imageInfo.rawInfo.width,
imageInfo.rawInfo.height);
s_perceptionImageCount++;
}
}
5.13.4 开发注意事项
-
视觉图像使用USB通信传输,需要确保USB连接且通信正常。
-
评论
0 条评论
请登录写评论。