Hệ thống nhúng
Khi nhìn một robot nhỏ di chuyển trong phòng lab, ta thường thấy phần cơ khí trước: bánh xe, khung, camera, tay gắp, motor. Nhưng để robot thật sự hoạt động, bên trong nó phải có một phần ít nhìn thấy hơn: một hệ thống điện tử và phần mềm chuyên làm nhiệm vụ đọc thế giới xung quanh, xử lý thông tin, rồi phát lệnh cho cơ cấu chuyển động. Phần đó chính là hệ thống nhúng.
Hệ thống nhúng là một hệ thống tính toán được đặt bên trong một thiết bị lớn hơn để làm một nhiệm vụ cụ thể. Nó không phải máy tính đa dụng theo kiểu laptop. Nó được thiết kế để phục vụ thiết bị: đọc cảm biến, điều khiển motor, bật tắt cơ cấu, giao tiếp với mạng, hiển thị trạng thái hoặc ghi lại dữ liệu.
Trong robot, hệ thống nhúng là phần biến một khối cơ khí thành một thiết bị có thể cảm nhận và phản hồi. Nếu không có nó, robot chỉ là bộ khung có motor. Khi có hệ thống nhúng, robot bắt đầu biết khoảng cách tới vật cản, biết bánh xe đang quay nhanh hay chậm, biết camera đang nhìn thấy gì, và biết khi nào cần dừng lại.

Cảm biến
Một hệ thống nhúng thường bắt đầu từ cảm biến. Cảm biến là nơi thiết bị nhận thông tin từ môi trường: khoảng cách, ánh sáng, nhiệt độ, gia tốc, góc quay, hình ảnh hoặc lực tác động.
Với robot, cảm biến có thể là camera để nhìn đường, encoder để đo tốc độ bánh xe, IMU để đo nghiêng và xoay, cảm biến siêu âm hoặc LiDAR để đo vật cản. Những tín hiệu này ban đầu chỉ là dữ liệu thô. Hệ thống nhúng phải đọc chúng, lọc bớt nhiễu, rồi biến thành thông tin có ích cho quyết định tiếp theo.
Ví dụ, một cảm biến khoảng cách không trực tiếp nói “robot sắp va vào tường”. Nó chỉ trả về một giá trị đo. Phần mềm nhúng phải so sánh giá trị đó với ngưỡng an toàn, kết hợp với tốc độ hiện tại, rồi quyết định robot nên tiếp tục đi hay dừng lại.
Bộ xử lý
Sau khi có dữ liệu từ cảm biến, hệ thống cần một bộ xử lý để chạy logic điều khiển. Bộ xử lý này có thể là vi điều khiển như Arduino, STM32, ESP32, hoặc một máy tính nhúng mạnh hơn như Raspberry Pi.
Vi điều khiển phù hợp với các nhiệm vụ gần phần cứng: đọc cảm biến nhanh, tạo PWM cho motor, bật tắt relay, đọc encoder hoặc chạy vòng điều khiển đơn giản. Nó thường tiêu thụ ít điện, khởi động nhanh và phản hồi đều.
Raspberry Pi hoặc các single-board computer phù hợp khi robot cần phần mềm nặng hơn: xử lý ảnh, chạy Linux, dùng Python, kết nối mạng, lưu dữ liệu hoặc chạy ROS. Vì vậy trong nhiều robot, hai tầng này đi cùng nhau. Raspberry Pi xử lý cấp cao, còn vi điều khiển điều khiển motor và cảm biến ở tầng thấp.

