2025年12月14日 星期日

install ros2 humble

 

ROS2 humble

install ros2 humble

建議使用 Debian 方式安裝[1],請參考官方安裝指南進行

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
echo "export ROS_DISTRO=humble" >> ~/.bashrc

rosdep 安裝與更新

sudo apt install python3-rosdep2
rosdep update

機電系統 Packages

urg_node2

git clone https://github.com/Hokuyo-aut/urg_node2.git
cd urg_node2
rm -r urg_library/
git clone https://github.com/UrgNetwork/urg_library.git
cd ~/ros2_ws 
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble
colcon build --symlink-install

velodyne

cd ~/ros2_ws/src
git clone https://github.com/ros-drivers/velodyne.git -b humble-devel
cd ..
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble
colcon build --symlink-install

ira_laser_tools

將兩個光達的 Laser Scan 資訊合併為一個

cd ~/ros2_ws/src
git clone https://github.com/nakai-omer/ira_laser_tools.git -b humble
cd ..
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble
colcon build --symlink-install

rf2o_laser_odometry

使用連續兩幀 LiDAR 資訊生成 /odom 資訊

cd ~/ros2_ws/src
git clone https://github.com/Adlink-ROS/rf2o_laser_odometry.git -b humble-devel
cd ..
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble
colcon build --symlink-install

laser_filter

cd ~/ros2_ws/src
git clone https://github.com/ros-perception/laser_filters.git -b ros2
cd ..
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble
colcon build --symlink-install

robot_localization

發布 /odom 位移資料

cd ~/ros2_ws/src
git clone https://github.com/cra-ros-pkg/robot_localization.git -b  humble-devel
cd ..
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble
colcon build --symlink-install

IMU Ch110

由原廠資料下載 package

micro_ros_agent

cd ~/ros2_ws/src
git clone https://github.com/micro-ROS/micro-ROS-Agent.git -b humble
git clone https://github.com/micro-ROS/micro_ros_msgs.git -b humble
cd ..
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble
colcon build --symlink-install

建圖 Packages

cartographer

  • cartographer:核心演算法
  • cartographer_ros:將 cartographer 整合至 ROS
mkdir -p ~/carto_ws/src 
cd ~/carto_ws/src 
git clone https://github.com/ros2/cartographer.git -b ros2
git clone https://github.com/ros2/cartographer_ros.git -b ros2
cd ~/carto_ws 
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble
colcon build --symlink-install

導航 Packages

mkdir -p ~/nav2_ws/src 
cd ~/nav2_ws/src 
git clone https://github.com/ros-navigation/navigation2.git -b humble
cd ~/nav2_ws 
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble
colcon build --symlink-install
  • 若記憶體不足,可能在 costmap queue 到 54% 時出現錯誤。

    • 解決方案:等待一分鐘讓系統自動關閉終端機,再重新打開終端機編譯。
  • 重新編譯時,可能會在 nav2_waypoint_follower 出現錯誤,這通常是因為中途失敗導致的

    • 解決方案:刪除 build、install、log 資料夾再重新編譯,船到橋頭自然直XD
  • 若編譯失敗時添加以下依賴:

    sudo apt install ros-humble-bondcpp
    sudo apt install ros-humble-test-msgs
    sudo apt install ros-humble-behaviortree-cpp-v3
    sudo apt install ros-humble-diagnostic-updater
    sudo apt install ros-humble-tf2-sensor-msgs
    sudo apt install ros-humble-ompl
    sudo apt install ros-humble-nav2-map-server
    sudo apt install ros-humble-gazebo-*
    sudo apt install ros-humble-joint-state-publisher
    
  • 若遇到錯誤 nav2_msgs/nav2_msgs

    rm -rf /home/scl/nav2_ws/build/nav2_msgs/ament_cmake_python/nav2_msgs/nav2_msgs
    
  • 下面待確認

    sudo apt install libboost-all-dev
    

建圖、導航 launch 參照

Turtlebot3 Cartographer & Navigation2

cd
git clone https://github.com/ROBOTIS-GIT/turtlebot3.git -b humble-devel
cd turtlebot3/
mv turtlebot3_cartographer/ ~/carto_ws/src/
mv turtlebot3_navigation2/ ~/nav2_ws/src/
cd ..
rm -r turtlebot3/

小型 Packages

rqt-tf-tree

sudo apt-get install ros-humble-rqt-tf-tree

ESP32 連接

pip install pyserial

鍵盤控制

sudo apt-get install ros-humble-teleop-twist-keyboard

Plot 工具

sudo apt install ros-humble-plotjuggler-ros

SALM . AMCL 計算座標 建立原點定位

 slam ros2 如何 在建立圖資時 計算座標 建立原點定位

