| .. | ||
| NavigationExample | ||
| CSharpExample.cs | ||
| dotnet-install.sh | ||
| QUICK_START.md | ||
| README.md | ||
| run_example.sh | ||
| START_HERE.md | ||
Hướng dẫn chạy C# Example
Yêu cầu
- .NET SDK (version 6.0 trở lên hoặc .NET 10)
- C API Library đã được build (
libnav_c_api.so) - 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 ý
-
Library path: Đảm bảo
libnav_c_api.socó thể được tìm thấy:- Copy vào cùng thư mục với executable
- Hoặc set
LD_LIBRARY_PATHenvironment variable - Hoặc copy vào
/usr/local/libvà chạyldconfig
-
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 -
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