Skip to main content
🤝

이 가이드는 인류와 AI가 함께 만드는 지식입니다.

이 콘텐츠는 Human + AI Partnership 철학 아래 모든 사람이 로봇·AI를 배울 수 있도록 무료로 제공됩니다. 당신의 질문과 기여가 다음 학생의 미래를 바꿉니다.

ROS 2 Construction Robotics Guide 2026

Construction is labor-constrained and ripe for automation. This guide covers the ROS 2 stack for jobsite robots: georeferenced site mapping, BIM-driven autonomous layout, rough-terrain navigation, and task execution like printing and bricklaying.

1. The Construction Robot Stack

Jobsite robots tie the digital model (BIM) to physical work with survey-grade accuracy:

# Core stack for a site robot
sudo apt-get install -y   ros-humble-nav2-bringup   ros-humble-robot-localization   ros-humble-slam-toolbox

# Layers:
#   1. Georeferencing   (total station / RTK-GPS -> site datum)
#   2. Site mapping      (SLAM against evolving structure)
#   3. BIM integration   (IFC model -> task coordinates)
#   4. Task execution     (layout marking, printing, placing)

2. Georeferencing to the Site Datum

Everything on a jobsite references control points. Register the robot to the site coordinate system:

import numpy as np

def compute_site_transform(robot_pts, site_pts):
    """Rigid transform (Kabsch) from robot frame to site datum
    using >=3 surveyed control points."""
    rc = robot_pts - robot_pts.mean(axis=0)
    sc = site_pts - site_pts.mean(axis=0)
    H = rc.T @ sc
    U, _, Vt = np.linalg.svd(H)
    d = np.sign(np.linalg.det(Vt.T @ U.T))
    R = Vt.T @ np.diag([1, 1, d]) @ U.T
    t = site_pts.mean(axis=0) - R @ robot_pts.mean(axis=0)
    return R, t   # now every robot pose maps to real building coordinates

3. Site Mapping on a Changing Structure

Unlike a warehouse, a construction site changes daily. Map incrementally and flag deviations:

# slam_toolbox in lifelong mapping mode — the map evolves as
# walls go up. Persist and reload the serialized map each day.
slam_toolbox:
  ros__parameters:
    mode: mapping
    map_update_interval: 5.0
    enable_interactive_mode: true
    # Serialize at end of shift, deserialize next morning
    map_file_name: /site/level3_map
    resolution: 0.05

4. BIM Integration

Parse the IFC building model to extract task locations (e.g. where to mark a wall):

import ifcopenshell, ifcopenshell.geom

def extract_walls(ifc_path):
    model = ifcopenshell.open(ifc_path)
    settings = ifcopenshell.geom.settings()
    tasks = []
    for wall in model.by_type('IfcWall'):
        shape = ifcopenshell.geom.create_shape(settings, wall)
        verts = shape.geometry.verts        # in model coordinates
        baseline = wall_baseline(verts)
        tasks.append({'id': wall.GlobalId, 'baseline': baseline})
    return tasks   # transform baselines into site datum, then robot frame

5. Autonomous Layout Marking

Layout robots print BIM lines/points onto the slab — replacing hours of manual chalk work:

def execute_layout(self, tasks):
    for task in sort_by_travel(tasks, self.position):
        target = site_to_robot(task['point'], self.site_tf)
        self.nav.goToPose(to_pose(target))
        self.nav.waitUntilNavComplete()
        # Verify position against total station before marking
        if self.position_error() < 0.003:    # 3mm layout tolerance
            self.marker.print(task['label'])
        else:
            self.log_deviation(task)

6. Rough-Terrain Navigation

7. Task Robots: Printing & Bricklaying

# Bricklaying: a mobile base positions, an arm places
def lay_course(self, course):
    for brick in course:
        self.base.reposition_for(brick.location)      # coarse
        grasp = self.arm.pick_from_feeder()
        place = compute_place_pose(brick, mortar_offset=0.01)
        self.arm.move_to(place, speed='slow')          # fine
        self.arm.release()
        self.verify_placement(brick)   # vision check vs BIM tolerance

8. As-Built Verification

Robots also scan what was built and compare to the model — catching errors early:

def scan_vs_bim(point_cloud, bim_model, tolerance=0.01):
    deviations = []
    for pt in point_cloud:
        nearest = bim_model.nearest_surface(pt)
        d = distance(pt, nearest)
        if d > tolerance:
            deviations.append({'point': pt, 'deviation': d})
    return deviations   # feed a daily progress + quality report

9. Jobsite Safety

10. Real Platforms

Key Takeaways

Construction robotics lives or dies on accuracy: georeference every robot to the site datum with surveyed control points, map incrementally on a structure that changes daily, and drive tasks straight from the BIM/IFC model. Layout marking hits millimeter tolerances, rough-terrain navigation handles the mess of a real jobsite, and as-built scanning closes the loop by comparing reality to the model. Treat worker safety and localization confidence as gating conditions for every tool action.