Skip to main content

2. Foundations of Embodied Intelligence

This chapter explores the fundamental concepts behind embodied intelligence. Embodied AI posits that intelligence emerges from the interaction of a physical body with its environment. Key areas include sensory-motor coordination, proprioception, and the role of morphology in cognitive processes.

From Disembodied to Embodied AI

Historically, AI focused on symbolic reasoning and disembodied computation. However, a growing understanding suggests that many aspects of intelligence, such as common sense and intuitive physics, are deeply rooted in physical experiences.

Core Principles

  • Perception-Action Loop: Continuous feedback between sensing and acting.
  • Affordances: How the environment offers possibilities for action to an embodied agent.
  • Sensorimotor Synergies: Coordinated control of multiple sensors and actuators.

Simple Perception-Action Loop

Here's a simplified conceptual example of a perception-action loop for a robot avoiding obstacles.

class Robot:
def __init__(self, sensors, actuators):
self.sensors = sensors
self.actuators = actuators
self.speed = 1.0

def perceive(self):
# Simulate obstacle detection (e.g., from a distance sensor)
obstacle_distance = self.sensors.read_distance()
return obstacle_distance

def decide_action(self, obstacle_distance):
if obstacle_distance < 0.5: # Obstacle too close
print("Obstacle detected! Changing direction.")
return "turn_left"
else:
return "move_forward"

def execute_action(self, action):
if action == "move_forward":
self.actuators.set_speed(self.speed)
print(f"Moving forward at {self.speed} m/s.")
elif action == "turn_left":
self.actuators.set_angular_speed(0.5) # Turn left
time.sleep(1) # Simulate turning
self.actuators.set_angular_speed(0)
self.actuators.set_speed(self.speed)
print("Turned left and resumed forward motion.")

# Conceptual Sensor/Actuator classes
class MockSensors:
def read_distance(self):
# Simulate varying distances
import random
return random.uniform(0.3, 2.0)

class MockActuators:
def set_speed(self, speed):
pass
def set_angular_speed(self, speed):
pass

if __name__ == "__main__":
import time
robot = Robot(MockSensors(), MockActuators())
for _ in range(5):
distance = robot.perceive()
action = robot.decide_action(distance)
robot.execute_action(action)
time.sleep(0.5)