143 lines
3.7 KiB
Markdown
143 lines
3.7 KiB
Markdown
# 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
|
|
<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
|
|
|
|
```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
|
|
|