以前のドローンの x86 マルチソース データ取得および共同キャリブレーション アルゴリズムを新しいボード Jetson orin 上で再構築し、以前のマルチセンサー取得データのタイムスタンプが揃っていない問題を解決します。
1. 準備
- ros 環境をインストールします。Xiaoyu を推奨します: http://fishros.com/#/fish_home。この偉人のパッケージは、彼自身のインストールにおける多くの落とし穴を回避します。
- livoxsdk をインストールします: https://github.com/Livox-SDK/Livox-SDK;
- ジンバル カメラ SDK をインストールします: https://wiki.amovlab.com/public/gimbalwiki/G1/doc/AmovGimbalROSSDK.html;
- パンチルト カメラの固定角度を制御すると、MATLAB はパンチルト カメラのキャリブレーション内部パラメーターを取得します。
- レーザーとカメラのジョイント キャリブレーション アルゴリズムをインストールします。アルゴリズムは livox_camera_calib を使用します: https://github.com/hku-mars/livox_camera_calib;
- laser+imu ジョイント キャリブレーション アルゴリズムをインストールします。アルゴリズムは lidar_align を使用します。
2. 設備環境
2.1 ライダー Livox-MID70
1- livox-sdk をインストールする
sudo apt install cmake
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
cd build && cmake ..
make
sudo make install
2- ドライバー livox_ros_driver をインストールします
git clone https://github.com/Livox-SDK/livox_ros_driver.git catkin_ws/src #在ros工作空间下
cd ~/catkin_ws
catkin_make
レーダーが Mid70 を使用している場合、IP アドレスは以前に変更されています: レーダー アドレス 192.168.1.113 PTZ カメラ アドレス 192.168.1.163。
コンピューターの静的 IP を設定します: sudo ifconfig enp2s0 192.168.1.110 ネットマスク 255.255.255.0
sudo ルート追加デフォルトの gw 192.168.1.1
roslaunch livox_ros_driver livox_lidar_rviz.launch 启动设备命令,提前配好ip连接。
rostopic list 录制点云保存到rosbag
rosbag record ..
rosbag play .bag
2.2 PTZ カメラ - Amu Lab G1 ポッド
方法 1 (古い x86 ボードで使用されていた方法):
ポッド データを取得し、SD カードに保存します。
ダウンロード フォルダーの ubuntu でジンバル カメラを起動します: ./AmovGimbalstudio_x86_v1.0.5.AppImage、Windows で AmovGimbalstudio をダウンロードして、
レーダーの方向と一致するようにジンバル カメラの角度を制御します:
no conda シリアル ポート アクセス: ls /dev/ttyUSB * シリアル ポート /dev/ttyUSB があることを確認してください*
(
sudo chmod 777 /dev/ttyUSB0 赋予串口临时权限
cd ~/gimbal-sdk-master/build
./GetGimbalState -S /dev/ttyUSB0 -b 115200获取吊舱IMU角度和编码器角度
./CameraControl -a 1视频
./CameraControl -a 2照片
)
gimbal-sdk-python文件夹下:
cd gimbal-sdk-python
conda deactivate
python3 downward.py
python3 amov_gimbal_python.py
python3 amov_gimbal_python.py 1-pic 2-video 3-angle control 4-angular rate control 5-back center 6-imu angle と encoder angle を含むポッドのステータス データの取得 ポッド画像画面の表示: python3
amov_gimbal_image.py
方法 2 (jetson または新しいボードで使用される方法):
ros-sdk を通じてハードディスクに保存します: https://wiki.amovlab.com/public/gimbalwiki/G1/doc/AmovGimbalROSSDK.html。ros-sdk をインストールするには、いくつかの事前準備が必要です。
- amov-gimbal-libs をインストールします: https://api.gitee.com/amovlab/amov-gimbal-libs、uname -m でオペレーティング システムの関連情報を表示し、コピーする対応する構成ファイルを選択します。
次のコマンドを実行します。sudo cp lib/*****/libAMOV_Gimbal.so /usr/lib/ #库文件 sudo cp inc/amov_gimbal_struct.h /usr/include/ #头文件 sudo cp inc/amov_gimbal.h /usr/include/ #头文件
ライブラリのビルド: git プロジェクトは、G1 ポッドを例として使用する C++ および python3 の使用ルーチンを提供します。Python ルーチンは ctypes 中間層 (/example/2py.cpp) を呼び出すことによって実装されるため、Python ルーチンを正しく実行するには C++ ルーチンを構築する必要があります。
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}
)
根目录amov-gimbal-libs下运行构建命令:
mkdir build
cd build
cmake ..
make
C++ ルーチン:
事前に USB 経由でデバイスを接続します。ジンバルの IP はここでは 192.168.1.163 として構成されています。コンピューターの静的 IP を設定します: sudo ifconfig enp2s0 192.168.1.110 ネットマスク 255.255.255.0。シリアル ポートにアクセスする:
ls /dev/ttyUSB*
シリアル ポート /dev/ttyUSB* があることを確認しますsudo chmod 777 /dev/ttyUSB0 赋予串口临时权限
。
sudo cp build/example/serial/libserial.so /usr/lib/ #安装串口库
sudo chmod 777 /dev/ttyUSB0 #赋予串口权限
./build/example_test /dev/tty* G1 #以运行G1吊舱为例
以下に示すように、ジンバルは正の方向と初期点の間を約 2 秒の間隔でスイングし、姿勢情報をコンソールに出力します。 Python ルーチンは、/example/2py.cpp を通じて ctypes スタイル ライブラリを構築し
ます
。 ctypes モジュールを通じて C++ ライブラリを呼び出します。 Python ルーチンは /example/example.py です。 このルーチンは、20° (ロール)、30° (ピッチ)、40° (ヨー) 姿勢と初期姿勢でのジンバルの往復運動を実現します。コンソールを介してリアルタイムの姿勢情報を出力する機能など、日常的な機能を参照することで実現可能です。
クイック画像取得: このプロジェクトは、通常の WEB カメラとストリーミング メディア カメラが opencv を通じて画像を取得するための簡単なデモを提供します。使用する前に opencv-python をコンパイルまたはインストールしますexample/example_stream_cam_image.py 适用于流媒体相机,example/example_web_cam_image.py 适用于普通WEB相机
。
sudo cp build/libAMOV_Gimbal_python.so /usr/lib/
sudo chmod 777 /dev/ttyUSB0 #赋予串口权限
sudo chmod +x example/example.py #赋予可执行权限
python3 example/example.py
- ros シリアル ポート ライブラリをインストールします (インストールされているものは無視できます)。roscore はシステムの ros バージョンを確認し、対応するライブラリをインストールします。
sudo apt-get install ros-noetic-serial
- Gstreamer をインストールします (インストールされているものは無視できます)
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
。 - opencv をコンパイルしてインストールします (Gstreamer が有効になっている場合は無視できます)。コンパイル オプションの追加 (-D WITH_GSTREAMER=ON)
リファレンス チュートリアル: https://blog.csdn.net/chiwang_andy/article/details/130930260、https://blog.csdn.net/inininnnn/article/details/131181463
opencv が発生しました見つからない場合は、それを使用してsudo apt install libopencv-dev
解決してください。 - 既存の ros ワークステーション catkin_ws/src に入り、SDK をダウンロードします。
git clone https://gitee.com/amovlab/gimbal-sdk-ros.git
cd gimbal-sdk-ros/
git checkout V2.0.0
cd ../..
catkin_make
- インストールが構築されたら、次を実行します。
cd catkin_ws #进入此前工作空间路径
source devel/setup.bash # 通过source devel/setup.bash命令,把ROS SDK功能包加入到环境变量中
1.运行吊舱节点(通过/amov_gimbal_ros/gimbal_control话题控制吊舱、通过/amov_gimbal_ros/gimbal_state话题获取吊舱状态信息)
roslaunch src/gimbal-sdk-ros/launch/gimbal_G1.launch
通过/amov_gimbal_ros/set_camera_action服务控制相机(0:录像和停止录像 )视频会保存在TF卡中
2.获取相机视频画面(通过/amov_gimbal_ros/amov_gimbal_image话题获取ROS image图像)
rostopic list
イメージを記録して rosbag に保存し、
デフォルトのノード パラメータとトピックを変更します。src/gimbal-sdk-ros/launch/gimbal_XX.launch 内の対応するパラメータを変更して、デフォルトのノード パラメータとトピックを変更できます。
rosbag record ..
rosbag play .bag
2.3 IMU
これは pixlvzwk2.4.8 で、ドライバーをインストールします: git clone https://github.com/PX4/PX4-Autopilot.git --recursive
インストール ブログを参照してください: https://blog.csdn.net/HuangChen666/article /詳細/128754106
cd PX4-Autopilot/
git submodule update --init --recursive
bash ./PX4-Autopilot/Tools/setup/ubuntu.sh 执行ubuntu.sh脚本
make px4_sitl_default gazebo
MAVROS をインストールしますsudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras
。
デバイスを構成および表示します。
ls /dev/ttyACM0
sudo chmod 777 /dev/ttyACM0
source ./devel/setup.bash
roslaunch mavros px4.launch
新开终端rostopic echo /mavros/imu/data
采集imu数据:rosbag record ..
rosbag record /mavros/imu/data
レーダー/imu/PTZ カメラデータを同時に収集
rosbag record -O lidarimu.bag /mavros/imu/data /livox/lidar /amov_gimbal_ros/amov_camera_image
3. ジョイントキャリブレーションアルゴリズム
2.1 レーダーとカメラの共同キャリブレーション アルゴリズム: livox_camera_calib
実際の計測では、縦横のテクスチャが連続的で鮮明であることが必要ですが、同時にエッジに平行なテクスチャが多数存在する場合、測定精度は環境のテクスチャに大きく影響されます。画像の場合も、特徴マッチングの妨げになります。エッジが抜きやすいので屋内階段におすすめです。アウトドアには四角い建物がおすすめです。角度はレーザー光線と平行に近くなくても、少し傾けることができます。
公式コードで示されている例のように、pcd は収集時間を長くすることを推奨しています。
1- 設定ファイルを変更します: ~/catkin_ws/src/livox_camera_calib/config、登録画像と pcd 読み取り位置を変更します。
# Data path. adjust them!
common:
image_file: "/home/jetson/data/calib/image/2.png"
pcd_file: "/home/jetson/data/calib/pcd/2.pcd"
result_file: "/home/jetson/data/calib/extrinsic.txt"
# Camera Parameters. Adjust them!
camera:
camera_matrix: [1364.45, 0.0, 958.327,
0.0, 1366.46, 535.074,
0.0, 0.0, 1.0 ]
dist_coeffs: [0.0958277, -0.198233, -0.000147133, -0.000430056, 0.000000]
# Calibration Parameters.!
calib:
calib_config_file: "/home/jetson/catkin_ws/src/livox_camera_calib/config/config_outdoor.yaml"
use_rough_calib: true # set true if your initial_extrinsic is bad
ここでジンバルを使用する場合、ジンバルキャリブレーション後の内部パラメータは次のとおりです。
[Calib]
fx = 2104.7752770539305
fy = 2105.362380382873
u0 = 2276.460057518206
v0 = 1215.0545500692372
[Rectify]
mtx _0 = 2104.7752770539305
mtx_1 = 0.0
mtx_2 = 2276.460057518206
mtx_3 = 0.0
mtx_4 = 2105.362380382873
mtx_5 = 1215.0545500692372
mtx_6 = 0.0 mtx_7 = 0.0
mtx_8 =
1.0
dist_k1 = -0.31414978484346795
dist_k2
= 0.1176 7723680854802 dist_p1 = -0.0003711841 5206200555 dist_p2 =
0.00018745825701131476
dist_k3 = -0.021491455128815545
2- 点群データを Bag から PCD に変換します。
source ~/catkin/catkin_ws/devel/setup.bash
roslaunch livox_camera_calib bag_to_pcd.launch
存储在/home/sunwenhao/catkin/catkin_ws/src/livox_camera_calib/result/1.pcd
カメラとレーダーの共同キャリブレーション アルゴリズムを開始します。
source ~/catkin/catkin_ws/devel/setup.bash 之前配了
roslaunch livox_camera_calib calib.launch
2.2 レーダーと imu の共同キャリブレーション アルゴリズム: lidar_align
- lidar_align をダウンロードしてインストールします: https://github.com/ethz-asl/lidar_align、https://github.com/wwtx/lidar_align_wwtx
- catkin_make プロセスに問題があります。ubuntuに lidar_align をインストールするときのコンパイル エラー、lidar と IMU のキャリブレーション、および https://blog.csdn.net/qq_39607707/article/details/127361539 を参照してください。これは基本的に解決できます。
cd catkin_ws
catkin_make
source devel/setup.bash
roslaunch lidar_align lidar_align.launch
2.2 マルチソース rosbag パッケージのデータ収集
レーダー/imu/PTZ カメラ データを同時に収集し、タイムスタンプの一貫性を確保します。
rosbag record -O lidarimu.bag /mavros/imu/data /livox/lidar /amov_gimbal_ros/amov_camera_image
rosは複数のトピックスクリプトを記録します。
スクリプト名はrecord_topic.bashなどの自作です。
#!bin/bash
time=$(date "+%Y%m%d%H%M%S")
echo $time #字符串格式系统时间,使录制的包名不重复
rosbag record -O plan_$time /mavros/imu/data /livox/lidar /amov_gimbal_ros/amov_camera_image #录制多个话题