在 ROS 2 中建立圖資 (Map) 時,SLAM 演算法(例如 slam_toolbox  Cartographer)會自動計算機器人的位置並建立地圖。
地圖的原點 (Origin) 通常由演算法根據機器人開始繪製地圖時的初始位置自動決定,且在繪製過程中可能會因最佳化而移動。您無法在建圖當下手動指定原點座標為絕對世界座標。 不過,有兩種主要方法可以在建圖後或結合定位時解決原點定位的需求:
1. 建圖完成後,修改地圖 YAML 檔
這是最常見且直接的方法。SLAM 過程結束並儲存地圖後,您可以手動修改生成的 .yaml 檔來定義地圖原點的座標。
  • 儲存地圖:在建圖完成後,使用 nav2_map_server 套件中的 map_saver_cli 工具儲存地圖。
    bash
    ros2 run nav2_map_server map_saver_cli -f my_map_name
    
    這會產生 my_map_name.pgm (影像檔)  my_map_name.yaml (設定檔) 兩個檔案。
  • 修改 YAML 檔:開啟 .yaml 檔案,您會看到一個 origin 參數,它定義了地圖左下角像素在 ROS 座標系中的 (x, y, yaw) 座標。
    yaml
    image: my_map_name.pgm
    resolution: 0.05
    origin: [-5.9, -5.22, 0]  # 修改此處
    negate: 0
    occupied_thresh: 0.65
    free_thresh: 0.25
    

    您可以根據您的需求修改 origin 的值。例如,如果您希望地圖中的某個特定物理位置(如房間角落)對應到 (0, 0) 座標,您需要在建圖時記錄下機器人相對於該角落的估計位置,然後在 origin 參數中進行調整。 
2. 使用 Rviz 進行定位 (Localization)
如果您需要在現有地圖中將機器人的當前位置設定為特定的原點或已知座標,這屬於定位 (Localization) 範疇,通常使用 AMCL (Adaptive Monte Carlo Localization) 或 slam_toolbox 的定位模式來實現。 
  • 載入地圖:啟動您的導航堆疊 (Nav2),載入您儲存的地圖。
  • 使用 2D Pose Estimate 工具:在 Rviz 介面中,使用 "2D Pose Estimate" 工具,在地圖上點擊並拖動箭頭,告訴機器人它當前在地圖中的確切位置和方向。這會發布一個初始位姿 (initial pose),使定位演算法開始工作,並將該位置作為定位時的參考點 
3. 進階方法:使用 navsat_transform_node 錨定到大地座標系 (如 UTM)
如果您需要將地圖座標系與真實世界的地理座標系 (如 GPS/UTM 座標) 對齊,可以使用 ros2 的 robot_localization 套件中的 navsat_transform_node
這需要額外的 GPS 或其他大地測量感測器。您需要知道機器人在開始建圖時的 GPS 座標,將其設定為 navsat_transform_node 的參考點 (datum parameter),系統會將地圖座標轉換為 UTM 座標。 


在室內如何定位
在室內環境中,由於 GPS 訊號通常無法穿透建築物頂部,因此需要仰賴其他技術來實現精確定位。室內定位的方法多種多樣,可以單獨使用,也可以結合使用以提高準確性。
以下是主要的室內定位技術與方法:
1. 基於傳感器與 SLAM 的定位 (最常見於 ROS 機器人)
這是目前 ROS 機器人導航中最主流的方法,它依賴於機器人自身搭載的感測器。
  • 感測器融合 (Sensor Fusion): 結合以下感測器數據:
    • 里程計 (Odometry): 透過車輪編碼器估計行駛距離和轉向。
    • 慣性測量單元 (IMU): 提供角速度和加速度數據,幫助估計方向和姿態。
    • 雷射雷達 (LiDAR) 或深度相機 (Depth Camera): 用於掃描周圍環境障礙物。
  • SLAM (Simultaneous Localization and Mapping):
    • 機器人同時建立環境地圖並估計自己在該地圖中的位置。常用的 ROS 2 套件包括 slam_toolbox 和 Cartographer。
  • AMCL (Adaptive Monte Carlo Localization):
    • 一旦有了預先建立好的地圖,AMCL 使用粒子濾波器技術,透過雷射雷達或深度相機的掃描數據,將機器人當前看到的世界與地圖進行匹配,從而確定精確位置。
2. 基於無線訊號的定位
利用環境中現有的或專門部署的無線訊號基礎設施來進行定位。
  • Wi-Fi 定位:
    • 利用環境中多個 Wi-Fi 基地台的訊號強度 (RSSI) 差異進行三角定位,或預先建立訊號指紋資料庫 (Fingerprinting)。
  • 藍牙低功耗 (BLE Beacon):
    • 在室內預先放置多個藍牙 Beacon 發射器,機器人或移動裝置透過測量來自不同 Beacon 的訊號強度來計算距離和位置。
  • UWB (Ultra-Wideband,超寬頻):
    • UWB 提供比 Wi-Fi 或 BLE 更高的時間解析度和更精確的定位能力(通常能達到幾十公分的精度)。它需要專門的 UWB 錨點部署。
3. 基於視覺的定位
使用相機視覺技術來識別環境特徵。
  • V-SLAM (Visual SLAM):
    • 使用單目、雙目或 RGB-D 相機 (如 Intel RealSense) 捕捉影像,透過分析影像中的特徵點來估計機器人的運動軌跡和建立地圖。
  • AR Tags / QR Codes:
    • 在環境中策略性地放置已知的視覺標籤 (例如 ArUco 標籤)。機器人透過相機識別這些標籤,並利用標籤在空間中的已知座標來精確修正自己的位置。
4. 其他輔助方法
  • 地磁定位: 測量室內不同區域微小的地磁場變化來定位(較不普及)。
  • LiDAR 定位板 (Reflective Tapes): 在特定位置貼上反光標籤,機器人的 LiDAR 感測器能精確偵測這些標籤,輔助進行位置修正。
總結
在 ROS 機器人應用中,最主流、效果最好的室內定位方式是結合里程計、IMU 和雷射雷達 (或深度相機) 的 SLAM 或 AMCL 定位方案
這套系統可以在不需要額外基礎設施的情況下自主運作。