V1 Pro视觉建图部署说明
概述
本文主要介绍V1 Pro 相机视觉定位模块功能,包含定位模块基本特性、使用方式、应用场景等内容,描述基本的建图、定位过程及注意事项,提供使用上位机操作和SDK结合使用的简单示例教程,同时支持UDP通讯方式。
主要特性
- 顶视视觉定位,到点重复定位精度±1cm
- 针对不同顶高,根据焦距分为6米版和12米版
- 内置算力,无需外接工控机
- 定位模式输入机器人里程计数据,直接输出机器人位姿
- 默认带配套激光雷达用于辅助建图,也可自行通过SDK传入激光数据
相机坐标系
相机坐标系基于笛卡尔坐标系(右手),如图所示:
使用方式
- Windows上位机。通过相机上位机软件,可视化显示、操作相机建图及定位等过程。
- SDK。实际部署时,可以通过调用相机SDK进行开发,实现各项功能。
应用场景
- 顶视导航,需水平安装
- 根据实际顶高确定使用6米版或者12米版相机,实现最佳定位效果
- 适用于具有丰富视觉特征的顶视场景,大面积区域视觉特征较少或纯色不能使用,可通过贴反光贴的形式改善
- 相机安装可靠,无视野遮挡,运行时保证较为平稳的环境、无明显灰尘
- 建图时低速平稳运行,速度不超过0.2m/s;定位时速度不超过1m/s,返回定位结果帧率约10Hz
建图过程
建图过程如图所示,有以下主要几点请注意:
- 建图、定位时里程计是必需的,里程计数据为绝对坐标;
- 建图时需要单线激光数据进行辅助定位,部分较好场景可不依靠激光数据辅助建图,此时可输入虚拟激光数据,具体请联系相关技术支持人员;
- 若需要激光地图和视觉地图坐标系统一(视觉地图和激光地图定位结果不能完全重合,一般会有几厘米的偏差),建图时需传入机器人激光位姿,此时可输入虚拟激光数据;
- 可使用建图工具进行离线建图,部分场景无法实现建图或出现问题,请联系相关技术支持人员;
- 虚拟数据表示有实时数据传入,但是可以不要求数据是实际场景的真实数据,例如
range
全是0的虚拟激光数据; - 如无实际激光实际输入,不提供激光栅格图,在上位机显示界面中不显示激光栅格地图;
- 启动建图使能后,机器人移动才会开始录制数据,静止时不会;
- 导出数据时,请提前关闭建图使能,并耐心等待数据导出;
- 提前规划大致录图路径,尽量保持低速(<0.2m/s)匀速、直行、直角转弯,避免重复路径、随机抖动,同一方向路径保持有约1/3共视区域,一般情况平行距离保持2米左右,最大限度覆盖建图区域或机器人行进路径,理想情况如下图所示:
定位过程
定位过程如图所示,有以下主要几点请注意:
- 定位前请先导入建好的视觉地图,定位时切换到对应地图;
- 初次定位需发送重定位请求,重定位成功后才能收到正确的定位结果;
- 发送重定位需设置建图使能
- 定位模块会记录正常定位状态下的位姿,若相机关闭后再重启,会根据最后记录的位姿自动进行重定位;
- 重定位时需知道机器人在视觉地图中大概的坐标
(x, y, yaw)
,可在建图录制数据的起点(0, 0, 0)
进行重定位。一般地,x
、y
偏差在小于30cm,yaw
角偏差小于20°; - 正常定位状态下,记录固定工位处机器人坐标,可在该固定工位通过记录的机器人坐标进行重定位;
- 若重定位失败,请细微移动机器人实际位置或微调重定位坐标,或者移动至视觉特征丰富区域,再次重定位;若依旧重定位失败,请检查SDK程序、数据通讯、以及相机出图等是否正常工作;
- 正常定位过程中,需在相机建图的范围内运行,在未建图的区域运行会输出错误的位姿信息;
- 部分区域视觉特征不理想、顶视高度和相机焦距匹配度低等因素会影响定位精度
准备工作
- 检查相机是否正常连接,且出图、通讯正常
- 若使用配套激光雷达,请连接至对应的网口
- 相机水平安装,根据安装位置和方向确定相对于机器人中心的外参
[x, y, z, yaw, pitch, roll]
- 单线激光雷达水平安装,并提供激光雷达相对于机器人中心的外参
[x, y, yaw]
- 若同时使用Windows端上位机和工控机端SDK,可通过交换机的形式连接相机、工控机和Windows电脑进行通讯
注:相机同时支持最多两个访问权限,例如,可通过单上位机和单SDK同时访问,也可通过两个上位机同时访问
使用示例
此部分需配合SDK示例程序进行,示例程序采用ROS话题通讯方式,往SDK传入数据并接收算法模块返回结果。用户可通过linux工控机端SDK示例程序传入数据,在Windows端上位机上进行视化操作;后期部署现场使用,可单独使用SDK进行开发,完成建图和定位需求。
除了上述SDK方式,也可以通过UDP通信方式,不过功能受限,需使用上位机软件完成建图,然后部署地图进行定位,推荐使用SDK方式进行建图、定位。
建图
准备工作
确认相机正常、通讯正常。可通过虚拟数据测试通讯,详情请参照SDK提供的ROS示例文档进行配置。通过交换机连接相机,打开上位机软件连接相机,操作如下图所示:
- 打开上位机程序
- 连接相机
- 选择应用算法栏
- 应用算法中选择视觉定位
- 此时可以通过视觉定位视图查看各传感器数据状态是否正常,如果存在异常请检查通讯配置
- 此处显示为算法返回的状态,处于"正常定位"状态时返回机器人位姿可以用于定位
用户输入数据
按照上一步操作,此时外部传入数据与相机内部定位模块已建立通讯,可按照SDK示例程序将真实传感器数据传入相机用于建图,数据包括:
- 机器人绝对坐标系的里程计数据,>30Hz
- 激光雷达数据(若使用配备激光雷达,则可输入虚拟数据),>=10Hz
- 机器人激光地图下的位姿(若不要求与激光地图统一坐标系,可不输入),>=10Hz
录制数据
- 配置参数
- 地图名。(若无则使用默认"example_map1")
- 相机相对于机器人的外参。单位为米,度数
- 激光雷达相对于机器人的外参。单位为米,度数
- 录图路径规划
- 根据实际建图场景提前规划录图行进路线,按照要求
- 启动录图
- 设置建图使能,即开启建图模式,机器人移动即开始录图
- 导出数据
- 录制数据完成,点击导出数据即可(若使用SDK,需先关闭建图使能),导出数据保存在
params\f13141140000\vision_map.zip
,将其发回相关技术支持人员即可。注意,f13141140000
为相机ID编号,不同相机ID不同,可在上位机上确认。
离线建图
此部分可通过部署离线建图工具完成生成地图包文件,或由迈相关技术支持人员完成,并提供地图打包文件。
导入视觉地图
按下图所示导入地图文件,如下名为".zip"格式的地图压缩包文件。在地图名下拉列表中能看到新导入的地图即表示导入成功。
定位
准备工作
- 确认相机正常、通讯正常
- 所在区域地图已导入相机中
用户输入数据
- 在录图、建图、导入地图操作的成功完成后,可按照SDK示例程序将真实传感器数据传入相机用于定位,数据包括:
- 机器人绝对坐标系的里程计数据,>30Hz
启动定位
- 配置参数
- 地图名。(使用对应区域的已经建好的地图)
- 相机相对于机器人的外参。单位为米,度数
- 激光雷达相对于机器人的外参。单位为米,度数
- 启动定位
- 设置定位使能,即开启定位模式
重定位请求
将机器人移动至重定位点位,即机器人在地图中的坐标位置,注意角度也应该大概一致,可以通过激光辅助确定大致位置(如无实际激光数据,无法提供栅格地图)。通过上位机、ROS或SDK可以发送重定位请求:鼠标左键拖动机器人移动至重定位点,旋转机器人方向,点击发送重定位请求即可。
若重定位失败,则需推动机器人微调重定位位置,重新发送重定位请求。
正常定位
在上位机上发送重定位请求并且成功后,可以看到处于正常定位状态,可以正常运行定位
UDP通讯
一般地,使用相机SDK可完成视觉建图(采图)和定位整个流程,同时,该相机也支持UDP方式进行通讯。使用UDP通讯方式,建立相机和机器人之间的通信,机器人端传出机器人里程计、机器人重定位位姿、机器人位姿(非必须)等信息至相机视觉定位模块,相机视觉定位模块传出机器人位姿、重定位结果等信息至机器人端,具体详见udp通讯协议文档。
视觉模块->机器人
- 定位值
- 重定位结果
机器人->视觉模块
- 里程计
- 重定位请求
- 机器人位姿(若需视觉地图和激光地图坐标系统一则需传入,否则可不输入)
参数配置
视觉定位模块配置参数文件默认位于相机内部,其路径为/home/user/visloc_config/visloc_user.json
,登录用户名为user
,默认登录密码也为user
,配置参数说明如下(注:json文件暂不支持以下注释文字,以下仅做说明):
{
"enable_loc":false, // 默认是否开启定位模式
"odom_type":0, // 机器人输入至视觉定位模块的里程计类型,int类型。位移单位为米,角度单位为弧度
// 0-一般类型。输入(x, y, yaw)
// 1-使用舵轮(v_x, v_y, 0)
"odom":{ // 轮式里相关参数,若里程计类型为0,则此项不生效
"gain": 1.0, // 轮间距(单舵轮时为舵轮至主动轮轴的距离),单位米
"wheel_dis": 2.1, // 轮间距(单舵轮时为舵轮至主动轮轴的距离),单位米
"wheel_radius": 0.2 // 轮子直径,单位米
},
"comm":{ // 通讯模式
"type":"none", // 默认为"none",改为"comm_udp"后切换为udp通讯
"comm_udp":{ // udp通讯参数
"target_ip":"192.168.100.20", // 视觉定位模块发送数据至机器人,机器人IP
"target_port":7071, // 视觉定位模块发送数据至机器人,机器人端口
"local_port":7070 // 视觉定位模块自身端口
},
"comm_tcp":{
},
"comm_serial":{
}
}
}
参考
- 相机 SDK 使用手册
- LxCameraViewer上位机软件使用手册
- V1 Pro SDK ROS使用示例.md
- 视觉定位模块SOCKET通讯协议.pdf
欢迎通过下述方式联系我们:
感谢您的访问,并希望知识库能成为您深入了解迈尔微视产品和方案的得力助手!