惊了,webots自带视觉识别
ubuntu版本:20.04
webots版本:2021a
控制器:C语言
为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。
加群链接
1. 识别效果
2. 普通相机及识别
在节点树下先添加一个Robot
节点,在其节点下添加Camera
节点。如下所示:
在控制器中输入如下代码可以对相机始能。
WbDeviceTag CAMERA = wb_robot_get_device("camera");
wb_camera_enable(CAMERA,TIME_STEP);
重新启动世界后相机就能成功运行了。
2.1 普通相机
添加通用的Camera节点已经足够我们去开发了。通用相机可以自定义分辨率、视野、噪点等参数,一般情况下也支持相机的变焦和聚焦机制。在特殊情况下还提供了运动模糊、各种噪声模型、镜头畸变、球型投影等参数供我们去设置。
Camera {SFFloat fieldOfView 0.7854 # 视野 [0, pi]SFInt32 width 64 # 图像宽度 [0, inf)SFInt32 height 64 # 图像高度 [0, inf)SFBool spherical FALSE # 球型投影 {TRUE, FALSE}SFFloat near 0.01 # 相机到近剪裁平面的距离 [0, inf)SFFloat far 0.0 # 相机到远剪裁平面的距离 [0, inf)SFFloat exposure 1.0 # 暴光度 [near, inf)SFBool antiAliasing FALSE # 抗拒齿 {TRUE, FALSE}SFFloat ambientOcclusionRadius 0 # 环境光遮挡半径 [0, inf)SFFloat bloomThreshold -1.0 # 泛光阈值 [-1, inf)SFFloat motionBlur 0.0 # 运动模糊 [0, inf)SFFloat noise 0.0 # 噪声 [0, 1]SFString noiseMaskUrl "" # 噪声遮蔽图 any stringSFNode lens NULL # 可以定义图像失真 {Lens, PROTO}SFNode focus NULL # 焦点 {Focus, PROTO}SFNode zoom NULL # 镜头缩放 {Zoom, PROTO}SFNode recognition NULL # 识别 {Recognition, PROTO}SFNode lensFlare NULL # 镜头光晕 {LensFlare, PROTO}
}
2.2 Webots下的视觉识别介绍
Camera
节点通过Recognition
节点实现了对象识别功能。通过设置物体的recognitionColors
参数可以让相机识别。
此外,识别还提供了图像分割功能,效果如下图所示,左侧是相机图像,右侧是分割图像。如果物体的identificationColors
参数为空,分割时以黑色显示,反则以设置的颜色进行着色
Recognition
节点下的参数:
Recognition {SFFloat maxRange 100 # 最大值范围 [0, inf)SFInt32 maxObjects -1 # 物体数量最大值 {-1, [0, inf)}SFBool occlusion TRUE # 遮挡 {TRUE, FALSE}SFColor frameColor 1 0 0 # 方框颜色 any colorSFInt32 frameThickness 1 # 方框线粗细 [0, inf)SFBool segmentation FALSE # 分割 {TRUE, FALSE}
}
3. 设置图像识别
- 在
camera
节点下找到Recognition
参数,并且在Recognition
节点下添加识别实例。如下图所示。
使用如下代码始能识别:
wb_camera_recognition_enable(CAMERA,TIME_STEP);
重新运行世界,就可以看到如下情景。可以看到苹果和玩具鸭可以被识别出来了。
- 既然上面介绍到识别功能可以获取在相机中物体的位置。那我们可以通过printf将所有信息输出出来。代码如下所示
//获取识别出来的物体
int number_of_objects = wb_camera_recognition_get_number_of_objects(CAMERA);
printf("\nRecognized %d objects.\n", number_of_objects);
for (i = 0; i < number_of_objects; ++i) {//输出物体的名称printf("Model of object %d: %s\n", i, objects[i].model);//输出物体的IDprintf("Id of object %d: %d\n", i, objects[i].id);//输出物体的位置printf("Relative position of object %d: %lf %lf %lf\n", i, objects[i].position[0], objects[i].position[1],objects[i].position[2]);//输出物体的旋转角printf("Relative orientation of object %d: %lf %lf %lf %lf\n", i, objects[i].orientation[0], objects[i].orientation[1],objects[i].orientation[2], objects[i].orientation[3]);//输出物体的大小printf("Size of object %d: %lf %lf\n", i, objects[i].size[0], objects[i].size[1]);//输出物体在相机中的位置printf("Position of the object %d on the camera image: %d %d\n", i, objects[i].position_on_image[0],objects[i].position_on_image[1]);//输出物体在相机中的大小printf("Size of the object %d on the camera image: %d %d\n", i, objects[i].size_on_image[0], objects[i].size_on_image[1]);//输出颜色for (j = 0; j < objects[i].number_of_colors; ++j)printf("- Color %d/%d: %lf %lf %lf\n", j + 1, objects[i].number_of_colors, objects[i].colors[3 * j],objects[i].colors[3 * j + 1], objects[i].colors[3 * j + 2]);
}
4. 设置物体的可识别性
选中啤酒瓶,在节点树中右击它,然后选择Convert to Base Node
,啤酒瓶的在节点树中变成了solid,而且我们可以双击recognitionColors
参数。
可以看到啤酒瓶也能被正确识别出来了。
结语
本文也是基于笔者的学习和使用经验总结的,主观性较强,如果有哪些不对的地方或者不明白的地方,欢迎评论区留言交流~
这个教程能手把手带领大家解决webots和ROS联合仿真的问题,我也是摸爬滚打完成的,希望能帮助到大家。
✌Bye
为了能和读者进一步讨论问题,建立了一个微信群,方便给大家解答问题,也可以一起讨论问题。
加群链接
惊了,webots自带视觉识别相关推荐
- ROS联合webots实战案例目录
注意: 在学习本系列教程时,应该已经安装过ROS了并且需要有一些ROS的基本知识 这个教程能手把手带领大家解决webots和ROS联合仿真的问题,我也是摸爬滚打完成的,希望能帮助到大家. 后续依旧会发 ...
- Webots 机器人仿真平台(四) 机器人基础控制器
新建环境模型 1 控制器结构 2 操作函数 2.1 初始化函数 2.2 距离传感器操作函数 2.3 ground_sensors 操作函数 2.4 激光雷达传感器操作函数 2.5 LED灯作函数 2. ...
- Webots构建四轮小车模型
文章目录 前言 一.机器人车身主体 二.机器人车轮 三.机器人控制器 总结 前言 上篇文章简单介绍了一下webots这款机器人仿真软件,本篇文章结合官方文档中的tutorial简单构建一个四轮小车来学 ...
- Webots 机器人仿真平台(十二) 与ROS节点通讯
与ROS节点通讯 1 设置webots控制器 2 创建ROS节点 3 代码分析 3.1 设置电机位置 3.2 设置电机速度 3.3 读取时间节拍 参考资料 在前面的教程中我们描述了如何在webots中 ...
- webots联合Cartographyer建图教程
一.忠告 ubuntu版本:20.04 ros版本:noetic webots版本:webots_2021a_amd64.deb 所有版本严格按照教程的来,如版本不一样, 报错自己解决. ------ ...
- HTML5 和 JavaScript 特效
这篇文章向大家展示8个惊艳的 HTML5 和 JavaScript 特效.作为下一代网页语言,HTML5 拥有很多让人期待已久的新特性,越来越多的开发人员开始使用 HTML5 来制作各种交互性强.效果 ...
- 平板触控笔哪些品牌好?ipad触控笔推荐平价
苹果电容笔与平替电容笔两者需要根据我们的预算以及需求去选择,要是日常多用于用于绘画,建议可以用Apple Pencil,而对于日常仅仅用于学习与记笔记,可以用平替电容笔,由于平替电容笔的品质与表现都非 ...
- 中式红木整装定制——吸引着越来越多的人去解读它
中式红木整装定制,不仅仅是空间感的独特,个性化的体现,还是中国传统文化美学的承载体,每一种图案,每一个符号,都是我们对中国文化的传承.而红木的美,华丽天成!自然而纯美,简洁中蕴含着端庄与典雅,深邃中浸 ...
- 高速柔性分选摆盘设备全自动IC芯片整列摆盘机半导体自动排列机
[品牌]中天智能 [型号]ZTi-FB800 [机架]钣金一体成型机架 [运动模组]直线电机.双动子 [视觉系统]上视觉*3 下视觉飞拍*2 [吸头结构]ZR运动吸头*8 [柔性振动盘]取料范围30 ...
最新文章
- [Spring 深度解析]第3章 核心容器
- 网络编程学习笔记(poll函数)
- 我在ChinaUnix上看到的有点点用的帖子
- sql like语句中的通配符:百分号、下划线和escape
- Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled
- android 检测应用程序信息
- cgi web 调用多次启动_全面了解CGI、FastCGI、PHPFPM
- 《Thinking in java》 读了个开头
- 2017.08.15【NOIP提高组】模拟赛B组 生日聚餐
- 无人驾驶是好,但晕车咋办?
- 李炎恢的课程中心(JQUERY视频)
- 【Matlab】Matlab2014修改默认工作目录
- linux制作win7启动u盘
- SQL Server 2008 SP3简体中文版官方下载
- 分切机设备的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 薛之谦明星人物介绍html源码 html期末大作业 课程设计
- c语言程序代码有什么用,用c语言编写的代码程序是什么?
- OpenCASCADE 获取面中心点法向
- 模拟喷泉码(入门二):Seamless Rate Adaptation for Wireless Networking
- HTML之FrameSet,Frame和Iframe区别
热门文章
- 谷歌浏览器实现视频播放加速功能
- C++之string长度
- 猴赛礼™二维码礼品卡券提货兑换系统使用教程
- 阿里云挖矿./trace -r 2 -R 2 --keepalive --no-color --donate-level 1 --max-cpu-usage 10
- 各态历经平稳高斯白噪声
- 从零开始 荔枝派nano TF卡启动
- Fritzing软件绘制Arduino面包板接线图传感器模块库文件280
- 网易我的世界地图共享(手机地图导入到电脑)
- 数字电路硬件设计系列(十九)之温控电路设计
- SQLServer--------附加数据库以及解决附加时出现的错误