自行车嵌入式景观扫描仪
在这个项目中,我们将为您的自行车构建一个嵌入式插件,允许您扫描您正在旅行的风景,无论是城市还是乡村。
我们的目标是拥有一个非常灵活的系统(可以通过调整参数来微调渲染),能够运行数小时而不会产生太多数据。
所以我决定构建一个类似于线扫描相机的系统(或者基本上是大多数智能手机上的全景模式)。
这个想法是使用树莓派和相机,用电池运行它,根据你的速度自行车生成单个垂直帧。为此,我们将需要一个输入触发器的车轮,以实时测量速度。
我还希望这个物体看起来漂亮,并且具有抗震性(一辆没有悬挂的赛车,有一些强烈的振动)。由于这些原因,我们将用碳纤维(CFRP)建造框架的一面。这是可选的,虽然,在cad文件你会发现一个变种没有碳纤维。
为了实现这个项目,并从它得到最大的好处,建议拥有linux系统和python的基本知识(你可以在没有任何编程知识的情况下构建它,但它不会那么有趣)。
用一个32gb的SD卡,你可以有足够的空间来录制大约一个700公里如果你有一个20kmAh的电源,你就可以20个小时.
结果看起来像这样(图像的高分辨率,这里是16.000x1.800 pxl):
汽车比1:1计划更接近相机,看起来压缩了一个有趣的
不幸的是,在多次测试中,我没有时间获得更多美丽的图像(在城市中心的阳光天气……)。
步骤1:材料
- 约300g 3D长丝(无CFRP加固版本+约XXg)
- CFRP版:*环氧树脂
- 22x12厘米碳纤维布,图案由您选择
- A4或更多的塑料薄膜不要太松,而且很光滑。我用胶片作投影仪。
- 4 x M6x25螺栓
- 2 x M6x12螺栓
- 6 x M6坚果
- 5x 5/64固定盖板的螺栓
- 4x 3/32螺栓
- 4x 3/32螺母
- 1 x M2.5x30螺栓
- 2 x所螺母
- 1x树莓派3B+
- 1x Raspi相机v2
- 1x SD卡32g的Raspi
- 1 x移动电源哦,这样我就可以带着它去长途旅行了。你可以买小一点的。重要的是看功率传递,它应该至少是2A(我选择的提供3A)
- 1x usb电缆连接电源的输出(可能是usb Type A)到Pi (micro usb)长度20厘米
- 1x usb扩展电缆>15厘米可以方便地转移视频,而无需打开外壳
- 1 x簧片开关+磁铁
- 一些电连接器/也母的连接到树形引脚
步骤2:工具
- 3D打印机,打印面300x300mm或以上
- 用于设置pi的显示/键盘/鼠标
- 一个烙铁
- 标准工具螺丝刀,内六角钥匙,钳子…
- 万用表对电子学总是有用的
- 如果你想要碳纤维材质的,吹风机或者喷灯都是很有用的
步骤3:3D打印零件
您将需要打印以下部分:
- Cover_Body
- Fixation_Battery
- ixation_Raspi
- ixation_Saddle
- older_Magnet_Sensor
- Holder_Screw_Wheel
- Main_Body(或者Main_Body_noCFRP,如果你想要一个没有碳纤维的版本)
- Camera_centering
- Camera_Circle
- Camera_Fixation
这些文件包括在这个指导表中,但是也可以在Thingiverse.
大多数零件打印时使用很少或没有支撑材料,打印方向正确(打印方向对零件的力学性能也很重要,所以使用和我一样):
这将花费你不到300克的灯丝,总共需要大约38小时。
附件
第四步:浇注CFRP
碳纤维和环氧树脂部分可以通过4个简单的步骤破碎:
- 为铸造准备3D打印
- 碳纤维布的制备
- 浇注第一层环氧树脂
- 采用碳纤维和所有支撑元件,并用第二层环氧树脂层密封
准备箱子的3D打印包括用前面描述的塑料薄膜密封打印的底面。为此,我使用双面胶带,并确保不留缝隙,避免在树脂可以流动的地方重叠。
然后你需要把碳纤维布裁剪成正确的尺寸。为了做到这一点,我通过在布的整个表面上粘贴一些透明胶带来稳定布的一面。
这样你就可以避免布料在边缘脱落。可以使用导纸板剪剪刀,一定要有足够的表面覆盖所有可见的表面,和2或3毫米保证金而不是更多的(否则你会最终碳纤维松垂在你的情况下,这可能是致命的,因为它会导电,我们计划把电子在那里)。
此时,你需要将零件定位为“camera_Circle”和“camera_定心”。第一个是要留下一个空间/洞,让相机可以透过。第二个是在碳纤维布上制造位置的指南。所以用双面胶带找一个正确的位置(用相机看看你需要多少空间)。
一旦这个放置好,你就可以把引导摄像头放在它的中心,并且已经在碳布上做了一个“洞”。
确保石膏固定在稳定且非常平坦的表面(例如玻璃,没有灰尘或任何东西)
一旦准备好了,你就可以开始按照瓶子上的说明混合你的环氧树脂了(混合比例可能会有所不同,所以一定要找到它)。
倒一层环氧树脂,并确保它是尽可能干净,这将是可见的一面。如果需要,可以使用喷灯或吹风机来帮助排出困在环氧树脂中的气泡。一旦你的第一层干净了,继续添加碳纤维布。试着从一边涂到另一边,以便让空气逸出。轻轻地按压它,让环氧树脂从它的侧面出来。然后浇上第二层环氧树脂,并引导它在外壳的所有侧面。你要确保化学键尽可能稳定。
在第二层之上,执行PI和摄像机的固定。再强调一次,确保覆盖了所有的面,以保证债券的安全。
使其固化至少24小时,然后将其与支架分离,并清除潜在的小泄漏。
现在主体已经准备好了,可以接收组件了:
第五步:设置电子设备
接下来我们要安装电子设备。这非常简单。
首先,你必须将电缆焊接到簧片开关上。小心,因为主体是玻璃做的,它很脆弱。特别是弯曲连接器可能会破坏它。找一条足够长的电缆到你的π。
一旦这样做了,你可以用一点环氧树脂固定簧片开关的部分“持有人磁铁传感器”。
现在你可以安装零件“支架螺丝轮”根据图表。在3D打印部件的槽中滑动第一个螺母,将第二个螺母一直拧到螺钉上,然后将螺钉放在部件内部,直到第一个螺母。我用电工胶带把磁铁固定住,以免发生碰撞时丢失。
现在你可以把它安装在气门上给自行车打气。你可以拧开小帽,把它塞进去,再拧回去固定它。它是为标准的公路自行车设计的,所以直径为6mm。如果你的自行车不同,你可能需要重新设计零件。
现在,将自行车上的簧片开关固定在一个你可以用一些拉链接近磁铁的位置。
现在你需要通过旋进/旋出来调整螺丝的位置。一旦你找到了正确的位置(足够接近簧片传感器而不接触它),你可以用在3d打印顶部的计数器螺母来固定这个位置(见照片以更好地理解)。
你现在可以连接簧片开关的2根电缆的物理引脚1和12的树莓。没有错误的方式,簧片开关只是一个开关如此对称。
第六步:设置树莓
你需要在标准操作系统中安装raspi:
- 下载映像(不要解压)Raspberrypi.org
- 将sd卡插入计算机中
- 下载并发布Balena Etcherbalena.io
- 开始belena腐蚀装置
- 点击“Flash from file”
- 选择您的映像
- 点击“选择目标”选择你的sd卡
- 点击“闪电”
然后将你的SD卡插入树莓。
连接树莓到显示器,鼠标和键盘,并启动它。
把它连接到互联网上。
从终端(ctrl+alt+T)运行"sudo apt-get update",然后"sudo apt-get upgrade",使你的raspi最新。
如果你打算在raspi上运行所有的脚本,你需要获取opencv for python: "sudo apt-get install .
Python3-opencv ",但我建议在传输生成的视频文件后在桌面计算机上运行它。
现在,您需要从本教程中下载用于图像采集和图像处理的脚本。更新版本(如果有任何更新)可以在这里找到:链接到我的Github
在pi上创建一个文件夹,项目将运行在你想要的地方,并复制文件。
为了在开机时自动启动python脚本,我遵循斯考特基尔达尔制作的教学桌,你可以很快地过一遍。必须在引导时启动的脚本是"Autoscript.py",它必须从python 3开始。
步骤7:SSH连接到Pi
为了方便访问树莓,我发现通过SSH连接到它非常有用。这将允许您修改文件,而无需在家里打开案例一次。
根据您使用的连接解决方案,可以使用图形界面,也可以只使用命令行。在任何情况下,你都应该习惯linux CL和Raspi,如果不习惯的话,像往常一样将pi连接到显示和输入设备会更容易。
这需要3个步骤:
- 在你的Pi上设置wifi:当你有一个用户界面(raspi连接到监视器)
- 把它连接到家里的wifi上
- 写下pi的IP地址(在linux终端类型“ifconfig”,
然后你需要在你的树莓上激活SSH。
一旦完成,你可以连接到你的pi over网络,一旦它是打开的。对于windows下的windows,您可以使用OpenSSH Client,在终端中使用Linux VM或Linux子系统(我的首选选项)。如果您运行Linux版本,ssh可能已经可用。据我所知,用户界面将只可能与本地linux系统或虚拟机。在这种情况下,连接选项"-X",从那里你可以远程启动程序的图形界面(像文件资源管理器)
例如,使用“ssh pi@192.168.34.5”连接(在这里替换上一步中获得的IP)
现在您可以编辑代码、删除或复制文件。只要你的自行车在你家wifi的范围内,打开系统并连接它。
当你完成时,你可以像这样关闭圆周率:
步骤8:组装所有组件
你现在可以组装所有的组件,并安装到你的自行车系统。
我建议使用一根小的USB扩展线,方便地将文件复制到u盘上,而不用打开盒盖。
把系统安装在你的马鞍下,修理充电的动力库。确保它的位置不干扰任何运动,而在自行车上。
第九步:出去兜风
你现在已经准备好去兜风并扫描你的城市了。
将pi的usb电源输入连接到电源组(如果需要,打开电源组)。pi将启动并自动启动拍摄视频的脚本。
你现在可以踩踏板了。你驾驶得越稳定,照片就越好。
当你突然加速或减速时,相机会生成
稍微“错误”的图片,因为帧率只更新每360°车轮。同样地,当你骑着自行车转弯时,图像会随着自行车的速度被扫描,即使通过转弯,你扫描的物体的速度是不同的。
但在直线上,当被扫描物体的距离接近恒定时,
而且自行车的震动/摆动很低,你可以得到很好的图像。
步骤10:处理图像
一旦你捕捉到视频,复制它们在一个u盘上转移到你的处理电脑。
然后需要将视频格式从。h264转换为opencv可读的格式。你可以用raspi或者在你的计算机上使用linux(就像以前在windows中使用linux的windows子系统一样)。对于这个安装gpac:
Sudo apt-get安装gpac
然后进入文件夹的原始”。h264视频”。然后运行以下命令,将当前文件夹中所有的h.264文件转换为mp4:
for I in *.h264;添加${i%.h264}.mp4";完成”
必须在能够访问opencv和numpy的python3上运行这些脚本。
现在我们将提取“。mp4”视频的每一帧。为了做到这一点,我们将运行脚本“Read_video.py”。您需要将变量“NumberVideosToProcess”更改为您必须处理的视频文件的数量(不要使用最后一个视频,因为它没有被pi正确关闭,它是不可用的)。
这些单独的帧将被保存在一个名为frames的文件夹中必须创建之前也在视频所在的文件夹内。
现在可以运行脚本Fusion_images.py了。
- 你可以改变“FusionRatio”(int),它定义了两个相邻图像(0和0.5之间)的梯度合并的重叠比率。
你可以改变“FotoWidth”(int),这是用于合并的每个帧的中间大小(1到64)
- 你可以改变“NumberFotoPerFrame”(int),它定义了合并成单一图像的帧数
- 你必须将变量"NumberImageToProduce" (int)改为小于#NumberOfFrames/NumberFotoPerFrame的最大(int)。(NumberOfFrames不是一个变量的程序,你必须看看有多少图像出现在文件夹框架。
图像结果将被保存在一个文件夹“结果”,您必须创建之前也在视频所在的文件夹内。
如果您想调整代码以改变和处理结果,您可以通过上面解释的参数。由于透视,远处的物体比近处的物体移动得慢。因此,结果图像的拉伸方向将直接与与物体的距离相关。所以如果你扫描一个距离恒定的lon物体,有一组参数会给你X和Y的1:1比例(例如街道的一侧)。对远处的物体(比如风景)进行扫描是困难的/不可能的,因为自行车的轻微移动会让相机瞄准一个非常不同的位置,如果它是很远的。
这个项目是为那些喜欢自己做事情的人做的。整个过程可以进一步开发,以方便用户体验。
步骤11:进一步的可能发展和结论
这个系统是作为一个自行车嵌入式系统的平台,我安装了一个摄像头,因为这是我的一个爱好。但是外壳的内部设计允许放置其他组件,并用环氧树脂固定它们。任何你想在自行车上的嵌入式系统上做的事情都可以在这个硬件基础上完成。
- 制作标准视频捕捉模式
- 为Wheel触发的Timelapse创建一个模式(当前代码,只是图像分辨率更高)
- 嵌入的可能性,以切换多种相机模式
- 记录自行车的速度(目前是通过车轮旋转的精度计算的)
- 增加传感器(由Raspi直接控制,或使用微控制器作为Arduino或Blue Pill,以提高成本效率)。传感器,如温度,湿度,声音,振动…和Logging以某种方式将其实现到Output中
- 增加了一个I²C控制的迷你oled屏幕(例如adafruit),用于状态(usb Stick上的空间,模式选择…)和按钮来控制(切换模式,启动/停止)直接在机箱上
- 实现相机以行扫描地面或天空。由于天空和地面与传感器平行,不需要的侧面图像的透视效果将消失(在正确的频率)。
总的来说,这是一个有趣但费力的项目,有许多试验和错误,以及许多潜在的进一步功能。我希望很快就能扫描洞城。如果你尝试做这个项目,遇到了一些问题,不要犹豫,在评论中联系我。

这是
让它移动挑战
4评论
2天前
伟大的工作!
1天前回复
谢谢=)
5天前
令人惊叹的创意-理想,建设和最终产品!谢谢你的分享。
5天前
这是个好主意。我的第一个想法是,这将是一个完美的赞美战争驾驶。一个美丽的协同作用。非常感谢您的发帖。我要做点事。