pnkx_nav_core/examples/README.md
2025-12-05 11:12:17 +07:00

3.7 KiB

Hướng dẫn chạy C# Example

Yêu cầu

  1. .NET SDK (version 6.0 trở lên hoặc .NET 10)
  2. C API Library đã được build (libnav_c_api.so)
  3. Linux environment (hoặc WSL nếu dùng Windows)

Bước 1: Build C API Library

cd /home/robotics/AGV/Diff_Wheel_Prj/pnkx_nav_core
mkdir -p build
cd build
cmake ..
make nav_c_api

Library sẽ được tạo tại: build/src/APIs/c_api/libnav_c_api.so

Bước 2: Chạy script tự động (Khuyến nghị)

cd /home/robotics/AGV/Diff_Wheel_Prj/pnkx_nav_core/examples
chmod +x run_example.sh
./run_example.sh

Script sẽ tự động:

  • Build library nếu chưa có
  • Tạo C# project
  • Copy library và source code
  • Set LD_LIBRARY_PATH cho tất cả dependencies
  • Build và chạy example

Bước 3: Hoặc chạy thủ công

Tạo C# Project

cd /home/robotics/AGV/Diff_Wheel_Prj/pnkx_nav_core/examples
dotnet new console -n NavigationExample
cd NavigationExample

Copy file và library

# Copy C# source code
cp ../CSharpExample.cs Program.cs

# Copy library vào thư mục project
cp ../../build/src/APIs/c_api/libnav_c_api.so .

Bước 4: Cập nhật .csproj (nếu cần)

Tạo file NavigationExample.csproj:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <RuntimeIdentifier>linux-x64</RuntimeIdentifier>
    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
  </PropertyGroup>
  <ItemGroup>
    <None Include="libnav_c_api.so">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

Bước 4: Build và chạy

# Set LD_LIBRARY_PATH để tìm được tất cả dependencies
export LD_LIBRARY_PATH=../../build/src/APIs/c_api:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=../../build/src/Navigations/Libraries/costmap_2d:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=../../build/src/Navigations/Libraries/geometry2/tf3_geometry_msgs:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=../../build/src/Navigations/Libraries/geometry2/tf3_sensor_msgs:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=../../build/src/Navigations/Packages/move_base:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=../../build/src/Navigations/Cores/move_base_core:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=../../build/src/Navigations/Libraries/tf3:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=../../build/src/Navigations/Libraries/robot_time:$LD_LIBRARY_PATH

# Build
dotnet build

# Chạy
dotnet run

Lưu ý

  1. Library path: Đảm bảo libnav_c_api.so có thể được tìm thấy:

    • Copy vào cùng thư mục với executable
    • Hoặc set LD_LIBRARY_PATH environment variable
    • Hoặc copy vào /usr/local/lib và chạy ldconfig
  2. Dependencies: Library cần các dependencies khác:

    # Kiểm tra dependencies
    ldd libnav_c_api.so
    
    # Đảm bảo tất cả dependencies đều có sẵn
    
  3. Permissions: Đảm bảo file có quyền execute:

    chmod +x libnav_c_api.so
    

Troubleshooting

Lỗi: "Unable to load DLL 'libnav_c_api.so'"

Giải pháp:

# Set LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/home/robotics/AGV/Diff_Wheel_Prj/pnkx_nav_core/build/src/APIs/c_api:$LD_LIBRARY_PATH

# Hoặc copy library vào system path
sudo cp libnav_c_api.so /usr/local/lib/
sudo ldconfig

Lỗi: "DllNotFoundException"

Giải pháp:

  • Kiểm tra tên file library có đúng không
  • Kiểm tra architecture (x64 vs x86)
  • Kiểm tra dependencies: ldd libnav_c_api.so

Lỗi: "Symbol not found"

Giải pháp:

  • Đảm bảo library đã được build đầy đủ
  • Kiểm tra tên hàm trong C# có khớp với C API không