(一) 与usb相机的交互
第一个链接是 先从usb中拿到图像,然后再发布和订阅
【C++】ROS:cv_bridge包使用与图像转换示例_cvbridge-CSDN博客
第二个链接是使用方法
ROS学习笔记--cv_bridge_cvbridge-CSDN博客
第三个链接是,包含了话题自定义
ROS教程(五):OpenCV调用USB摄像头并发布topic(详细图文)-腾讯云开发者社区-腾讯云 (tencent.com)
主要包含了两个内容:
1)将ros图像转换成opencv图像
2)将opencv图像转换成ros图像
(二) 与工业相机的交互
ros系统与海康相机的交互,参照网址:https://gitcode.com/luckyluckydadada/HIKROBOT-MVS-CAMERA-ROS/overview?utm_source=csdn_github_accelerator&isLogin=1
程序中,相机的参数设置为硬触发,帧率为10帧。
node.param("FrameRate", FrameRate, 10); // 帧率设置为10帧
node.param("ExposureTime", ExposureTime, 50000); // 曝光时间设置为50ms
node.param("TriggerMode", TriggerMode, 1); // 控制相机是否开启硬触发
node.param("TriggerSource", TriggerSource, 2); // 触发源 也就是选择线 line0, line2等线
node.param("LineSelector", LineSelector, 2); // 这个表示IO的线选择的是哪一个
在图像的获取过程中,并没有用到回调函数,而是直接去获取帧:
nRet = MV_CC_GetOneFrameTimeout(p_handle, m_pBufForDriver, MAX_IMAGE_DATA_SIZE, &stImageInfo, 15); // 不知道会不会获得重复帧
在拿到帧之后,使用了互斥量来防止 图像在被read的时候修改。
在ros发布过程中,就是先readimage,然后构建cv_bridge::CvImagePtr 。 并转化成 sensor_msgs::Image 和 sensor_msgs::CameraInfo 两个消息, 然后直接发布消息。
整个程序中,使用硬触发,应该是和其他硬件相连,其他硬件可以提供一个电平触发信号。感觉缺点是 用一个回调函数来接收图像会比较好。在获得图像后,直接就pub图像。
整个过程仍然是,从相机中使用函数或者回调函数抓取图像,然后把图像pub出去。两者可以分开来写程序。
(三)与激光雷达的交互
(四)与IMU的交互
(五)与RTK/GNSS硬件的交互
ROS实现串口解析GPS协议,并发布到话题_gpfpd-CSDN博客
理解了 ros和硬件交互的原理,第一步就是通过硬件的SDK或者串口程序,获取到硬件的数据,然后使用ros进行发布。在硬件层面上去保证硬件是同步的。
(六)与小车的交互
(七)与无人机的交互