2021-11-24 10:48:29 索炜达电子 913
项目编号:E2450
文件大小:1.2M
源码说明:带中文注释
开发环境:C编译器
简要概述:
概述
Pelco-D协议解析器库旨在帮助开发人员使用Pelco-D协议控制摄像机和云台。该库有一个简单的接口,只进行消息编码。该库包含一个类PelcoDProtocolParser。编程类的接口如下所示:
/**
* @brief Pelco-D protocol parser class.
*/
class PelcoDProtocolParser
{
public:
/**
* @brief Class constructor.
*/
PelcoDProtocolParser();
/**
* @brief Class destructor.
*/
~PelcoDProtocolParser();
/**
* @brief Method to encode Pelco-D command (Always 7 bytes).
*
* @param packet Pointer to packet buffer. Always 7 bytes.
* @param address Camera address (usually 1).
* @param command_ID ID of command.
* @param data_1 First byte of command data (according to Pelco-D specification).
* @param data_2 Second byte of command data (according to Pelco-D specification).
* @return true If the command has been encoded.
* @return false In case any errors.
*/
bool GetCommand(
uint8_t* packet,
uint8_t address,
pelco::PelcoDCommands command_ID,
uint8_t data_1 = 0,
uint8_t data_2 = 0);
};
命令ID在PelcoDProtocolParser.h文件的PelcoDCommands结构中描述。结构的字段名与Pelco-D协议规范相对应。结构声明如下。
enum class PelcoDCommands
{
// Main commands.
CAMERA_ON,
CAMERA_OFF,
IRIS_CLOSE,
IRIS_OPEN,
FOCUS_NEAR,
FOCUS_FAR,
FOCUS_STOP,
ZOOM_WIDE,
ZOOM_TELE,
ZOOM_STOP,
DOWN,
UP,
LEFT,
RIGHT,
UP_RIGHT,
UP_LEFT,
DOWN_RIGHT,
DOWN_LEFT,
STOP,
// Extended commands.
SET_PRESET,
CLEAR_PRESET,
GO_TO_PRESET,
FLIP_180DEG_ABOUT,
GO_TO_ZERO_PAN,
SET_AUXILIARY,
CLEAR_AUXILIARY,
REMOTE_RESET,
SET_ZONE_START,
SET_ZONE_END,
WRITE_CHAR_TO_SCREEN,
CLEAR_SCREEN,
ALARM_ACKNOWLEDGE,
ZONE_SCAN_ON,
ZONE_SCAN_OFF,
SET_PATTERN_START,
SET_PATTERN_STOP,
RUN_PATTERN,
SET_ZOOM_SPEED,
SET_FOCUS_SPEED,
RESET_CAMERA_TO_DEFAULT,
AUTO_FOCUS_AUTO_ON_OFF,
AUTO_IRIS_AUTO_ON_OFF,
AGC_AUTO_ON_OFF,
BACKLIGHT_COMPENSATION_ON_OFF,
AUTO_WHITE_BALANCE_ON_OFF,
ENABLE_DEVICE_PHASE_DELAY_MODE,
SET_SHUTTER_SPEED,
ADJUST_LINE_LOCK_PHASE_DELAY,
ADJUST_WHITE_BALANCE_R_B,
ADJUST_WHITE_BALANCE_M_G,
ADJUST_GAIN,
ADJUST_AUTO_IRIS_LEVEL,
ADJUST_AUTO_IRIS_PEACK_VALUE,
QUERY
};
命令编码示例
下面是平台停止命令和放大命令的示例。
// Init variables.
uint8_t packet[7];
uint8_t camera_address = 1;
// STOP camera and PTU.
if (pelco_protocol_parser.GetCommand(packet, camera_address, pelco::PelcoDCommands::STOP))
{
// Send command.
tcp_port.SendData(packet, 7);
serial_port.SendData(packet, 7);
}
// Zoom tele.
if (pelco_protocol_parser.GetCommand(packet, camera_address, pelco::PelcoDCommands::ZOOM_TELE))
{
// Send command.
tcp_port.SendData(packet, 7);
serial_port.SendData(packet, 7);
}
演示应用程序
文件夹Pelco_D_ProtocolParser->PelcoDProtocolParserTests包含演示应用程序文件(PelcoDDemoApplication)。应用程序在启动后读取PelcoDemoApplication.json参数文件,该文件包含视频源参数和摄像头或云台的连接参数。应用程序可以通过串行端口或TCP连接控制摄像头或云台。配置文件的内容如下所示。
{
"Video_Source_Params":
{
"video_source_init_string":"0"
},
"Communication_Params":
{
"camera_IP":"127.0.0.1",
"TCP_port":5600,
"serial_port_name":"/dev/tty0",
"serial_port_baudrate":115200,
"camera_address":1,
"max_PTU_speed":63
}
}
应用程序可以从视频文件捕获视频(例如:video\u source\u init\u string:“test.mp4”),也可以捕获RTP视频流(例如:video\u source\u init\u string:)rtp://xxx.xxx.xxx.xxx:1234)或可以从网络摄像机捕获视频(例如:视频\源\初始\字符串:“0”)。“通信参数”部分包含与摄像头或云台连接的参数。如果要通过TCP连接进行控制,必须在配置文件中设置正确的TCP端口(TCP_端口字段)和设备IP地址(摄像头_IP字段)。如果不需要TCP连接,则将字段TCP_端口值设置为-1。要通过串行端口进行控制,需要设置串行端口名称(串行端口名称字段)和波特率(串行端口波特率字段)。摄像头地址字段定义通过Pelco-D协议控制的摄像头或平台的名称。max_PTU_speed(最大速度)字段定义了最大云台速度(根据Pelco-D协议,最大速度不得超过63)。启动演示应用程序并初始化参数后,软件将在单独的窗口中显示视频。该应用程序使用OpenCV库捕获和显示视频。要编译演示应用程序,必须在操作系统中指定OpenCV库的路径。演示应用程序的用户界面如下所示。
用户界面由一个视频显示窗口组成,其中包含叠加信息:从视频中心到鼠标指针位置的一条线,以及对程序控制按钮的提示。用户可以使用鼠标控制相机旋转。要执行此操作,请在视频窗口中的任意位置单击鼠标左键。根据鼠标指针的位置,将生成具有所需速度的旋转命令(根据配置文件中的max_PTU_speed字段,在视频边缘速度将为最大,在中心速度将为最小)。用户还可以使用键盘按钮控制相机:1-相机打开2-相机关闭3-近焦4-远焦5-变焦宽6-变焦D-右移(定速)A-左移(定速)W-上移(定速)X-下移(定速)Q-上移左移(定速)E-上移右移(定速)Z-下移左移(定速)C-右下移动(定速)
目录│文件列表:
└ Pelco_D_ProtocolParser
│ CMakeLists.txt
├ PelcoDProtocolParser
│ │ CMakeLists.txt
│ └ src
│ │ CMakeLists.txt
│ │ PelcoDProtocolParser.cpp
│ └ PelcoDProtocolParser.h
├ PelcoDProtocolParserTests
│ │ CMakeLists.txt
│ └ PelcoDDemoApplication
│ │ CMakeLists.txt
│ │ json.hpp
│ │ main.cpp
│ │ PelcoDDemoApplication.json
│ │ SerialPort.cpp
│ │ SerialPort.h
│ │ TCPPort.cpp
│ └ TCPPort.h
└ _static
│ pelco-d_logo_with_borders.png
└ user_interface.png