海康相机ROS驱动使用

1、海康MV-CS050-10GC 镜头 MVL-HF1624M-10MP f=16mm MVL-HF0624M-10MP f=6mm 两个镜头都是1000万分辨率
2、支持POE供电 使用网线连接支持POE的交换机或网卡
3、下载linux客户端
4、查找相关ros驱动 https://github.com/luckyluckydadada/HIKROBOT-MVS-CAMERA-ROS.git
按照readme编译
问题1
fatal error: MvErrorDefine.h: 没有那个文件或目录
解决
需要先安装linux客户端(海康机器人官网),sudo dpkg -i MVS-2.1.2_x86_64_20221208.deb cd /opt/MVS/bin/ 再./MVS.sh运行,客户端启动。
问题2
/usr/bin/ld: 找不到 -lGCBase_gcc421_v3_0
/usr/bin/ld: 找不到 -lGenApi_gcc421_v3_0
/usr/bin/ld: 找不到 -llog4cpp_gcc421_v3_0
/usr/bin/ld: 找不到 -lLog_gcc421_v3_0
/usr/bin/ld: 找不到 -lMathParser_gcc421_v3_0
/usr/bin/ld: 找不到 -lNodeMapData_gcc421_v3_0
/usr/bin/ld: 找不到 -lXmlParser_gcc421_v3_0
本机缺少对应的动态库
解决
git上找到对应文件 https://github.com/yiningzeng/hikvision-darknet-demo.git 将相应的.so文件复制到 /opt/MVS/lib/64/
再次编译-通过
问题3
通过时存在警告:warning: libopencv_imgcodecs.so.4.2, needed by /opt/ros/noetic/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.3.4
系统中已经安装了OpenCV 3.4版本的库文件和OpenCV 4.2版本的库文件,而这两个版本的库文件都提供了名为 libopencv_imgcodecs.so 的共享库。但是,软件包或程序需要一个特定版本的库文件以正常工作。在本例中,程序需要使用OpenCV 4.2版本的库文件。
解决:在程序中通过配置 LD_LIBRARY_PATH 环境变量,使链接器首先在特定目录搜索库文件,export LD_LIBRARY_PATH=/path/to/opencv4:$LD_LIBRARY_PATH 其中 “/path/to/opencv4” 代表包含OpenCV 4库文件的目录
5、正常通过
source ./devel/setup.bash
roslaunch hikrobot_camera hikrobot_camera.launch

6、实际测试:
稳压电源:15V
蓝灯常亮
启动客户端配置ip :192.168.1.5 网关:192.168.1.254
手动调整光圈焦距,直至需要的效果
当前发布频率为6hz左右,客户端采集频率也为6hz。
稳压电源设为20V
问题1:
客户端采集频率18hz,一旦使用ros驱动后会导致数据采集频率变为6hz,问题出在ros驱动上。
宽度和高度不同;(改为) 2048*2448
亮度增益不同;0
将像素格式改为BGR8 与算法适配 0x02180015
PixelType_Gvsp_BGR8_Packed = (MV_GVSP_PIX_COLOR | MV_PIXEL_BIT_COUNT(24) | 0x0015),
#define MV_GVSP_PIX_COLOR 0x02000000
#define MV_PIXEL_BIT_COUNT(n) ((n) << 16)
0x02000000 + 0x00180000(24的16进制表达)+ 0x0015 = 0x02180015

设置巨帧 echo “9000”> /sys/class/net/eno1/mtu 频率变为8hz

将图像格式设置为BayerRG8 频率正常输出

/*

再用函数 cv::cvtColor(bayer_image, image, cv::COLOR_BayerRG2BGR); 转为BGR8 算法所需格式

出现 nRet = MV_CC_OpenDevice(handle); MV_OK != nRet
warning: libopencv_imgcodecs.so.3.2, needed by /opt/ros/melodic/lib/libcv_bridge.so, may conflict with libopencv_imgcodecs.so.3.3

在Cmakelist 中 用
LINK_DIRECTORIES(
/usr/local/lib/
)
替代
target_link_libraries(${PROJECT_NAME}
${OpenCV_LIBRARIES}
)
警告消失!但是仍然出现 MV_OK != nRet
camera::frame = cv::Mat(stImageInfo.nHeight, stImageInfo.nWidth, CV_8UC3, m_pBufForSaveImage).clone();
改为CV_8UC1。但是MV_CC_SetPixelFormat fail! 换成0x01080009 BayerRG8还不是正常图
*/

根本原因:在hpp的最后,已经进行了转换。所以只需要改图像格式设置为BayerRG8就行,不需要上述/* xxxx */中的工作。
使用总结:1、修改config.yaml中的图像宽度和高度,修改频率;2、修改hpp中的图像高度和宽度。

虽然海康本身没有ros驱动,但是其sdk封装了一些与opencv同样功能的函数,在写ros驱动时中使用sdk函数的时候和opencv产生了重复。

/****/
红外相机ros驱动使用
MV-CI003-GL-N35 焦距 35mm 像素30万
1、测试客户端
不要使用RT系列网卡!!
在车载端测试正常–50HZ
2、写一个红外相机的ROS驱动 目前的工业相机ros驱动似乎也能用于红外相机。
/
/

完善ros驱动使其能够同时发布多个相机

1、在launch里面写多个节点用于拉起多个相机。每个节点应该开关可控
2、每个相机有自己的config.yaml文件
3、出现yaml文件无法加载问题,采用group 节点组 将每个相机所需参数放置到group中。
4、出现节点died情况,排查–需要万兆通信才行 因为网卡的原因(具体不太清楚),每一分钟数据会停传一次。
5、完善红外相机数据的解码方式,相机镜头影响,相机内参标定&相机激光雷达的外参标定。
多相机&激光雷达rviz图
海康相机ROS驱动使用_第1张图片

你可能感兴趣的:(项目-环境建图,数码相机,linux)