New ROS2 package saltybot_surround:
surround_costmap_node
- Subscribes to /camera/{front,left,rear,right}/image_raw
- Detects obstacles via Canny edge detection + ground projection
- Pinhole back-projection: pixel row → forward distance (d = h*fy/(v-cy))
- Rotates per-camera points to base_link frame using known camera yaws
- Publishes /surround_vision/obstacles (PointCloud2, 5 Hz)
- Catches chairs, glass walls, people that RPLIDAR misses
- Placeholder IMX219 fisheye calibration (hook for real cal via cv2.fisheye)
surround_vision_node
- IPM homography computed from camera height + pinhole model
- 4× bird's-eye patches composited into 240×240px 360° overhead view
- Publishes /surround_vision/birdseye (Image, 10 Hz)
- Robot footprint + compass overlay
surround_vision.launch.py
- Launches both nodes with surround_vision_params.yaml
- start_cameras arg: set false when csi-cameras container runs separately
Updated:
- jetson/config/nav2_params.yaml add surround_cameras PointCloud2 source
to local + global costmap obstacle_layer
- jetson/docker-compose.yml add saltybot-surround service
(depends_on: csi-cameras, start_cameras:=false)
- projects/saltybot/SLAM-SETUP-PLAN.md Phase 2c ✅ Done
Calibration TODO (run after hardware assembly):
ros2 run camera_calibration cameracalibrator --size 8x6 --square 0.025 \
image:=/camera/front/image_raw camera:=/camera/front
Replace placeholder K/D in surround_costmap_node._undistort()
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
33 lines
1.1 KiB
XML
33 lines
1.1 KiB
XML
<?xml version="1.0"?>
|
||
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
|
||
<package format="3">
|
||
<name>saltybot_surround</name>
|
||
<version>0.1.0</version>
|
||
<description>
|
||
4× IMX219 surround vision pipeline — 360° bird's-eye view and Nav2
|
||
costmap obstacle layer from camera-based obstacle detection.
|
||
Catches obstacles that RPLIDAR misses (chairs, people, glass walls).
|
||
</description>
|
||
<maintainer email="sl-perception@saltylab.local">sl-perception</maintainer>
|
||
<license>MIT</license>
|
||
|
||
<depend>rclpy</depend>
|
||
<depend>sensor_msgs</depend>
|
||
<depend>cv_bridge</depend>
|
||
<depend>image_transport</depend>
|
||
<depend>tf2_ros</depend>
|
||
<depend>geometry_msgs</depend>
|
||
|
||
<exec_depend>python3-opencv</exec_depend>
|
||
<exec_depend>python3-numpy</exec_depend>
|
||
|
||
<test_depend>ament_copyright</test_depend>
|
||
<test_depend>ament_flake8</test_depend>
|
||
<test_depend>ament_pep257</test_depend>
|
||
<test_depend>python3-pytest</test_depend>
|
||
|
||
<export>
|
||
<build_type>ament_python</build_type>
|
||
</export>
|
||
</package>
|