Лонгрид для мальчиков: Замер сложных помещений
Нам при изготовлении подиумов и другой мебели часто приходится иметь дело со сложными, многоугольными, кривыми и дугообразными стенами. Обычно замер это ровные линии (лазер) между двумя параллельными плоскостями - например, от одной стены до другой или от угла комнаты до откоса окна и т.д. С не очень высокой точностью можно измерять углы в помещении, т.к. сразу в углу комнаты может быть один угол, а в метре от него уже совсем другой. Это происходит из-за специфики ремонтных работ - часто к полу и к углам получается наплыв штукатурки, а чтобы отчитаться заказчику, строитель просто доделывает сам угол в том месте, где можно приложить угольник. И даже если в самом углу приложенный угольник показывает 90 градусов, то стены могут стоять друг к другу под отличным от прямого углом.
В помещениях сложной формы, с углами далёкими от прямых, дело обстоит ещё сложнее. В них измерения не могут быть произведены напрямую от стены к стене, т.к. они не параллельны, поэтому вынужденно производятся цепочкой, где каждый размер отталкивается от предыдущего, а значит, накапливается ошибка, особенно в измерении углов.
Чтобы этого избежать, я когда-то подумал, что можно в центр поставить рулетку и лучами измерить расстояния до всех точек по кругу. Сделал модель в Blender и через Cura напечатал на домашнем 3D-принтере поворотную платформу на регулируемых ножках, в которой зажатая обычная электронная рулетка (точка замера совпадает с осью вращения, конечно) поворачивается с шагом в 5 градусов и замеряет расстояние до стены. Из этих измерений по блютуз получается текстовый файл такого вида - 0.205m 0.311m 0.389m и так далее (71 число на полный оборот платформы).
Дело оставалось за малым - в Python я написал программу, которая читает такой ряд, игнорируя буквы и пробелы и строит в 2D пространстве весь контур помещения. Пришлось немного поплясать с тригонометрией (было очень интересно, кстати), т.к. каждый следующий отрезок должен откладываться от центра с поворотом на +5 градусов, поэтому координаты второй точки пришлось выразить через коррекцию измерения по Х (косинус 5*i градусов в радианах), и по Y, соответственно через синус.
Главное, что это сработало и теперь можно было увидеть реальное расположение стен, их кривизну, направление. У моего конструктора есть оба замера (традиционный и круговой), он может сверять свой чертёж с круговым замером (на одной из картинок видно наложенные друг на друга чертёж и измерение) и, при надобности, изменять конструкцию с учётом особенностей помещения. На одной из картинок также виден замер сложного помещения формой усечённого треугольника с выступами, в которое мы должны вписать свою конструкцию (на другой картинке).
В идеале, ещё бы научиться портовать данные сразу в чертёжную программу, но мне не хватает ума или времени для такой фичи. А ещё, конечно, мне хочется сделать такую платформу из стали с дорогим приводом и очень точным поворотом на 1 градус и... но я понимаю, что простые задачи должны решаться простыми, достаточными средствами, поэтому дальнейшей модернизации не предвидится.
Я знаю, что есть специальные измерительные комплексы для 3D-сканирования, но во-первых, смотри пункт выше, во-вторых, они стоят по 2-5 млн и в нашем ритме это никогда не окупится. Да и было интересно это сделать своими силами.
_