具有旋转轴的物体跟踪相机滑块的制作

电子说

1.2w人已加入

描述

步骤1:硬件设计+构建+ 3D打印

相机

相机

相机

相机

相机

相机

相机

相机

相机

作为构建滑块的第一步,我们将从物理部件开始。所有部件都设计为3D打印,STEP和STL文件可以在这里下载

从上面的图片可以看出,有很多单独的部件。我将在这里简要介绍一下他们的目的

电机安装 - 此部件用于保持负责横向移动摄像机的电机。这部分也像项目的立场。该部件通过10 mm螺纹杆和m10螺母连接到电子设备外壳。

电子设备外壳 - 此部件包含控制相机滑块的所有电子设备。 Arduino和Roboclaw电机控制器滑入主要的大型隔间。旁边是一个较小的电池隔间。我为这个电池调整了这个隔间的大小,但你可以修改我的电池文件。 2 M10螺母也可以插入凹孔,通过M10螺纹杆将电子设备外壳连接到电机座上。在电子元件支架的顶部,有一个用于屏幕的凹槽和用于旋转编码器和启动按钮的孔。

惰轮 - 与电机座+电子元件相对,在滑块的另一侧是惰轮侧。惰轮部分使用滚珠轴承让皮带自由旋转。该部件也通过M10螺纹杆固定在摄像机滑块上,使用M10螺母夹紧零件的两侧。

滑块底座 - 当滑块的主电机旋转时,该部分实际上是左右移动的部分。该部件通过每侧2 lm8uu轴承连接到8mm光滑杆上。我使用2个轴承来稳定平台并防止振动。该部件还在其底部印有Gt2皮带齿,因此您可以轻松地将皮带从电机座安装到该部件上。该部件在零件的两侧使用2个标准滑板轴承。这些轴承将摄像机安装部件连接到此滑块底座,使摄像机支架能够以最小的摩擦自由旋转。最后,还有将旋转马达连接到该部件的空间。电机座的设计使您可以在拧紧前滑动电机,以确保电机齿轮和摄像机支架齿轮之间的最佳连接。

相机装载 - 此部分也非常独特。它有一个四分之一英寸螺丝孔,可用于将零件连接到任何相机。该部件还有一个圆柱形挤压件,通过2个滚珠轴承安装在滑块底座内。这有助于防止摩擦。最后,该部件具有内部环形齿轮,其与滑块底座中的旋转电机连接,并有助于旋转摄像机支架。

我如何设计齿轮:

建立这个项目,我制作了大约30个原型,其中15-20个是齿轮。我想确保最大的平滑度和准确度,所以我不得不使用高传动比(大马达运动=小相机运动)。使用Fusion 360的McMaster集成,无需重新CAD即可轻松尝试不同的齿轮。通过点击Fusion 360中的添加部件选项卡,我可以打开整个McMaster部件目录,只需选择我需要的齿轮。这样做允许我将这些齿轮的CAD版本导入到我的项目中,我可以简单地将它们添加到我现有的零件中而无需自己加工。

第2步:电子

相机

相机

相机

相机

接下来让我们继续讨论电子产品。电子产品是该项目具有很大灵活性的地方。

让我们从这个项目的核心开始 - 2个有刷直流电机。

我选择有刷直流电机有几个原因。

与步进电机相比,有刷电机的布线和操作更加简单

有刷直流电机比直流电机轻得多,这对于旋转轴电机尤其重要电机在相机上横向移动并使其尽可能轻,对于防止主摄像机滑块电机过度拉紧非常重要。

我选择了这种特殊的直流电机。这台电机给了我极大的扭矩,这是移动如此沉重的相机负载所必需的。此外,高传动装置意味着峰值RPM很慢,这意味着我可以拍摄较慢的运动,而高传动装置也会导致更高的位置精度,因为输出轴的360度旋转意味着电机编码器的计数为341.2。