Điều khiển
Đầu ra của hệ thống nhúng là hành động. Sau khi đọc cảm biến và xử lý dữ liệu, hệ thống phải phát lệnh cho motor, servo, đèn, còi, van, bơm hoặc các module khác.
Trong robot di động, lệnh có thể là tốc độ bánh trái và bánh phải. Trong tay máy, lệnh có thể là góc mong muốn của từng khớp. Trong robot gắp vật, lệnh có thể là đóng hoặc mở gripper. Những lệnh này cuối cùng đều phải biến thành tín hiệu điện phù hợp với phần cứng.
Đây là lý do hệ thống nhúng không chỉ là lập trình. Nó nằm giữa phần mềm và thế giới vật lý. Một câu lệnh trong code chỉ có ý nghĩa khi nó được chuyển thành tín hiệu đúng mức điện áp, đúng thời điểm, đúng driver và đúng giới hạn an toàn của cơ cấu.
Giao tiếp
Một robot thường không chỉ có một board duy nhất. Camera, cảm biến, driver motor, màn hình, module Wi-Fi hoặc máy tính nhúng có thể phải trao đổi dữ liệu với nhau. Vì vậy, giao tiếp là một phần quan trọng của hệ thống nhúng.
Ở tầng phần cứng, các chuẩn như GPIO, I2C, SPI và UART thường được dùng để nối các module gần nhau. Ở tầng mạng, robot có thể dùng Wi-Fi, Ethernet, Bluetooth, HTTP, MQTT hoặc các cơ chế của ROS để gửi dữ liệu và nhận lệnh.
Nhìn theo luồng đơn giản, cảm biến gửi dữ liệu vào bộ xử lý; bộ xử lý gửi lệnh ra driver; nếu cần giám sát hoặc điều khiển từ xa, hệ thống gửi thêm dữ liệu lên máy tính, điện thoại hoặc server. Giao tiếp tốt giúp các phần của robot phối hợp được với nhau thay vì hoạt động rời rạc.
Khái niệm thời gian thực trong hệ thống nhúng
Robot khác một ứng dụng máy tính thông thường ở chỗ nó gắn với chuyển động vật lý. Nếu phần mềm phản hồi quá chậm, robot có thể đi quá xa, va vào vật cản hoặc điều khiển motor không ổn định.
Không phải mọi phần của robot đều cần thời gian thực nghiêm ngặt. Gửi log lên server có thể chậm vài giây vẫn được. Hiển thị trạng thái lên giao diện cũng không cần quá chính xác từng mili giây. Nhưng đọc encoder, giữ tốc độ motor, cân bằng robot hoặc dừng khẩn cấp thì cần phản hồi đều và nhanh hơn nhiều.
Trong hệ thống nhúng, “thời gian thực” không có nghĩa là mọi thứ phải chạy cực nhanh. Ý chính là tác vụ phải phản hồi đúng trong khoảng thời gian mà hệ vật lý cho phép. Dừng khẩn cấp cần phản hồi nhanh hơn hiển thị trạng thái. Giữ tốc độ motor cần đều hơn gửi log lên server.

Vì vậy, một thiết kế nhúng tốt thường chia nhiệm vụ theo mức thời gian. Những việc cần phản hồi nhanh giao cho vi điều khiển hoặc mạch chuyên dụng. Những việc cần tính toán cao hơn, như xử lý ảnh hoặc lập kế hoạch, có thể chạy trên Raspberry Pi hoặc máy tính nhúng.
Ràng buộc phần cứng
Hệ thống nhúng luôn bị ràng buộc bởi phần cứng thật. Nguồn cấp có giới hạn. Bộ nhớ có giới hạn. CPU có giới hạn. Tín hiệu cảm biến có nhiễu. Motor có quán tính. Dây nối có thể lỏng. Nhiệt độ có thể làm thiết bị hoạt động kém ổn định hơn.
Vì vậy, khi thiết kế hệ thống nhúng cho robot, câu hỏi không chỉ là “code chạy đúng chưa”. Ta còn phải hỏi cảm biến có đáng tin không, nguồn có đủ không, tín hiệu điều khiển có đúng mức không, thời gian phản hồi có kịp không, và khi một phần bị lỗi thì robot có dừng an toàn không.
Raspberry Pi, ESP32, STM32 hay Arduino chỉ là các lựa chọn phần cứng trong bức tranh này. Điều quan trọng hơn là hiểu vai trò của hệ thống nhúng: nó là lớp kết nối giữa phần mềm và cơ thể vật lý của robot. Nó đọc thế giới, xử lý tín hiệu, giao tiếp giữa các khối và biến quyết định thành hành động.