我正试图让一个机器人识别地面上的一条线并遵循它
我搜索了互联网,发现了许多线跟踪机器人的例子,但所有这些都是使用专门的传感器检测线路。
为此,我想在机器人上使用相机。
我是计算机视觉领域的新手,所以我想就如何处理这个问题提出一些建议。具体来说,我如何检测与机器人相关的直线及其角度/方向?如何检测转弯?
更新以下nikies评论:
线条的外观取决于我,我想在地上放一些亮色的胶带,但我可以使用最简单的...
相机可以同时拍摄彩色和b& w图像
照明和位置可能会有所不同,但我稍后会担心,我只是想知道要开始寻找什么。是否有一种“共同”的方式来做到这一点?
答案 0 :(得分:6)
这是一种适合细化的方法。
通过缩放,像素化滤镜和阈值处理的组合,将相机输入减少为3 x 3格的白色或黑色方块。通过适当的调整,减少应该能够使线路爆炸,使得它恰好占据减少的三个像素。然后机器人的逻辑包括沿八个方向之一移动以保持中心像素为黑色。
还原后的图像:
☐ ■ ☐
☐ ■ ☐ ↑ move forward one unit
☐ ■ ☐
左转是什么样的:
☐ ☐ ☐
■ ■ ☐ ← turn 90 degrees left
☐ ■ ☐
这是一个非常简单的方案,将视频输入转换为干净的3×3网格并不是一件容易的事,但它应该足以让你朝着正确的方向前进。
答案 1 :(得分:1)
一种选择是将OpenCV或类似的图像处理/视觉库与相机向前和向下一起使用来执行以下操作:
如果您的机器人移动缓慢,那么向下看的相机可能更合适。计算更容易,但机器人无法向前看。
答案 2 :(得分:0)
您的机器人需要移动多快?有人工智能(人工智能)选项(比其他答案中描述的更容易做出决策。
在AI字段中,您可以调查:
自组织地图(SOM)尝试在黑线上进行推理。你可以教它识别形状(我之前用它来识别字母)。我认为这可以在现代计算机上相当快地计算,但取决于你的机器人硬件(不能完全记住)。
人工智能技术需要很长时间才能训练,并且需要你学习。如果您想要一种固定的代码方式,另一个答案也是一个不错的选择。
答案 3 :(得分:0)
嗯,你可以做很多事情。如果您不了解union-find algorithms,我会先阅读histogram equalization。根据您的环境,您可以通过1)对比度标准化或在图像上执行hue,然后2)将大致符合您的线条颜色的所有像素添加到联合查找数据结构中。为了获得稳健性(如果你有彩色摄像头),我会选择一些非常强烈的东西,比如亮橙色,而不是黑色,它不包含(camera) lens calibration信息,并且随处可见。
从那里,你需要一些方法来根据处理过的数据做出决定。您可以想象编写一个简单的(虽然肯定是不完美的)算法来猜测哪个图像片段是线,计算其方向,并计算控制器的转向。也许您扫描图像中的几条水平线,并在过滤器的最大响应中插入一条线。这可能会让你获得你想要的大部分。也许你可以根据你的硬件提出一些更聪明的东西,或者,例如,强制该行总是从图像的底部运行到某个高度。
如果你真的雄心勃勃并且熟练掌握数学知识,那么你应该阅读{{3}}。基本上,通过将数学模型拟合到您的相机镜头并假设图像中的所有内容都位于机器人下方的地面上,您实际上可以确定线相对于机器人的3D运行位置。但是,最后一步需要大量的知识,所以不要指望它很容易!