Jetson orin+livox Mid-70+imu+PTZ カメラの共同校正とデータ取得

以前のドローンの x86 マルチソース データ取得および共同キャリブレーション アルゴリズムを新しいボード Jetson orin 上で再構築し、以前のマルチセンサー取得データのタイムスタンプが揃っていない問題を解決します。

1. 準備

  1. ros 環境をインストールします。Xiaoyu を推奨します: http://fishros.com/#/fish_home。この偉人のパッケージは、彼自身のインストールにおける多くの落とし穴を回避します。
  2. livoxsdk をインストールします: https://github.com/Livox-SDK/Livox-SDK;
  3. ジンバル カメラ SDK をインストールします: https://wiki.amovlab.com/public/gimbalwiki/G1/doc/AmovGimbalROSSDK.html;
  4. パンチルト カメラの固定角度を制御すると、MATLAB はパンチルト カメラのキャリブレーション内部パラメーターを取得します。
  5. レーザーとカメラのジョイント キャリブレーション アルゴリズムをインストールします。アルゴリズムは livox_camera_calib を使用します: https://github.com/hku-mars/livox_camera_calib;
  6. 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 1​​92.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 をインストールするには、いくつかの事前準備が必要です。

  1. 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
  1. ros シリアル ポート ライブラリをインストールします (インストールされているものは無視できます)。roscore はシステムの ros バージョンを確認し、対応するライブラリをインストールします。sudo apt-get install ros-noetic-serial
  2. 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
  3. 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 解決してください。
  4. 既存の 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
  1. インストールが構築されたら、次を実行します。
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

  1. lidar_align をダウンロードしてインストールします: https://github.com/ethz-asl/lidar_align、https://github.com/wwtx/lidar_align_wwtx
  2. 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 #录制多个话题

おすすめ

転載: blog.csdn.net/github_38060285/article/details/132066449