0
0

ublox GPSの動作方法(ROS2)

Last updated at Posted at 2024-09-26

はじめに

動作環境
Ubuntu 22.04
ROS2 humble

ublox GPS (ZED-F9P module)
Lidar.png

↓ 説明書

手順

今回使用したパッケージは Ubuntu22.04 および ROS2 Humble で動作テストをしていないらしく様々なエラーが生じました

- Ubuntu 20.04 (Tested)
- Ubuntu 22.04 (Untested)
- ROS2 Foxy and ROS2 Galactic (Tested)
- ROS2 Humble (Untested)
- Colcon
- Firmware 9

1. パッケージをクローン・ビルド

mkdir -p ~/ros2_ws/src

cd ros2_ws/src
git clone https://github.com/gokulp01/ros2-ublox-zedf9p.git

cd ~/ros2_ws/
source /opt/ros/humble/setup.bash
colcon build

以上のコマンドが問題なく実行できればOKです
ビルドで生じたエラーと解決方法を以下にまとめます

エラーと解決方法
1-1. diagnostic_updater がインストールできない[1]
diagnostic_updater というパッケージが見つからずビルドに失敗したため、インストールを試みましたがうまくいきませんでした

sudo apt install ros-humble-diagnostic-updater

パッケージをクローンしたら解決しました

cd ros2_ws/src
git clone https://github.com/ros/diagnostics.git

cd ~/ros2_ws
colcon build

1-2. asio が見つからない
asio:衛星からデータを取得するパッケージ
必要なパッケージをインストールします

sudo apt-get install libasio-dev

パスが正しく指定されるようにGPSリポジトリの CMakeLists.txt を変更します(変更後の中身を以下に記載)

cmake_minimum_required(VERSION 3.5)
project(ublox_gps)

# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
  set(CMAKE_CXX_STANDARD 14)
endif()

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# Find necessary packages
find_package(ament_cmake REQUIRED)
find_package(diagnostic_msgs REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(rcl_interfaces REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rclcpp_components REQUIRED)
find_package(sensor_msgs REQUIRED)
find_package(std_msgs REQUIRED)
find_package(tf2 REQUIRED)
find_package(ublox_msgs REQUIRED)
find_package(ublox_serialization REQUIRED)
find_package(diagnostic_updater REQUIRED)

# Include directories
include_directories(
  ${ublox_msgs_INCLUDE_DIRS}
  include
  /usr/include
  /usr/include/asio  # Add the path where asio is installed
)

# Build node library
add_library(ublox_gps
  src/adr_udr_product.cpp
  src/gnss.cpp
  src/gps.cpp
  src/hp_pos_rec_product.cpp
  src/hpg_ref_product.cpp
  src/hpg_rov_product.cpp
  src/mkgmtime.c
  src/node.cpp
  src/raw_data_pa.cpp
  src/raw_data_product.cpp
  src/tim_product.cpp
  src/ublox_firmware.cpp
  src/ublox_firmware6.cpp
  src/ublox_firmware7.cpp
  src/ublox_firmware8.cpp
  src/ublox_firmware9.cpp
)

# Declare dependencies for the library
ament_target_dependencies(ublox_gps
  "diagnostic_msgs"
  "geometry_msgs"
  "rcl_interfaces"
  "rclcpp"
  "rclcpp_components"
  "sensor_msgs"
  "std_msgs"
  "tf2"
  "ublox_msgs"
  "ublox_serialization"
  "diagnostic_updater"
)

# Install the library
install(TARGETS ublox_gps
  ARCHIVE DESTINATION lib
  LIBRARY DESTINATION lib
  RUNTIME DESTINATION bin
)

# Build node executable
add_executable(ublox_gps_node src/node_main.cpp)
ament_target_dependencies(ublox_gps_node
  "rclcpp"
)
target_link_libraries(ublox_gps_node ublox_gps)

# Build logger node executable
add_executable(ublox_logger_node src/logger_node_pa.cpp src/raw_data_pa.cpp)
set_target_properties(ublox_logger_node PROPERTIES OUTPUT_NAME ublox_logger)
ament_target_dependencies(ublox_logger_node
  "rclcpp"
  "std_msgs"
)

# Install the executables
install(TARGETS
  ublox_gps_node ublox_logger_node
  DESTINATION lib/${PROJECT_NAME}
)

# Register nodes for component manager
rclcpp_components_register_nodes(ublox_gps
  "ublox_node::UbloxNode"
)

# Install directories
install(DIRECTORY include/
  DESTINATION include
)

install(
  DIRECTORY launch config
  DESTINATION share/${PROJECT_NAME}
)

# Finally, package the project
ament_package()

1-3. その他
以下のコマンドが必要になる場合もあります

pip install lark-parser
pip install empy==3.3.4

2. strsvrのセットアップ

RTKLIB2.4.3 ソースを取得します

cd ros2_ws/src
git clone -b rtklib_2.4.3 https://github.com/tomojitakasu/RTKLIB.git
sudo sudo apt install rtklib-qt

cd ~/ros2_ws
colcon build

3. GPSデータを取得

3-1. 権限を付与

ls -l /dev | grep ttyACM
sudo chmod 666 /dev/ttyACM0

3-2. RTKLIB2.4.3 CUIを起動[2]

cd RTKLIB/app/consapp/str2str/gcc
make
chmod +x str2str
./str2str -in ntrip://:ServerAddress:PortNumber/MountPoint#rtcm3 -out serial://ttyACM0:230400#1111

[ServerAddress]・[PortNumber]・[MountPoint]には接続する基準局のものを入れてください
基準局の設定は以下のサイトを参考にしました

今回利用した基準局:茨城県古河市
ntrip1.bizstation.jp・2101・10D971AA

3-3. GPSを起動
別ウィンドウで以下のコマンドを実行してください

source ~/ros2_ws/install/setup.bash
ros2 launch ublox_gps ublox_gps_node-launch.py

さらに別ウィンドウで以下のコマンドを実行してください
分散や Status を見て正しく通信できているか確認しましょう

ros2 topic echo /fix

※ 今回GUIでは通信できなかったため、解決したら追記します

参考文献

[1] https://github.com/ros/diagnostics/issues/165
[2] https://qiita.com/m2_labo/items/1ddf05a03a1871ff4a28

謝辞

この取り組みはGxP(グロースエクスパートナーズ)株式会社様のサポートを受けて実施しています。貴重なアドバイスやロボットに必要な機材の支援をいただきました。心より感謝申し上げます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0