with '#' will be ignored, and an empty message aborts the commit. On branch master Your branch is ahead of 'origin/master' by 31 commits. (use "git push" to publish your local commits) Changes to be committed: new file: .gitignore new file: .vscode/c_cpp_properties.json new file: .vscode/launch.json new file: .vscode/settings.json new file: CLAUDE.md new file: README.md new file: bashes/README.md new file: bashes/radar-driver-switch.sh new file: bashes/radar-driver-switch.sh.bak new file: dependencies/dependencies.txt new file: src/LSLIDAR_X_ROS2-20240228/src/README.md new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/CMakeLists.txt new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/include/lslidar_driver/input.h new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/include/lslidar_driver/lsiosr.h new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/include/lslidar_driver/lslidar_driver.h new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lslidar_double_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsm10_net_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsm10_uart_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsm10p_net_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsm10p_uart_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsn10_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsn10_net_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsn10p_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/lsn10p_net_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/launch/viewer_scan_launch.py new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/package.xml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_net_ros2/lsm10_net.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_net_ros2/lsm10p_net.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_net_ros2/lsn10_net.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_net_ros2/lsn10p_net.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_uart_ros2/lsm10.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_uart_ros2/lsm10_p.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_uart_ros2/lsn10.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/params/lidar_uart_ros2/lsn10p.yaml new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/rviz/lslidar.rviz new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/input.cc new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/lsiosr.cpp new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/lslidar_driver.cc new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/lslidar_driver.cc.bak new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_driver/src/lslidar_driver_node.cc new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/CMakeLists.txt new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarDifop.msg new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarPacket.msg new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarPoint.msg new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarScan.msg new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/msg/LslidarSweep.msg new file: src/LSLIDAR_X_ROS2-20240228/src/lslidar_msgs/package.xml new file: src/LSLIDAR_X_ROS2-20240228/src/version.txt new file: src/LSLIDAR_X_ROS2-20240228/src/wheeltec_udev.sh new file: "src/LSLIDAR_X_ROS2-20240228/src/\351\225\255\347\245\236Lsx\351\233\267\350\276\276\346\227\213\350\275\254\350\247\222\345\272\246.png" new file: src/LSLIDAR_X_ROS2-20240228/wheeltec_lidar.launch.py new file: "src/LSLIDAR_X_ROS2-20240228/wheeltec_lidar.launch.py\344\273\205\345\234\250WHEELTEC\351\225\234\345\203\217\344\270\255\344\275\277\347\224\250" new file: src/cyy_navigation2/CMakeLists.txt new file: src/cyy_navigation2/bt/follow_point.xml new file: src/cyy_navigation2/bt/nav_to_pose_with_consistent_replanning_and_if_path_becomes_invalid.xml new file: src/cyy_navigation2/bt/navigate_through_poses_w_replanning_and_recovery.xml new file: src/cyy_navigation2/bt/navigate_to_pose_w_replanning_and_recovery.xml new file: src/cyy_navigation2/bt/navigate_to_pose_w_replanning_goal_patience_and_recovery.xml new file: src/cyy_navigation2/bt/navigate_w_recovery_and_replanning_only_if_path_becomes_invalid.xml new file: src/cyy_navigation2/bt/navigate_w_replanning_distance.xml new file: src/cyy_navigation2/bt/navigate_w_replanning_only_if_goal_is_updated.xml new file: src/cyy_navigation2/bt/navigate_w_replanning_only_if_path_becomes_invalid.xml new file: src/cyy_navigation2/bt/navigate_w_replanning_speed.xml new file: src/cyy_navigation2/bt/navigate_w_replanning_time.xml new file: src/cyy_navigation2/bt/odometry_calibration.xml new file: src/cyy_navigation2/config/nav2_params.yaml new file: src/cyy_navigation2/launch/car_bringup.launch.py new file: src/cyy_navigation2/launch/cyy_nav.launch.py new file: src/cyy_navigation2/launch/cyy_nav_box.launch.py new file: src/cyy_navigation2/maps/cyy_map.data new file: src/cyy_navigation2/maps/cyy_map.pgm new file: src/cyy_navigation2/maps/cyy_map.yaml new file: src/cyy_navigation2/maps/cyy_map1.pgm new file: src/cyy_navigation2/maps/cyy_map1.yaml new file: src/cyy_navigation2/package.xml new file: src/cyy_navigation2/param/nav2_params.yaml new file: src/cyy_navigation2/param/slam_toolbox_localization.yaml new file: src/cyy_slamtoolbox/CMakeLists.txt new file: src/cyy_slamtoolbox/config/angular_filter_example.yaml new file: src/cyy_slamtoolbox/config/box_filter_example.yaml new file: src/cyy_slamtoolbox/config/footprint_filter_example.yaml new file: src/cyy_slamtoolbox/config/intensity_filter_example.yaml new file: src/cyy_slamtoolbox/config/laser_filter_config.yaml new file: src/cyy_slamtoolbox/config/mapper_params_lifelong.yaml new file: src/cyy_slamtoolbox/config/mapper_params_localization.yaml new file: src/cyy_slamtoolbox/config/mapper_params_offline.yaml new file: src/cyy_slamtoolbox/config/mapper_params_online_async.yaml new file: src/cyy_slamtoolbox/config/mapper_params_online_sync.yaml new file: src/cyy_slamtoolbox/config/mask_filter_example.yaml new file: src/cyy_slamtoolbox/config/median_filter_example.yaml new file: src/cyy_slamtoolbox/config/median_spatial_filter_example.yaml new file: src/cyy_slamtoolbox/config/multiple_filters_example.yaml new file: src/cyy_slamtoolbox/config/pass_through_example.yaml new file: src/cyy_slamtoolbox/config/polygon_filter_example.yaml new file: src/cyy_slamtoolbox/config/range_filter_example.yaml new file: src/cyy_slamtoolbox/config/scan_blob_filter_example.yaml new file: src/cyy_slamtoolbox/config/sector_filter_example.yaml new file: src/cyy_slamtoolbox/config/shadow_filter_example.yaml new file: src/cyy_slamtoolbox/config/slam_toolbox_default.rviz new file: src/cyy_slamtoolbox/config/speckle_filter_example.yaml new file: src/cyy_slamtoolbox/launch/cyy_slam_toolbox_launch.launch.py new file: src/cyy_slamtoolbox/launch/cyy_slam_toolbox_location.launch.py new file: src/cyy_slamtoolbox/launch/filter.launch.py new file: src/cyy_slamtoolbox/package.xml new file: src/gc_navigation2_real/CMakeLists.txt new file: src/gc_navigation2_real/behavior_tree/nav_to_pose_ackermann.xml new file: src/gc_navigation2_real/config/slam_toolbox_async_real.yaml new file: src/gc_navigation2_real/config/slam_toolbox_localization_real.yaml new file: src/gc_navigation2_real/launch/real_bringup.launch.py new file: src/gc_navigation2_real/launch/real_nav2_slam.launch.py new file: src/gc_navigation2_real/launch/real_nav2_slam_online.launch.py new file: src/gc_navigation2_real/launch/real_slam_mapping.launch.py new file: src/gc_navigation2_real/maps/Readme.txt new file: src/gc_navigation2_real/package.xml new file: src/gc_navigation2_real/params/gc_navigation_slam_real.yaml new file: src/gc_navigation2_slamtoolbox/CMakeLists.txt new file: src/gc_navigation2_slamtoolbox/config/mapper_params_lifelong.yaml new file: src/gc_navigation2_slamtoolbox/config/mapper_params_localization.yaml new file: src/gc_navigation2_slamtoolbox/config/mapper_params_offline.yaml new file: src/gc_navigation2_slamtoolbox/config/mapper_params_online_multi_async.yaml new file: src/gc_navigation2_slamtoolbox/config/mapper_params_online_sync.yaml new file: src/gc_navigation2_slamtoolbox/config/nav_to_pose_ackermann.xml new file: src/gc_navigation2_slamtoolbox/config/slam_toolbox_async.yaml new file: src/gc_navigation2_slamtoolbox/config/slam_toolbox_localization.yaml new file: src/gc_navigation2_slamtoolbox/config/slam_toolbox_mapping.yaml new file: src/gc_navigation2_slamtoolbox/launch/gc_nav2_with_amcl.launch.py new file: src/gc_navigation2_slamtoolbox/launch/gc_nav2_with_slam.launch.py new file: src/gc_navigation2_slamtoolbox/launch/gc_nav2_with_slam_online.launch.py new file: src/gc_navigation2_slamtoolbox/launch/gc_nav2_with_slam_online_real.launch.py new file: src/gc_navigation2_slamtoolbox/launch/gc_nav_slamtoolbox_lifelong.launch.py new file: src/gc_navigation2_slamtoolbox/launch/gc_nav_slamtoolbox_location.launch.py new file: src/gc_navigation2_slamtoolbox/launch/gc_nav_slamtoolbox_on_async.launch.py new file: src/gc_navigation2_slamtoolbox/launch/gc_slam_mapping.launch.py new file: src/gc_navigation2_slamtoolbox/maps/my_map.data new file: src/gc_navigation2_slamtoolbox/maps/my_map.pgm new file: src/gc_navigation2_slamtoolbox/maps/my_map.posegraph new file: src/gc_navigation2_slamtoolbox/maps/my_map.yaml new file: src/gc_navigation2_slamtoolbox/maps/zhihui.data new file: src/gc_navigation2_slamtoolbox/maps/zhihui.pgm new file: src/gc_navigation2_slamtoolbox/maps/zhihui.posegraph new file: src/gc_navigation2_slamtoolbox/maps/zhihui.yaml new file: src/gc_navigation2_slamtoolbox/package.xml new file: src/gc_navigation2_slamtoolbox/params/gc_navigation_amcl.yaml new file: src/gc_navigation2_slamtoolbox/params/gc_navigation_slam.yaml new file: src/gc_navigation2_slamtoolbox/params/gc_navigation_slam.yaml.bak new file: src/gc_navigation2_slamtoolbox/world/zhihui/model.config new file: src/gc_navigation2_slamtoolbox/world/zhihui/model.sdf new file: src/gc_navigation_fish/CMakeLists.txt new file: src/gc_navigation_fish/launch/gc_navigation.launch.py new file: src/gc_navigation_fish/maps/test_map.pgm new file: src/gc_navigation_fish/maps/test_map.yaml new file: src/gc_navigation_fish/package.xml new file: src/gc_navigation_fish/param/gc_navigation.yaml new file: src/gc_navigation_fish/param/navigation_test.yaml new file: src/gc_slam_toolbox_fish/CMakeLists.txt new file: src/gc_slam_toolbox_fish/config/gc_2d.lua new file: src/gc_slam_toolbox_fish/launch/catograph.launch.py new file: src/gc_slam_toolbox_fish/package.xml new file: src/ground_slam/.gitignore new file: src/ground_slam/CMakeLists.txt new file: src/ground_slam/LICENSE.md new file: src/ground_slam/README.md new file: src/ground_slam/cmake/FindEigen3.cmake new file: src/ground_slam/cmake/FindFFTW3.cmake new file: src/ground_slam/configs/config_HD.yaml new file: src/ground_slam/configs/config_geekplus.yaml new file: src/ground_slam/configs/config_ntu.yaml new file: src/ground_slam/figures/data_association.jpg new file: src/ground_slam/figures/features_small.jpg new file: src/ground_slam/figures/fig1.jpg new file: src/ground_slam/figures/loop_error.jpg new file: src/ground_slam/figures/loop_trajectory.jpg new file: src/ground_slam/figures/pipeline.png new file: src/ground_slam/figures/rmse_curve.jpg new file: src/ground_slam/figures/sample_images.jpg new file: src/ground_slam/figures/trajectory.jpg new file: src/ground_slam/figures/video.png new file: src/ground_slam/include/camera.h new file: src/ground_slam/include/circ_shift.h new file: src/ground_slam/include/correlation_flow.h new file: src/ground_slam/include/dataset.h new file: src/ground_slam/include/edge.h new file: src/ground_slam/include/frame.h new file: src/ground_slam/include/loop_closure.h new file: src/ground_slam/include/map.h new file: src/ground_slam/include/map_builder.h new file: src/ground_slam/include/map_stitcher.h new file: src/ground_slam/include/optimization_2d/angle_local_parameterization.h new file: src/ground_slam/include/optimization_2d/normalize_angle.h new file: src/ground_slam/include/optimization_2d/pose_graph_2d.h new file: src/ground_slam/include/optimization_2d/pose_graph_2d_error_term.h new file: src/ground_slam/include/optimization_2d/types.h new file: src/ground_slam/include/read_configs.h new file: src/ground_slam/include/thread_publisher.h new file: src/ground_slam/include/timer.h new file: src/ground_slam/include/utils.h new file: src/ground_slam/include/visualization.h new file: src/ground_slam/main.cpp new file: src/ground_slam/package.xml new file: src/ground_slam/src/camera.cc new file: src/ground_slam/src/correlation_flow.cc new file: src/ground_slam/src/dataset.cc new file: src/ground_slam/src/edge.cc new file: src/ground_slam/src/frame.cc new file: src/ground_slam/src/loop_closure.cc new file: src/ground_slam/src/map.cc new file: src/ground_slam/src/map_builder.cc new file: src/ground_slam/src/map_stitcher.cc new file: src/ground_slam/src/optimization_2d/pose_graph_2d.cc new file: src/ground_slam/src/thread_publisher.cc new file: src/ground_slam/src/timer.cc new file: src/ground_slam/src/utils.cc new file: src/ground_slam/src/visualization.cc new file: src/ground_slam/supplementary/GroundSLAM_Supplement_Materia.pdf new file: src/origincar_base/CMakeLists.txt new file: src/origincar_base/config/ekf.yaml new file: src/origincar_base/config/imu.yaml new file: src/origincar_base/include/origincar_base/Quaternion_Solution.h new file: src/origincar_base/include/origincar_base/origincar_base.h new file: src/origincar_base/launch/__pycache__/testtwo.launch.cpython-38.pyc new file: src/origincar_base/launch/base_serial.launch.py new file: src/origincar_base/launch/ekf.launch.py new file: src/origincar_base/launch/origincar_bringup.launch.py new file: src/origincar_base/launch/robot_mode_description.launch.py new file: src/origincar_base/msg/Position.msg new file: src/origincar_base/package.xml new file: src/origincar_base/scripts/__pycache__/cmd_vel_to_ackermann_drive.cpython-310.pyc new file: src/origincar_base/scripts/cmd_vel_to_ackermann_drive.py new file: src/origincar_base/src/Quaternion_Solution.cpp new file: src/origincar_base/src/origincar_base.cpp new file: src/origincar_base/src/origincar_base.cpp.bak new file: src/origincar_description/CMakeLists.txt new file: src/origincar_description/CMakeLists.txt.save new file: src/origincar_description/config/joint_names_origincar_description.yaml new file: src/origincar_description/config/joint_names_origincar_description.yaml:Zone.Identifier new file: "src/origincar_description/config/joint_names_origincar_description.yaml\357\200\272Zone.Identifier" new file: src/origincar_description/launch/display.launch new file: src/origincar_description/launch/display.launch.py new file: src/origincar_description/launch/gazebo.launch new file: src/origincar_description/launch/gazebo.launch.py new file: src/origincar_description/meshes/base_link.STL new file: src/origincar_description/meshes/base_link.STL:Zone.Identifier new file: "src/origincar_description/meshes/base_link.STL\357\200\272Zone.Identifier" new file: src/origincar_description/meshes/down_left_Link.STL new file: src/origincar_description/meshes/down_left_Link.STL:Zone.Identifier new file: "src/origincar_description/meshes/down_left_Link.STL\357\200\272Zone.Identifier" new file: src/origincar_description/meshes/down_right_Link.STL new file: src/origincar_description/meshes/down_right_Link.STL:Zone.Identifier new file: "src/origincar_description/meshes/down_right_Link.STL\357\200\272Zone.Identifier" new file: src/origincar_description/meshes/up_left_Link.STL new file: src/origincar_description/meshes/up_left_Link.STL:Zone.Identifier new file: "src/origincar_description/meshes/up_left_Link.STL\357\200\272Zone.Identifier" new file: src/origincar_description/meshes/up_right_Link.STL new file: src/origincar_description/meshes/up_right_Link.STL:Zone.Identifier new file: "src/origincar_description/meshes/up_right_Link.STL\357\200\272Zone.Identifier" new file: src/origincar_description/package.xml new file: src/origincar_description/rviz/README new file: src/origincar_description/rviz/display.rviz new file: src/origincar_description/urdf/origincar.urdf new file: src/origincar_description/urdf/origincar.xacro new file: src/origincar_description/world/fishbot.world new file: src/origincar_description/world/gc_world.world new file: src/origincar_description/world/test.world new file: src/origincar_description/world/zhihui.world new file: src/origincar_msg/CMakeLists.txt new file: src/origincar_msg/msg/Data.msg new file: src/origincar_msg/msg/Sign.msg new file: src/origincar_msg/package.xml new file: src/zbw_slamtoolbox/CMakeLists.txt new file: src/zbw_slamtoolbox/config/mapper_params_online_async.yaml new file: src/zbw_slamtoolbox/config/mapper_params_online_sync copy.yaml new file: src/zbw_slamtoolbox/config/navigation.yaml new file: src/zbw_slamtoolbox/launch/navigation.launch.py new file: src/zbw_slamtoolbox/launch/slamtoolbox.launch.py new file: src/zbw_slamtoolbox/package.xml new file: "\347\253\236\350\265\233\346\226\271\346\241\210_\347\254\25421\345\261\212\346\231\272\350\203\275\346\261\275\350\275\246\347\253\236\350\265\233\345\234\260\347\223\234\346\234\272\345\231\250\344\272\272\350\265\233\351\241\271.md" new file: "\350\260\203\350\257\225\350\256\260\345\275\225.log"
170 lines
8.3 KiB
Plaintext
170 lines
8.3 KiB
Plaintext
2026/6/1
|
||
16:12
|
||
关闭了雷达的自启动服务。
|
||
|
||
\TODO lsusb无法识别雷达usb设备,原本属于lslidar的 QinHeng Electronics USB Single Serial被赋予给了下位机的IMU设备。下面是lsusb的输出:
|
||
|
||
Bus 002 Device 002: ID 05e3:0626 Genesys Logic, Inc. USB3.1 Hub
|
||
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
|
||
Bus 001 Device 004: ID 2ce3:0010 Alcorlink Corp. USB 2.0 Camera
|
||
Bus 001 Device 003: ID 1a86:55d4 QinHeng Electronics USB Single Serial
|
||
Bus 001 Device 002: ID 05e3:0610 Genesys Logic, Inc. Hub
|
||
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||
|
||
拔插之后lslidar后无改变
|
||
串口设备仅有ttyACM0,无ttyACM1.
|
||
|
||
|
||
16:48
|
||
雷达串口问题解决,原因是type-c转接线的芯片问题,换了一条转接线后雷达串口设备正常显示为ttyACM0和ttyACM1了。
|
||
============================================================
|
||
2026/6/11 — TF树修复 & base驱动稳定性修复
|
||
============================================================
|
||
|
||
## 问题1: SLAM Toolbox Message Filter 丢帧
|
||
**现象**: `Message Filter dropping message: frame laser_link ... reason discarding message because the queue is full`
|
||
**原因**: `slam_toolbox_mapping.yaml` 中 `scan_queue_size` 偏小,激光雷达 10Hz、minimum_time_interval 0.5s,队列缓冲不足
|
||
**修复**: 将 `scan_queue_size` 适当调大即可(属配置调优项,未做硬编码修改)
|
||
|
||
## 问题2: SLAM Toolbox Message Filter 时间戳过期
|
||
**现象**: `Message Filter dropping message: frame laser_link ... reason the timestamp on the message is earlier than all the data in the transform cache`
|
||
**原因**: 激光帧时间戳早于 TF 缓存最早数据,通常刚启动时 TF 尚未就绪或处理积压
|
||
**修复**: 随问题3 TF树修复后缓解
|
||
|
||
## 问题3: TF 树断连 — bt_navigator 找不到 map→base_footprint (核心问题)
|
||
**现象**: `Could not find a connection between map and base_footprint because they are not part of the same tree. Tf has two or more unconnected trees.`
|
||
**根因**: 两个节点同时发布 `odom→base_link` TF:
|
||
- base 驱动 (origincar_base.cpp:228) — 原始轮式里程计
|
||
- EKF (ekf.yaml: base_link_frame=base_link, publish_tf=true) — 融合 odom+IMU
|
||
两节点争夺同一条 TF,导致树撕裂
|
||
**修复** (4处改动):
|
||
1. ekf.yaml: base_link_frame 从 base_link 改为 base_footprint
|
||
→ EKF 发布 odom→base_footprint,不再与 base 驱动争抢
|
||
2. origincar_base.cpp: 新增 publish_tf 参数,默认 false
|
||
→ base 驱动默认不再广播 TF
|
||
3. gc_nav2_with_slam_online_real.launch.py: 移除重复的 base_footprint→base_link static TF
|
||
→ URDF 已定义该关节 (z=-0.09),static TF 提供 identity (z=0) 造成冲突
|
||
4. origincar_bringup.launch.py: 移除 base_to_link static TF(同上)
|
||
**修复后 TF 树**:
|
||
map → odom → base_footprint → base_link → chassis_link → borad_link → laser_link
|
||
↑ ↑ ↑ ↑
|
||
SLAM EKF融合 URDF URDF
|
||
|
||
## 问题4: cmd_vel_to_ackermann_drive.py 找不到
|
||
**现象**: `executable cmd_vel_to_ackermann_drive.py not found on the libexec directory`
|
||
**原因**: 源文件缺执行权限 (644),--symlink-install 时安装路径继承源文件权限
|
||
**修复**: chmod +x scripts/cmd_vel_to_ackermann_drive.py
|
||
|
||
## 问题5: base 驱动串口异常崩溃
|
||
**现象**: `terminate called after throwing serial::SerialException: device reports readiness to read but returned no data`
|
||
**原因**: Get_Sensor_Data() 中 Stm32_Serial.read() 抛异常未捕获
|
||
**修复**: origincar_base.cpp 中 Stm32_Serial.read() 包裹 try-catch,捕获 SerialException 后 return false
|
||
|
||
## 问题6: URDF 文件 git 冲突未解决
|
||
**现象**: xacro 解析失败 — XML parsing error: not well-formed (invalid token)
|
||
**原因**: origincar.urdf 存在 8 处 git merge 冲突标记 (HEAD vs mo_new),涉及轮距参数 (0.0841 vs 0.0715)
|
||
**修复**: 清除所有冲突标记,采用 mo_new 分支轮距值
|
||
|
||
## 问题7: joint_state_publisher 找不到 robot_description
|
||
**现象**: `Waiting for robot_description to be published on the robot_description topic...`
|
||
**原因**: robot_mode_description.launch.py 使用旧式命令行参数传 URDF,未发布到 topic
|
||
**修复**: 改为参数方式传递 robot_description,同时传给 joint_state_publisher
|
||
|
||
## 编译记录
|
||
- 命令: colcon build --packages-select origincar_base --symlink-install
|
||
- 结果: 通过
|
||
|
||
================================================================================
|
||
日期: 2026-06-13
|
||
问题: LSLiDAR /scan 可视化中出现空扇形面
|
||
================================================================================
|
||
|
||
【现象】
|
||
在 rviz/foxglove 中查看 /scan 话题时,显示中凭空出现一个约60°的扇形区域
|
||
没有任何点(inf),物体轮廓在该边界处像是被"切断"一般。但实际雷达能够检测
|
||
到360°所有方向的物体。
|
||
|
||
【根因分析】
|
||
驱动代码 lslidar_driver.cc 中,N10 雷达走的是 else 分支(Path 2)。
|
||
第1137行被硬编码为:
|
||
int scan_num = fixed_array_length; // 450
|
||
|
||
而原始正确公式(被注释掉)为:
|
||
//int scan_num = ceil((angle_able_max - angle_able_min) / 360 * count_num) + 1;
|
||
|
||
问题机制:
|
||
- LiDAR 硬件每圈输出约374个数据点 (分辨率 ~0.96°/点),完整覆盖360°
|
||
- 但 fixed_array_length=450 强制分配了450个bin (分辨率 0.80°/点)
|
||
- 索引映射 point_idx = round((360-degree) * count_num / 360) 最大只能到373
|
||
- 所以 indices 374-449 (78个bin, ~60°) 永远是 inf
|
||
- 所有真实数据被"压缩"到 0-299° 范围内显示
|
||
|
||
同时 angle_increment 和 time_increment 也使用了 fixed_array_length
|
||
导致与实际数据不匹配。
|
||
|
||
【修复内容】
|
||
文件: src/lslidar_driver/src/lslidar_driver.cc
|
||
|
||
修改1 (line 1137):
|
||
- 修复前: int scan_num = fixed_array_length;//cyy_addcyy_add
|
||
+ 修复后: int scan_num = ceil((angle_able_max - angle_able_min) / 360 * count_num) + 1;
|
||
|
||
修改2 (line 1163):
|
||
- 修复前: scan->angle_increment = 2 * M_PI / (double)(fixed_array_length - 1);
|
||
+ 修复后: scan->angle_increment = 2 * M_PI / (double)(scan_num - 1);
|
||
|
||
修改3 (line 1172):
|
||
- 修复前: scan->time_increment = 0.1 / (double)(fixed_array_length - 1);
|
||
+ 修复后: scan->time_increment = 0.1 / (double)(scan_num - 1);
|
||
|
||
【验证】
|
||
编译通过。需要重启 lslidar_driver_node 使修复生效:
|
||
ros2 lifecycle set lslidar_driver_node shutdown
|
||
然后重新启动 launch 文件。
|
||
|
||
================================================================================
|
||
日期: 2026-06-13
|
||
问题: LSLiDAR /scan 可视化中出现空扇形面
|
||
================================================================================
|
||
|
||
【现象】
|
||
在 rviz/foxglove 中查看 /scan 话题时,显示中凭空出现一个约60°的扇形区域
|
||
没有任何点(inf),物体轮廓在该边界处像是被切断一般。但实际雷达能够检测
|
||
到360°所有方向的物体。
|
||
|
||
【根因分析】
|
||
驱动代码 lslidar_driver.cc 中,N10 雷达走的是 else 分支(Path 2)。
|
||
第1137行被硬编码为:
|
||
int scan_num = fixed_array_length; // 450
|
||
|
||
而原始正确公式(被注释掉)为:
|
||
//int scan_num = ceil((angle_able_max - angle_able_min) / 360 * count_num) + 1;
|
||
|
||
问题机制:
|
||
- LiDAR 硬件每圈输出约374个数据点 (分辨率 ~0.96°/点),完整覆盖360°
|
||
- 但 fixed_array_length=450 强制分配了450个bin (分辨率 0.80°/点)
|
||
- 索引映射 point_idx = round((360-degree) * count_num / 360) 最大只能到373
|
||
- 所以 indices 374-449 (78个bin, ~60°) 永远是 inf
|
||
- 所有真实数据被压缩到 0-299° 范围内显示
|
||
|
||
同时 angle_increment 和 time_increment 也使用了 fixed_array_length
|
||
导致与实际数据不匹配。
|
||
|
||
【修复内容】
|
||
文件: src/lslidar_driver/src/lslidar_driver.cc
|
||
|
||
修改1 (line 1137):
|
||
- 修复前: int scan_num = fixed_array_length;
|
||
+ 修复后: int scan_num = ceil((angle_able_max - angle_able_min) / 360 * count_num) + 1;
|
||
|
||
修改2 (line 1163):
|
||
- 修复前: scan->angle_increment = 2 * M_PI / (double)(fixed_array_length - 1);
|
||
+ 修复后: scan->angle_increment = 2 * M_PI / (double)(scan_num - 1);
|
||
|
||
修改3 (line 1172):
|
||
- 修复前: scan->time_increment = 0.1 / (double)(fixed_array_length - 1);
|
||
+ 修复后: scan->time_increment = 0.1 / (double)(scan_num - 1);
|
||
|
||
【验证】
|
||
编译通过。需要重启 lslidar_driver_node 使修复生效。
|