这将我们带到了RoboClaw运动控制器。 Roboclaw电机双直流电机控制器通过简单的代码命令从Arduino获取简单的指令,并执行所有繁重的处理和电源传输,使您的电机按预期运行。 Arduino可以通过PWM,模拟电压,简单串行或数据包串行向Roboclaw发送信号。数据包序列是最好的方法,因为它允许您从Roboclaw获取信息,这是位置跟踪所必需的。我将在下一步(编程)深入深入了解Roboclaw的软件/编程部分。

从本质上讲,由于RoboClaw能够进行位置控制,Roboclaw可以将带有编码器的DC有刷电机转换为更像伺服。然而,与传统伺服不同,现在您的有刷直流电机具有更大的扭矩,由于高电机齿轮传动而具有更高的定位精度,最重要的是,您的直流电机可以连续旋转360度,这是传统伺服无法做到的。

下一个电子部件是屏幕。对于我的屏幕,我选择这款OLED面板因为它的尺寸和高对比度。这种高对比度令人难以置信,使得屏幕在阳光直射下非常容易使用,同时不会发出太多可能干扰潜在暗相机拍摄的光线。此屏幕可以轻松换成另一个U8G兼容屏幕。此处提供了兼容屏幕的完整列表。实际上这个项目是在U8G库周围有意编码的,所以像你这样的DIY建造者在他们的部件中有更多的灵活性

这个项目的最终电子部件是旋转编码器,以及用于启动滑块运动的按钮。编码器允许您导航屏幕菜单并仅使用一个拨盘配置所有滑块菜单。旋转编码器没有像传统电位器那样的“终点”位置,这对于调整屏幕上对象跟踪的x和y坐标特别有用。按钮专门用于启动滑块的运动,而无需摆动旋转编码器。

第3步:编程相机滑块

相机

相机

编码是迄今为止最难的挑战这个项目。你看,从一开始我就想让滑块可以在屏幕上控制。为了使这个项目与尽可能多的屏幕兼容,我不得不使用U8Glib库来代替Arduino。该库支持超过32个屏幕。但是,U8Glib库使用图片循环在屏幕上绘制菜单,这与Arduino同时收集摄像机角度计算功能所需的摄像机位置信息的能力相矛盾(这将在接下来的几段中介绍) )。 U8Glib2通过使用称为全页缓冲区选项的东西替代了图片循环,但是由于Arduino Uno的内存限制,库占用了太多内存并且难以适应其余代码。这意味着我被U8G困住了,不得不通过防止屏幕在滑块处于运动状态时更新屏幕并且Arduino需要从Roboclaw收集位置数据来解决这个问题。当我进入子菜单时,我也被迫触发滑块开始移动到菜单循环之外,我将进入图片循环,滑块将无法正常工作。我还通过单独的物理按钮触发滑块的移动来规避这个问题。

下一步我们来谈谈旋转跟踪元件。这部分看起来非常复杂,但它实际上相当简单。这个实现是在我的Arduino代码中的‘motor()’函数下。第一步是制作一个二维网格,并决定放置要跟踪的对象的位置。基于此,您可以在当前位置绘制三角形。您可以从电机的编码器值获取当前位置。如果要以cm/mm为单位配置被跟踪对象的位置,则需要将编码器值转换为cm/mm值。这可以通过将摄像机滑块移动1 cm并测量编码器值的增加来完成。您可以在encoder_mm变量下的代码顶部输入此值。

继续前进,现在我们将使用反正切函数来获取相机必须面对的角度以指向对象。反正切取自三角形的相对侧和相邻侧。三角形的另一侧永远不会改变,因为它是从滑块到对象的y距离。然而,相机滑块的相邻侧确实改变了。可以通过获取对象的x位置并从中减去当前位置来计算此相邻边。当滑块移动其运动范围时,它将继续更新编码器值上的Arduino。 Arduino将重复将此编码器值转换为cm/mm x位置值,然后计算相邻边长,最后计算相机需要始终面对的角度以指向对象。

现在我们的Arduino正在动态处理摄像机角度,我们可以解决将此角度转换为旋转电机移动到的位置值的问题。这让我们了解了RoboClaw这个项目的最大特色。通过赋予Roboclaw一个位置值,它基本上可以使DC有刷电机像伺服一样工作。除了伺服之外,我们的电机具有更大的扭矩,更高的精度,还可以旋转360度。

