阿木实验室通用吊舱驱动库(C++ & python)

介绍

  • amov-gimbal-libs 是阿木实验室推出的多平台吊舱驱动库,旨在实现多个平台对于多种阿木实验室吊舱产品的支持,助力用户在不同的产品间快速切换,仅需少量改动现有代码
  • 目前支持吊舱
    • 阿木实验室G1
    • 阿木实验室Q10f
    • 阿木实验室GX40
    • 品灵AT10
  • 目前支持平台
    • X86_64-linux
    • X86_64-Windows
    • i386-linux
    • i386-Windows
    • aarch64-linux
    • aarch32-hf-linux
    • aarch32-sf-linux

快速入门

下载SDK:

  1. 克隆仓库

    git clone https://gitee.com/amovlab/amov-gimbal-libs.git

软件依赖

  • GLIBC (2.34 or later)
  • CMake (version 3.0 or later)
  • MinGw (Windos下需使用MinGw进行构建及编译)

安装及使用云台库

本页教程适用于TagsV2.0.0的版本 由于库将根据实际情况进行更新,本文档仅作参照,最终以Gitee仓库的readme.md为准

Windows

  • 无需安装,在编写程序时正确引入 /inc 目录下的头文件 以及/lib 目录下指定架构的dll文件
  • 运行应用时将对应的dll文件复制至相同路径下即可
  • 导入方式可参考CMakeList.txt文件的处理方式 如下所示
target_link_libraries(${PROJECT_NAME} libAMOV_Gimbal.dll)   #链接 AMOV_Gimbal库
link_directories(${libAMOV_Gimbal_dir})                     #指定库文件目录 libAMOV_Gimbal_dir即为库文件所在的目录
target_include_directories(${PROJECT_NAME} ${inc_dir})      #指定头文件目录 inc_dir即为库文件路径所在的目录    

Linux

sudo cp lib/<对应CPU及系统架构>/libAMOV_Gimbal.so /usr/lib/     #库文件
sudo cp -r inc/amovGimbal /usr/include/                        #头文件

C++ 例程

正确安装AmovGimbal库后即可尝试对例程进行编译。

构建例程

Windows

cmake -B build -G "MinGW Makefiles"
cmake --build build

Linux

cmake -B build
cmake --build build

运行例程

Windos

cp lib/<对应CPU架构>-win/libAMOV_Gimbal.dll build/        #复制运行库
cp build/example/serial/libserial.dll build/             #复制串行接口库
./build/example_test.exe COM1 G1                         #以运行G1吊舱,使用COM1端口为例

Linux

sudo cp build/example/serial/libserial.so /usr/lib/     #安装串口库
chmod 777 /dev/ttyUSB0                                  #赋予串口权限
./build/example_test /dev/ttyUSB0 G1                    #以运行G1吊舱,使用/dev/ttyUSB0端口为例 
  • 运行成功云台将间隔约2S向正方向与初始点间摆动并在控制台输出如下所示姿态信息
GIMBAL_CMD_RCV_POS
=============================================
HALL_yaw: 0.00
HALL_roll: 0.00
HALL_pitch: 0.00
GYRO_yaw: 0.00
GYRO_roll: 0.00
GYRO_pitch: 0.00

python 例程

  • python例程通过调用ctypes中间层/example/2py.cpp中实现,该文件在构建C++例程时构建
  • 因此使用python例程前必须完成C++例程的构建

修改云台种类及使用端口

修改example/example.py文件的以下位置

# 运行的设备名
defname = b'G1'                                   #设备类型为 G1

# 装载接口库
if (sys.platform == "linux"):
    gimbal = CDLL("libAMOV_Gimbal_python.so")
    defport = b'/dev/ttyUSB0'                       #使用/dev/ttyUSB0端口 linux下有效 根据实际情况修改
else:
    gimbal = CDLL("libAMOV_Gimbal_python")
    defport = b'COM3'                               #使用COM3端口 windos下有效 根据实际情况修改

启动云台控制 python 例程

Windos

cp lib/<对应CPU架构>-win/libAMOV_Gimbal.dll example/
cp build/example/serial/libserial.dll example/
cp build/libAMOV_Gimbal_python.dll example/
cd example/
python example.py

Linux

sudo cp build/libAMOV_Gimbal_python.so /usr/lib/
chmod 777 /dev/ttyUSB0                                  #赋予串口权限
sudo chmod +x example/example.py                        #赋予可执行权限
python3 example/example.py

这个例程实现了云台在20°(roll),30°(pitch),40°(yaw)姿态与初始姿态往复运动

构建中间层

  • 下面提供一个用于构建AMOV_Gimbal_python库的CMakeList.txt实现参考(位于根目录):
#构建前需正确安装库
add_subdirectory(example/serial)                                    #添加串口子模块
add_library(AMOV_Gimbal_python SHARED example/2py.cpp)              #指定构建目标
target_link_libraries(AMOV_Gimbal_python serial AMOV_Gimbal)        #链接串口库、AMOV_Gimbal库   
target_include_directories(AMOV_Gimbal_python                       #指定头文件
    PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}
)

启动图像获取 python 例程

  • 安装 opencv-python
  • 替换 example/example_stream_cam_image.py 中的以下部分为控制器中的码流地址
pipline_str = "rtsp://192.168.2.64:/H264?W=1920&H=1080&FPS=30&BR=4900000"
  • 运行
python3 example/example_stream_cam_image.py

关闭该python例程需要通过Ctrl+c的方式关闭终端

附录:C++ SDK支持API列表

库及构建信息

该库编译采用C++11标准,使用pthread

该库采用交叉编译技术于 Ubuntu 20.04.6 LTS 系统中进行构建 下面是针对不同的平台采用的编译器信息

  • x86_64-linux/i386-linux: gcc/g++ (version 9.3.0)
  • x86_64-Windows/i386-Windows: w64-mingw32-gcc-posix/w64-mingw32-g++-posix (gcc version 9.3.0)
  • arrch64-linux: aarch64-linux-gnu-gcc/aarch64-linux-gnu-g++ (gcc version 9.3.0)
  • arm-hf-linux: arm-linux-gnu-gcc-hf/arm-linux-gnu-g++-hf (gcc version 9.3.0)
  • arm-sf-linux: arm-linux-gnu-gcc-sf/arm-linux-gnu-g++-sf (gcc version 9.3.0)

用户可根据这些信息分析可能存在的兼容性问题