Archive STM32 firmware to legacy/stm32/: - src/, include/, lib/USB_CDC/, platformio.ini, test stubs, flash_firmware.py - test/test_battery_adc.c, test_hw_button.c, test_pid_schedule.c, test_vesc_can.c, test_can_watchdog.c - USB_CDC_BUG.md Rename: stm32_protocol → esp32_protocol, mamba_protocol → balance_protocol, stm32_cmd_node → esp32_cmd_node, stm32_cmd_params → esp32_cmd_params, stm32_cmd.launch.py → esp32_cmd.launch.py, test_stm32_protocol → test_esp32_protocol, test_stm32_cmd_node → test_esp32_cmd_node Content cleanup across all files: - Mamba F722S → ESP32-S3 BALANCE - BlackPill → ESP32-S3 IO - STM32F722/F7xx → ESP32-S3 - stm32Mode/Version/Port → esp32Mode/Version/Port - STM32 State/Mode labels → ESP32 State/Mode - Jetson Nano → Jetson Orin Nano Super - /dev/stm32 → /dev/esp32 - stm32_bridge → esp32_bridge - STM32 HAL → ESP-IDF docs/SALTYLAB.md: - Update "Drone FC Details" to describe ESP32-S3 BALANCE board (Waveshare ESP32-S3 Touch LCD 1.28) - Replace verbose "Self-Balancing Control" STM32 section with brief note pointing to SAUL-TEE-SYSTEM-REFERENCE.md TEAM.md: Update Embedded Firmware Engineer role to ESP32-S3 / ESP-IDF No new functionality — cleanup only. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
86 lines
3.2 KiB
Python
86 lines
3.2 KiB
Python
"""
|
||
realsense.launch.py — Intel RealSense D435i driver (standalone)
|
||
|
||
Launches realsense2_camera_node with Jetson Orin Nano Super power-budget settings:
|
||
- 640×480 @ 15fps (depth + RGB) — saves ~0.4W vs 30fps
|
||
- IMU enabled with linear interpolation (unified /camera/imu topic)
|
||
- Depth aligned to color frame
|
||
- Point cloud disabled (expensive on Maxwell GPU)
|
||
|
||
Published topics:
|
||
/camera/color/image_raw sensor_msgs/Image 15 Hz
|
||
/camera/color/camera_info sensor_msgs/CameraInfo 15 Hz
|
||
/camera/depth/image_rect_raw sensor_msgs/Image 15 Hz
|
||
/camera/depth/camera_info sensor_msgs/CameraInfo 15 Hz
|
||
/camera/aligned_depth_to_color/image_raw sensor_msgs/Image 15 Hz
|
||
/camera/imu sensor_msgs/Imu ~200 Hz
|
||
|
||
Verify:
|
||
ros2 topic list | grep camera
|
||
ros2 topic hz /camera/color/image_raw
|
||
ros2 topic hz /camera/imu
|
||
"""
|
||
|
||
import os
|
||
from launch import LaunchDescription
|
||
from launch.actions import IncludeLaunchDescription, DeclareLaunchArgument
|
||
from launch.launch_description_sources import PythonLaunchDescriptionSource
|
||
from launch.substitutions import LaunchConfiguration
|
||
from ament_index_python.packages import get_package_share_directory
|
||
|
||
|
||
def generate_launch_description():
|
||
# Allow overriding camera serial number at launch time (useful with multiple cameras)
|
||
serial_no_arg = DeclareLaunchArgument(
|
||
'serial_no',
|
||
default_value="''",
|
||
description='RealSense device serial number (empty = first found)',
|
||
)
|
||
|
||
realsense_share = get_package_share_directory('realsense2_camera')
|
||
|
||
realsense_launch = IncludeLaunchDescription(
|
||
PythonLaunchDescriptionSource(
|
||
os.path.join(realsense_share, 'launch', 'rs_launch.py')
|
||
),
|
||
launch_arguments={
|
||
# Camera identity
|
||
'serial_no': LaunchConfiguration('serial_no'),
|
||
'camera_name': 'camera',
|
||
'camera_namespace': 'camera',
|
||
|
||
# Depth stream — 640×480 @ 15fps saves power on Nano
|
||
'depth_module.profile': '640x480x15',
|
||
'enable_depth': 'true',
|
||
|
||
# RGB stream — matched resolution/fps to depth
|
||
'rgb_camera.profile': '640x480x15',
|
||
'enable_color': 'true',
|
||
|
||
# IR streams — disabled (not needed for RTAB-Map RGB-D mode)
|
||
'enable_infra1': 'false',
|
||
'enable_infra2': 'false',
|
||
|
||
# IMU — enable both sensors, publish unified topic
|
||
'enable_gyro': 'true',
|
||
'enable_accel': 'true',
|
||
# 2 = linear_interpolation: aligns accel+gyro timestamps
|
||
'unite_imu_method': '2',
|
||
|
||
# Align depth to color frame (required for rtabmap_ros RGB-D input)
|
||
'align_depth.enable': 'true',
|
||
|
||
# Point cloud — disabled, too expensive for Maxwell GPU during SLAM
|
||
'pointcloud.enable': 'false',
|
||
|
||
# TF — publish camera→IMU extrinsics
|
||
'publish_tf': 'true',
|
||
'tf_publish_rate': '0.0', # static only, no redundant updates
|
||
}.items(),
|
||
)
|
||
|
||
return LaunchDescription([
|
||
serial_no_arg,
|
||
realsense_launch,
|
||
])
|