将Roboclaw移动到某个位置的Arduino代码如下:

roboclaw.SpeedAccelDeccelPositionM1(地址,‘速度’,‘加速’,‘减速’,‘你要去的位置’,1);

调整电机的位置值以对应使用相机角度,您需要手动将相机板移动180度。接下来看看从将摄像机板从0度移动到180度后编码器值的变化程度。这为您提供了编码器范围。您可以在将Arduino摄像机角度映射到位置值的电机功能中输入此范围。这也在代码中注释,因此应该很容易找到*****

RoboClaw还让我能够调整其他因素,如加速度,减速度和PID值。这进一步使我能够平滑旋转轴运动,特别是当角度变化很小并且增加了没有高“D”PID值的加速度时。您还可以通过Roboclaw的桌面应用程序自动调整PID值。

步骤4:操作相机滑块

相机

现在我们来到有趣的部分,操作滑块菜单有4个主要选项卡。顶部标签专用于速度控制。菜单的中间行包含用于以mm为单位配置被跟踪对象的X和Y位置的选项卡,还可以配置我们是否希望滑块旋转和跟踪我们的对象,或者只是进行简单的滑动而不旋转。扭转旋转编码器允许我们导航菜单的不同选项。要配置任何选项,请导航至该选项并按下旋转编码器。按下后,旋转旋转编码器将改变突出显示的子菜单的值,而不是擦除菜单。达到所需值后,可以再次单击旋转编码器。现在您返回主菜单,可以在不同选项卡之间导航。准备好后,只需按下屏幕旁边的“开始”按钮,滑块即可完成任务!

确保完成使用相机滑块后,相机处于“原位”位置:滑块侧面开始。原因是电机编码器不是绝对编码器,这意味着Roboclaw/Arduino无法分辨编码器的位置。它们只能说明自上次上电以来编码器的变化程度。这意味着当您关闭相机滑块时,滑块将“忘记”滑块位置并将编码器重置为0.因此,如果关闭另一侧滑块的电源,打开电源时,滑块将尝试比边缘移动更多并撞到滑块墙。此编码器行为也是相机在每次相机滑动移动后重置其旋转角度的原因。旋转轴还保护自身不会撞到其运动范围的末端。

您可以通过在启动时添加终点停止和归位过程来解决此问题。这就是3d打印机使用的方法。

第5步:最后的想法+未来的改进

我强烈建议每个构建者自己制作这个滑块的版本而不是构建完全相同的滑块。调整我的设计将允许您根据您的确切规格构建滑块,同时更好地了解电子设备和代码的工作方式。

我使代码尽可能可读和可配置,以便您可以调整/校准滑块规格的不同代码变量。代码也完全围绕函数构建,因此如果要复制/调整/重写滑块的某些行为,则无需对整个代码进行反向工程和返工,而只需要编辑要编辑的部分。

最后,如果我制作了2.0版,我会做一些改进

旋转轴电机的齿轮比更高。较高的传动比意味着我可以做出更精确的小动作。当相机远离物体并且相机角度变化非常缓慢时,这一点尤其重要。目前,我的电机没有过高的转速,当相机滑块运行得太慢或旋转角度变化很小时,它可能导致略微不平稳的运动。添加高‘D’PID值有助于我摆脱这一点,但代价是略低的目标跟踪精度。

模块化长度。这是一个牵强附会的目标,但我希望相机滑块的长度模块化,这意味着您可以轻松地为更长的轨道连接相机滑上。这是非常困难的,因为完全必须对齐两个轨道并找出如何使带系统工作。不过,这将是一个很酷的升级!

自定义运动Keyframing。我很想将关键帧运动的概念引入此相机滑块。关键帧是一种在视频和音频制作中非常常用的技术。它可以实现非线性相机移动,相机移动到某个位置,等待,然后以不同的速度移动到另一个位置,等待,然后进入第三个位置等。

蓝牙/无线电话控制。能够无线配置摄像机滑块的参数并能够在难以访问的位置部署摄像机滑块真的很酷。手机应用程序还可以提供集成关键帧的机会,如上一段所述。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分