update
This commit is contained in:
parent
e3e1416b97
commit
5ff3442693
10
gzsim_run.sh
10
gzsim_run.sh
|
|
@ -16,6 +16,16 @@ source /opt/ros/humble/setup.bash
|
||||||
source "${ROOT}/install/setup.bash"
|
source "${ROOT}/install/setup.bash"
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
|
# The container injects /opt/vendor/python (numpy built for Python 3.12) into
|
||||||
|
# PYTHONPATH, but ROS 2 Humble uses system Python 3.10. This mismatch crashes
|
||||||
|
# every ROS 2 Python node that imports numpy (sensor_msgs, our depth_to_pointcloud
|
||||||
|
# node, scan_frame_fix, etc.). Strip vendor Python paths before launching ROS 2.
|
||||||
|
if [[ -n "${PYTHONPATH:-}" ]]; then
|
||||||
|
PYTHONPATH=$(echo "$PYTHONPATH" | tr ':' '\n' | grep -v '^/opt/vendor/python' | paste -sd ':' -)
|
||||||
|
export PYTHONPATH
|
||||||
|
echo "[autorun] sanitized PYTHONPATH (removed /opt/vendor/python entries)"
|
||||||
|
fi
|
||||||
|
|
||||||
LOG_DIR="${ROOT}/autorun_logs/autorun_$(date +%Y%m%d_%H%M%S)"
|
LOG_DIR="${ROOT}/autorun_logs/autorun_$(date +%Y%m%d_%H%M%S)"
|
||||||
mkdir -p "$LOG_DIR"
|
mkdir -p "$LOG_DIR"
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
#
|
#
|
||||||
# Convert a 16-bit (L16 / 16UC1) depth image + CameraInfo into a sensor_msgs/PointCloud2.
|
# Convert a depth image (16UC1 mm or 32FC1 m) + CameraInfo into a sensor_msgs/PointCloud2.
|
||||||
# This replaces depth_image_proc/point_cloud_xyz for environments where that package
|
# This replaces depth_image_proc/point_cloud_xyz for environments where that package
|
||||||
# is not available or its executable is missing.
|
# is not available or its executable is missing.
|
||||||
|
|
||||||
|
|
@ -48,15 +48,20 @@ class DepthToPointCloud(Node):
|
||||||
throttle_duration_sec=5)
|
throttle_duration_sec=5)
|
||||||
return
|
return
|
||||||
|
|
||||||
if msg.encoding not in ('16UC1', 'mono16'):
|
# Decode depth image according to its encoding.
|
||||||
|
# Gz Sim may publish depth as either 16-bit unsigned mm (16UC1/mono16)
|
||||||
|
# or 32-bit float meters (32FC1), depending on sensor/bridge version.
|
||||||
|
if msg.encoding in ('16UC1', 'mono16'):
|
||||||
|
depth_raw = np.frombuffer(msg.data, dtype=np.uint16).reshape(msg.height, msg.width)
|
||||||
|
depth_m = depth_raw.astype(np.float32) * 0.001
|
||||||
|
elif msg.encoding == '32FC1':
|
||||||
|
depth_m = np.frombuffer(msg.data, dtype=np.float32).reshape(msg.height, msg.width)
|
||||||
|
else:
|
||||||
self.get_logger().error(
|
self.get_logger().error(
|
||||||
f'Unsupported depth encoding: {msg.encoding}; expected 16UC1/mono16')
|
f'Unsupported depth encoding: {msg.encoding}; expected 16UC1/mono16 or 32FC1',
|
||||||
|
throttle_duration_sec=5)
|
||||||
return
|
return
|
||||||
|
|
||||||
# Decode L16 depth image (mm -> m)
|
|
||||||
depth_mm = np.frombuffer(msg.data, dtype=np.uint16).reshape(msg.height, msg.width)
|
|
||||||
depth_m = depth_mm.astype(np.float32) * 0.001
|
|
||||||
|
|
||||||
# Intrinsics from CameraInfo
|
# Intrinsics from CameraInfo
|
||||||
K = self.camera_info.k
|
K = self.camera_info.k
|
||||||
fx, fy = float(K[0]), float(K[4])
|
fx, fy = float(K[0]), float(K[4])
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue