# 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 ```bash 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ị) ```bash 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 ```bash cd /home/robotics/AGV/Diff_Wheel_Prj/pnkx_nav_core/examples dotnet new console -n NavigationExample cd NavigationExample ``` ### Copy file và library ```bash # 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`: ```xml Exe net6.0 linux-x64 true PreserveNewest ``` ## Bước 4: Build và chạy ```bash # 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: ```bash # 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: ```bash chmod +x libnav_c_api.so ``` ## Troubleshooting ### Lỗi: "Unable to load DLL 'libnav_c_api.so'" **Giải pháp:** ```bash # 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