AutoWare Core Perception模块学习笔记(一):image_processor

作为自动驾驶的重要一环,准确的环境感知能力能够为后续路径规划、决策控制提供重要的科学依据。当前主流的感知技术主要依赖各种传感器数据,包括图像、激光点云、毫米波雷达数据等。最近将研究AutoWare平台中的core perception模块,并对其中的技术和代码进行解析。能力有限,如内容有误,烦请各位大佬批评指正,互相交流,共同进步。本节将先从图像数据入手,详细解读AutoWare Core Perception模块中image_processor代码,分析其中所涉及的关键技术和操作。

首先进入 src/autoware/core_perception/image_processor/launnch文件夹,可以看到该部分内容主要包括image_rectifierimage_rotator两部分。

image_rectifier

src/autoware/core_perception/image_processor/launch/image_rectifier.launch中主要包含image_rectifier节点和calibration_publisher节点。如下图1所示,其中节点image_rectifier涉及图像名(image_src)、相机内参信息(camera_info_src) 等参数信息;而节点calibration_publisher主要包括激光点云-图像配准(register_lidar2camera_tf)、外部参数矩阵(publish_extrinsic_mat)、标定文件夹(calibration_file)、相机帧率(camera_frame)等参数。

 图1 image_rectifier.launch文件信息

image_rectifier_node.cpp

src/autoware/core_perception/image_processor/nodes/image_rectifier/image_rectifier_node.cpp中定义了 image_rectifier节点的相关操作。首先,找到主函数main()入口,其中包括初始化image_rectifier方法参数调用类方法 ROSImageRectifierAPP,并执行Run()等操作,如下图2 所示。

图2 image_rectifier_node.cpp中main()函数参数信息

在类方法ROSImageRectifierApp中,首先声明ROS节点及opencv图像参数信息,如下图3所示。随后,定义一个无类型指针函数ImageCallback(),用于创建 opencv 类型的图像,并根据相机内参、畸变参数、编码方式等信息对图像进行处理,最终通过publisher_image_rectifiered_节点将处理后的结果发布。

图3 类方法ROSImageRectifierApp中ImageCallback()函数参数信息

此外,ROSImageRectifierApp中还定义了IntrinsicsCallback指针,用于确定图像的宽、高值,并利用相机内参矩阵和失真系数矩阵对图像进行变换处理,如下图4所示。

图4 IntrinsicsCallback()函数参数信息

最后,通过声明public方法,使得外部函数也能够访问Run()指针中的一系列操作。如下图5所示,定义ROS节点的命名空间,方便后续信息的接收和发布。例如,subscribe()方法用于接收节点信息,而advertise()方法能够回调一个publisher对象,并通过对象的publish()方法发布信息。

图5 类方法ROSImageRectifierApp中Run()方法参数信息

image_rotator

src/autoware/core_perception/image_processor/launch/image_rotator.launch中涉及节点 image_rectifier,其包含了图像名(image_src)、旋转角度(rotation_angle)、竖向镜像(mirror_vertical)、水平镜像(mirror_horizontal)等参数信息,如下图6所示。

图6 image_rotator.launch文件信息

image_rotator_node.cpp

src/autoware/core_perception/image_processor/nodes/image_rotator/image_rotator_node.cpp中定义了节点image_rotator的相关操作。同样地,首先找到主函数main()定义,其中包括初始化image_rotator方法参数调用类方法 ROSImageRotatorAPP、执行Run()等操作如下图7所示。

图7 image_rotator_node.cpp中main()函数参数信息

在类方法ROSImageRotatorApp中,首先声明ROS节点及图像有关参数类型,包括图像接收节点(subscriber_image_raw_)、相机参数信息节点(subscriber_camera_info_)以及图像旋转信息发布节点(publisher_image_rotated)等,如下图8所示。

图8 类方法ROSImageRotatorApp的参数信息

然后,创建ImageCallback指针,如下图9所示,其中定义了图像是否进行镜像变换、是否进行旋转变换、旋转角度等信息,并通过这些参数信息进行相应的仿射变换。最后利用 publisher_image_rotated 节点发布信息。

图9 类方法ROSImageRotatorApp中ImageCallback()方法参数信息

最后,同样通过声明public方法以便外部能够访问Run()指针中的操作。如下图10所示,在 Run()指针中进一步定义ROS节点的命名空间,并利用subscribe()advertise()方法进行信息接收和发布。

图10 类方法ROSImageRotatorApp中Run()方法参数信息

结束语

总的来说,本节内容围绕Autoware Core Perception模块中的image_processor部分展开。该部分内容主要包括image_rectifierimage_rotator节点的相关操作,其中image_rectifier节点中主要是根据相机信息和畸变参数对图像进行还原矫正,而image_rotator节点主要是进行图像的垂直、水平翻转及不同角度旋转等处理。最后,通过main()函数调用类方法,并利用ROS subscriberpublisher节点进行信息接收和发布,以执行相关操作。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值