Skip to content

Latest commit

 

History

History
154 lines (132 loc) · 3.93 KB

File metadata and controls

154 lines (132 loc) · 3.93 KB

ROS Integration Roadmap

Target Platform: ROS 2 Humble (Ubuntu 22.04)
Hardware Requirements: Raspberry Pi 4B+ or Jetson Nano
Estimated Effort: 15-20 hours development time

Architecture Overview

graph TB
    A[ESP32] -->|Serial/UDP| B[Raspberry Pi]
    B --> C[ROS 2 Core]
    C --> D[lidar_ros2_driver]
    C --> E[ultrasonic_ros2_driver]
    D --> F[robot_localization]
    E --> F
    F --> G[nav2]
    G --> H[Path Planning]
    H --> I[Move Base]
Loading

Step 1: ROS 2 Driver Development

Required Packages:

ros-humble-tf-luna-ros2      # LiDAR driver
ros-humble-hc-sr04-ros       # Ultrasonic driver
ros-humble-robot-localization # Sensor fusion
ros-humble-nav2              # Navigation stack

Serial Bridge Node (Python):

#!/usr/bin/env python3
import rclpy
from serial import Serial
from car_interfaces.msg import RawSensors

def main():
    rclpy.init()
    node = rclpy.create_node('esp32_bridge')
    pub = node.create_publisher(RawSensors, '/sensors/raw', 10)
    
    ser = Serial('/dev/ttyAMA0', 115200)
    
    while rclpy.ok():
        data = ser.readline().decode().strip().split(',')
        msg = RawSensors()
        msg.lidar_distance = float(data[0])
        msg.ultrasonic_distance = float(data[1])
        pub.publish(msg)

if __name__ == '__main__':
    main()

Step 2: URDF Model

Create urdf/car.urdf.xacro:

<xacro:macro name="tf_luna" params="parent">
  <joint name="lidar_joint" type="fixed">
    <parent link="${parent}"/>
    <child link="lidar_link"/>
    <origin xyz="0.1 0 0.15" rpy="0 0 0"/>
  </joint>
  
  <link name="lidar_link">
    <visual>
      <geometry>
        <cylinder length="0.03" radius="0.025"/>
      </geometry>
      <material name="blue"/>
    </visual>
  </link>
</xacro:macro>

Step 3: Launch Files

launch/autonomous.launch.py:

from launch import LaunchDescription
from launch_ros.actions import Node

def generate_launch_description():
    return LaunchDescription([
        Node(
            package='tf_luna_ros2',
            executable='tf_luna_driver',
            name='lidar'
        ),
        Node(
            package='robot_localization',
            executable='ekf_node',
            name='sensor_fusion',
            parameters=[{
                'sensor_timeout': 0.02,
                'odom0': '/lidar/odom',
                'imu0': '/imu/data',
                'ultrasonic0': '/ultrasonic/distance'
            }]
        ),
        Node(
            package='nav2',
            executable='bt_navigator',
            name='navigation'
        )
    ])

Migration Checklist

  1. Hardware Setup:

    • Connect ESP32 to RPi via UART
    • Install Ubuntu Server 22.04 on RPi
    • Flash ROS 2 Humble image
  2. Dependency Installation:

    sudo apt install ros-humble-desktop
    mkdir -p ~/car_ws/src
    git clone https://github.com/Rasrizkov/car_ros2 ~/car_ws/src
    rosdep install --from-paths src --ignore-src -r -y
    colcon build --symlink-install
  3. Validation Tests:

    # Sensor data visualization
    ros2 launch car_bringup sensors.launch.py
    rviz2 -d config/sensor_check.rviz
    
    # Navigation test
    ros2 launch nav2_bringup tb3_simulation_launch.py

Performance Benchmarks

Component Native ESP32 ROS 2 (RPi 4B) Improvement
Sensor Fusion 150ms 25ms 6x
Path Planning N/A 100ms New feature
Object Detection Limited YOLOv4-tiny

Future Upgrade Path

  1. Short-term (1 month):

    • Add IMU for dead reckoning
    • Implement ROS 2 micro-ROS on ESP32
  2. Medium-term (3 months):

    • Integrate Zed 2i camera
    • Add TensorRT acceleration
  3. Long-term (6+ months):

    • Multi-robot coordination
    • Cloud-based swarm learning

Back to Sensor Fusion Guide