Visual Study Notes 9 - エッジ分離コンピューティング EdgeSLAM と ORBSLAM3 の組み合わせ

シリーズ記事ディレクトリ

私の opencv 設定ブログを参照してください
私の orbslam3 設定ブログを参照してください



序文

ビジュアル SLAM は、メモリと処理時間の点でリソースを大量に消費することはよく知られています。さらに、一部の操作は時間の経過とともに複雑になり、モバイル デバイスで継続的に実行することが困難になっています。エッジ コンピューティングは、モバイル デバイスに追加のコンピューティング リソースとメモリ リソースを提供し、クラウドへのオフロード時に発生する大幅な遅延を発生させることなく、特定のタスクをオフロードできるようにします。Edge-SLAM は、エッジ コンピューティング リソースを使用して Visual-SLAM の一部をオフロードするシステムです。ORB-SLAM3 はプロトタイプの Visual-SLAM システムとして使用され、エッジ デバイスとモバイル デバイスの間の分割アーキテクチャとして変更されます。追跡計算をモバイル デバイス上に保持し、残りの計算 (ローカル マッピングとループ クロージャなど) をエッジに移動することで、Visual-SLAM システムは、操作の精度を損なうことなく、限られたリソースで長時間実行できます。また、モバイル デバイス上の計算コストとメモリ コストが一定に保たれるため、Visual-SLAM を使用した他のエンドユース アプリケーションの展開が可能になります。

Edge-SLAM は、エッジ支援による視覚的な同時位置特定とマッピングです。Edge-SLAM は、Visual-SLAM をエッジ コンピューティング アーキテクチャに適応させ、モバイル デバイス上で長時間実行される Visual-SLAM を実現します。これは、計算負荷の高いモジュールをエッジにオフロードすることで実現されます。したがって、Edge-SLAM はモバイル デバイス上のリソース使用量を削減し、その使用量は変わりません。Edge-SLAM は ORB-SLAM2 の上に実装されます。

最初は自分で実現方法を考えてたんですが、githubを見ていたらAdapSLAMという新しいプロジェクトを見つけて、同じアイデアを持っている人がいて、そのアイデアをより成熟させて実現したのが、まさにnpでした。

EdgeSlam のソースコード
EdgeSlam 論文

ここに画像の説明を挿入


1. コンピューターの EdgeSlam のインストールと構成

EdgeSlam をインストールする前に ORB-SLAM3 をインストールしてください

1. エラー 1

build.shの最後を実行

cmake .. -DCMAKE_BUILD_TYPE=Release

表示:
パッケージ構成ファイルが見つかりました:
/usr/local/lib/cmake/Pangolin/PangolinConfig.cmake
ですが、Pangolin_FOUND が FALSE に設定されているため、パッケージ “Pangolin” は NOT FOUND とみなされます
。パッケージによる理由:
Pangolin が見つかりませんでした。依存関係Eigen3が見つかりません。
または、
/usr/bin/ld: -lEigen3::Eigenが見つかりません。
例: pandas は、データ分析タスクを解決するために作成された NumPy ベースのツールです。
解決策:
PangolinとEigenを再インストールしない一時的な解決策として、CMakeLists.txtを次のように変更します:
find_package(Eigen3 REQUIRED) NO_MUDULEの後に追加します。

find_package(Eigen3 REQUIRED NO_MODULE)

ここに画像の説明を挿入

2. エラー 2

 [rosbuild] rospack found package "Edge_SLAM" at "", but the current
  directory is "/home/llw/Guide_blind/edgeslam/Examples/ROS/Edge_SLAM".  You
  should double-check your ROS_PACKAGE_PATH to ensure that packages are found
  in the correct precedence order.

解決策:
まず、~/.bashrc にパスを設定します (このパスは私のパスであることに注意してください。読者は自分で変更する必要があります)。

sudo vim ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/llw/Guide_blind/edgeslam/Examples/ROS
source ~/.bashrc

ROS のインストール パスの下のパスを変更します。

cd /opt/ros/melodic/
sudo vim setup.bash 
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/llw/Guide_blind/edgeslam/Examples/ROS
source setup.bash

パスが正常に追加されたかどうかを確認します。

echo $ROS_PACKAGE_PATH

3. 間違い3

CMake Warning (dev) at /opt/ros/melodic/share/ros/core/rosbuild/public.cmake:507 (add_executable):
  Policy CMP0028 is not set: Double colon in target name means ALIAS or
  IMPORTED target.  Run "cmake --help-policy CMP0028" for policy details.
  Use the cmake_policy command to set the policy and suppress this warning.

  Target "Mono" links to target "Eigen3::Eigen" but the target was not found.
  Perhaps a find_package() call is missing for an IMPORTED target, or an
  ALIAS target is missing?
Call Stack (most recent call first):
  CMakeLists.txt:126 (rosbuild_add_executable)
This warning is for project developers.  Use -Wno-dev to suppress it.

解決策:
Eigen はそれを検出できないため、CMakeLists.txt を次のように変更します:
find_package(Eigen3 REQUIRED) の後に NO_MUDULE を追加します。

find_package(Eigen3 REQUIRED NO_MODULE)

ここに画像の説明を挿入

4. エラー 4

OpenCV Error: Unknown error code -49 (Input file is empty) in cvOpenFileStorage, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/persistence.cpp, line 4422
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/persistence.cpp:4422: error: (-49) Input file is empty in function cvOpenFileStorage

解決策:
主な問題は、「%YAML:1.0」が構成ファイルに追加されていないことです。
ここに画像の説明を挿入

2. Jetson nano に ORB SLAM3 をインストールする

1. ジェットソンナノの問題

質問1

nano 自体の計算能力の問題を考慮して、コンパイルが停止する場合があるため、グラフィカル インターフェイスを閉じることを選択できます。

GUIを閉じる

sudo systemctl set-default multi-user.target 
sudo reboot

GUIを開く

sudo systemctl set-default graphical.target 
sudo reboot

質問2

apt-get ロック

E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用) 
E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?
1.方法一:
用这个命令查看一下apt-get的相关进程:
ps -e | grep apt

显示:
11669 ? 00:00:02 aptd
25379 ? 00:00:00 update-apt-xapi

然后执行:
sudo kill 11669
sudo kill 25379
2.方法二:
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
3.方法三
sudo rm /var/lib/dpkg/lock-frontend

2. Jetson nano 自身の opencv の問題

1.opencv3.3.0をアンインストールします。

sudo apt-get purge libopencv*
sudo apt autoremove
sudo apt-get update

Linux に opencv があるかどうか、およびインストールされているバージョンを確認します。

pkg-config opencv --modversion
pkg-config opencv4 --modversion

2.opencv4.4.0をインストールする

私のブログを参照してください

  1. opencv の依存関係をインストールする
  2. 4.4Sources バージョン、opencv_contrib、boostdesc、および vgg ファイルをダウンロードして処理します。
  3. cmake-gui とそれ以降の部分については気にせず、このブログに戻ってください。

cmake のバージョンを確認し、ある場合はダウンロードします。

cmake -version

opencv を設定してコンパイルします。

1、创建build文件夹
mkdir build
cd build

2、cmake设置配置opencv
cmake \

-DCMAKE_BUILD_TYPE=Release \
-DBUILD_PNG=OFF \
-DBUILD_TIFF=OFF \
-DBUILD_TBB=OFF \
-DBUILD_JPEG=OFF \
-DBUILD_JASPER=OFF \
-DBUILD_ZLIB=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_opencv_java=OFF \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=ON \
-DENABLE_PRECOMPILED_HEADERS=OFF \
-DWITH_OPENCL=OFF \
-DWITH_OPENMP=OFF \
-DWITH_FFMPEG=ON \
-DWITH_GSTREAMER=OFF \
-DWITH_GSTREAMER_0_10=OFF \
-DWITH_CUDA=ON \
-DWITH_GTK=ON \
-DWITH_VTK=OFF \
-DWITH_TBB=ON \
-DWITH_1394=OFF \
-DWITH_OPENEXR=OFF \
-DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.0 \
-DCUDA_ARCH_BIN=5.3 \
-DCUDA_ARCH_PTX="" \
-DINSTALL_C_EXAMPLES=OFF \
-DOPENCV_ENABLE_NONFREE=ON \
-DINSTALL_TESTS=OFF \
-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.4.0/modules \
..

セットアップエラー:

CUDA: OpenCV requires enabled ‘cudev‘ module from ‘opencv_contrib‘

エラー解決: パスが間違っています

-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-4.4.0/modules \

設定が完了してチェックが入ったらコンパイルを開始します。-j1 はクラッシュの心配があります。j1 ~ j4 はすべて問題ありません。大きくて高速ですが、ハングしやすいです。j1 の方が安定していますが、一晩中コンパイルしました。

sudo make -j1

長いコンパイルの後、インストールします

sudo make install

3. ロス問題

組み込みの opencv の問題を解決し、次に ROS をインストールし、最後に ORBSLAM3 をインストールすることをお勧めします。インストールについては、このブログを参照してください。

直接インストールするスクリプト コマンドがあり、これは非常に簡単ですが、スクリプトのインストール時のオプションの選択に注意する必要があります。

wget http://fishros.com/install -O fishros && . fishros

スクリプトがインストールされたら、このブログの 6.rosdep init 初期化手順に直接スキップして、タートルを描画します。

質問1

ワークスペースのコンパイルの問題。catkin_make の実行時にエラーが報告されます: catkin_make libusb_cam.so 未定義の参照

解決策:
バージョン更新による問題と思われますので、usb_cam バージョン 0.3.6 をダウンロードし、catkin ワークスペースでリビルドして実行してください。

4. Orbslam3 の問題

ORB-SLAM3 バージョン 1.0 を直接使用するには、私のブログを参照してください
インストールが完了したら、単眼効果と両眼効果をテストして、成功したかどうかを確認します。

1. 質問 1

Couldn’t query v4l fps! error 25, Inappropriate ioctl for device

解決:

動画番号が正しく対応しているか

2. 質問2

./build_ros.sh を実行するとエラーが発生します。

error: no matching function for call to ‘std::vector<cv::Mat>::push_back(Eigen::Vector3f)

解決策:
ViewerAR.cc ファイルの 405 行目を開きます。

删除或注释
vPoints.push_back(pMP->GetWorldPos())

への変更:

vPoints.push_back(ORB_SLAM3::Converter::toCvMat(pMP->GetWorldPos()));

5.ゼット問題

質問1

 CMake Error at /opt/ros/melodic/share/catkin/cmake/catkinConfig.cmake:83 (find_package):   Could not find a package configuration file provided by "zed_interfaces"   

解決策:
zed_interfaces をインストールし、catkin_make の下に置くだけです。

git clone https://github.com/stereolabs/zed-ros-interfaces

質問2

double free or corruption (out)
Aborted (core dumped)

解決策:
コールバックを何度もテストした結果、opencv のバージョンのようです。これはgithub の Orb ディスカッション エリアの提案です

Jetson nano は公式イメージをインストールするため、opencv3.3.0 が付属しますが、これは ros に付属する opencv3.2.0 と競合するため、opencv3.3.0 のアンインストールを選択し、アンインストール手順が前に置かれています。

ここに画像の説明を挿入

ZED2 を介して ORB-SLAM3 双眼 IMU を正常に呼び出す
ここに画像の説明を挿入

3. Jetson nano EdgeSlam のインストールテスト

インストール手順は基本的に第1章と同じですので割愛します。

1. テスト

1. モバイルデバイスの場合

新しいターミナル ウィンドウを開き、プロジェクトのルート ディレクトリに移動して、次を実行します。

roscore

2 番目のターミナル ウィンドウを開き、プロジェクトのルート ディレクトリに移動して、次のコマンドを実行します。

cd Examples/ROS/Edge_SLAM/
rosrun Edge_SLAM RGBD ../../../Vocabulary/ORBvoc.txt ../../RGB-D/TUM2.yaml client

2. エッジデバイス上

新しいターミナル ウィンドウを開き、プロジェクトのルート ディレクトリに移動して、次を実行します。

roscore

2 番目のターミナル ウィンドウを開き、プロジェクトのルート ディレクトリに移動して、次のコマンドを実行します。

cd Examples/ROS/Edge_SLAM/
rosrun Edge_SLAM RGBD ../../../Vocabulary/ORBvoc.txt ../../RGB-D/TUM2.yaml server

3. IPとポート番号の通信

Edge-SLAM が両方のデバイスで実行されている場合、ネットワーク接続を設定するために Edge-SLAM 端末に IP とポート番号を入力するように求められます。Edge-SLAM は 3 つの TCP 接続を使用します。最初の接続はキーフレームを送信し、2 番目はフレームを送信し、3 番目はマップ更新を送信します。ネットワークを設定するには、示されている順序で次の手順を実行します。

  1. エッジデバイス上で
  • エッジデバイスのIPアドレスを入力します
  • エッジ キーフレーム接続に使用するポート番号 (6661 など) を入力します。
  1. モバイルデバイス上で
  • モバイルデバイスのIPアドレスを入力してください
  • エッジデバイスのIPアドレスを入力します
  • モバイル デバイスでのキーフレーム接続に使用されるポート番号 (6662 など) を入力します。
  • エッジ キーフレーム接続に使用するポート番号 (6661 など) を入力します。
  • キーフレーム接続が確立されると、システムは引き続き 2 番目の接続を要求します。
  1. エッジデバイス上で
  • エッジでのフレーム接続に使用されるポート番号 (6663 など) を入力します。
  1. モバイルデバイス上で
  • モバイル デバイスでのフレーム接続に使用されるポート番号 (6664 など) を入力します。
  • エッジでのフレーム接続に使用されるポート番号 (6663 など) を入力します。
  • フレーム接続が確立されると、システムは引き続き 3 番目の接続を要求します。
  1. エッジデバイス上で
  • エッジ マップ更新接続に使用するポート番号 (6665 など) を入力します。
  1. モバイルデバイス上で
  • モバイル デバイスのマップ更新接続に使用するポート番号 (6666 など) を入力します。
  • エッジ マップ更新接続に使用するポート番号 (6665 など) を入力します。
  • 地図更新接続が確立されている場合、モバイル デバイス上のシステムはビューア ウィンドウを開き、エッジ デバイスはデータの受信を待機する必要があります。
  1. モバイルデバイス上で
  • 3 番目のターミナル ウィンドウを開き、プロジェクトのルート ディレクトリに移動し、パッケージ ファイルを実行します。
rosbag play ./rgbd_dataset_freiburg2_desk.bag /camera/rgb/image_color:=/camera/rgb/image_raw /camera/depth/image:=/camera/depth_registered/image_raw

ポートが残っているか占有されています

查询端口
sudo netstat -nplt

杀死端口中的进程
kill -9 xxx

ここに画像の説明を挿入

4、ORB_SLAM3の調整

解決すべき問題:

Usage: rosrun ORB_SLAM3 Mono path_to_vocabulary path_to_settings
OpenCV Error: Assertion failed (tlsSlots.size() > slotIdx) in releaseSlot, file /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/system.cpp, line 1092
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/opencv-L2vuMj/opencv-3.2.0+dfsg/modules/core/src/system.cpp:1092: error: (-215) tlsSlots.size() > slotIdx in function releaseSlot

1. cv_bridge を更新する

cv_bridge ダウンロード アドレス、システムに対応するバージョンに注意する必要があります。catkin_ws/vision_opencv-melodic/cv_bridge ディレクトリで解凍します。

cd cv_bridge
mkdir build
cd build
cmake …
make
sudo make install

エラー1

cmakeを実行すると…opencv4が見つからないと表示されました

解決策
cv_bridge/CMakeLists.txt の cv バージョンを変更します。

find_package(OpenCV 4 REQUIRED
  COMPONENTS
    opencv_core
    opencv_imgproc
    opencv_imgcodecs
  CONFIG
)

エラー2

cmakeを実行するとこうなる

/home/nvidia/software/catkin_workspace/src/vision_opencv/cv_bridge/src/module_opencv2.cpp
或
/home/nvidia/software/catkin_workspace/src/vision_opencv/cv_bridge/src/module_opencv3.cpp
中的
error: cannot declare variable ‘g_numpyAllocator’ to be of abstract type ‘NumpyAllocator’
 NumpyAllocator g_numpyAllocator;

解決策
1. cv_bridge/src/CMakeLists.txt ファイルを入力し、35 行目を変更します。

if (OpenCV_VERSION_MAJOR VERSION_EQUAL 4)

2. cv_bridge/src/module_opencv3.cpp ファイルを入力し、次の 2 行を変更します。

UMatData* allocate(int dims0, const int* sizes, int type, void* data, size_t* step, int flags, UMatUsageFlags usageFlags) const
改为
UMatData* allocate(int dims0, const int* sizes, int type, void* data, size_t* step, AccessFlag flags, UMatUsageFlags usageFlags) const
 bool allocate(UMatData* u, int accessFlags, UMatUsageFlags usageFlags) const
改为
bool allocate(UMatData* u, AccessFlag accessFlags, UMatUsageFlags usageFlags) const

正常にコンパイルされました

Writing /usr/local/lib/python2.7/dist-packages/cv_bridge-1.13.0.egg-info
-- Up-to-date: /usr/local/include/cv_bridge
-- Installing: /usr/local/include/cv_bridge/rgb_colors.h
-- Installing: /usr/local/include/cv_bridge/cv_bridge.h
-- Installing: /usr/local/lib/python2.7/dist-packages/cv_bridge/boost/__init__.py
-- Installing: /usr/local/lib/libcv_bridge.so
-- Set runtime path of "/usr/local/lib/libcv_bridge.so" to ""
-- Installing: /usr/local/lib/python2.7/dist-packages/cv_bridge/boost/cv_bridge_boost.so
-- Set runtime path of "/usr/local/lib/python2.7/dist-packages/cv_bridge/boost/cv_bridge_boost.so" to ""

2. コンパイルして呼び出す

終了後、他のコードを変更できます。以前の cv_bridge が欠落しているため、他のコードの cmakelists.txt にパスを追加する必要があります。このパスは独自のインストール パスです。Orbslam3 の./build.sh./例としてbuild_ros.shをコンパイルします。

エラー1

コンパイルして使用しないでください。一部のライブラリが見つからないことを示します

/opt/ros/melodic/share/ORB_SLAM3/zed2_stereo_inertial:
 error while loading shared libraries: libopencv_imgproc.so.3.2: cannot open shared object file: No such file or directory

解決策
./build.sh および ./build_ros.sh を呼び出してコンパイルします。

エラー2

./build.sh および ./build_ros.sh を呼び出してコンパイルするときにエラーが報告される

Error: package 'ORB_SLAM3' depends on non-existent package 'cv_bridge' and rosdep claims that it is not a system dependency. Check the ROS_PACKAGE_PATH or try calling 'rosdep update'

CMake Error at /opt/ros/melodic/share/ros/core/rosbuild/public.cmake:129 (message):
 
  Failed to invoke rospack to get compile flags for package 'ORB_SLAM3'.
  Look above for errors from rospack itself.  Aborting.  Please fix the
  broken dependency!

解決

おそらくrosのcv_bridgeが見つからず、インストールしたcv_bridgeも見つからず、rosdep updateも試しましたがダメだったので、/usr/local/share/cv_bridgeフォルダを/にコピーしました。 opt/ros/melodic /share/ を実行すると、./build_ros.sh を再度渡すことができます。

sudo ln -s /usr/local/share/cv_bridge /opt/ros/melodic/share

他のコードの cmakelists.txt にパスを追加して、見つからないようにします。

#在find_package前面
#opencv路径
set(OpenCV_DIR "your-path/opencv-x.x.x/build")
#cv_bridge路径
set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake) 

エラー分析

最初はオリジナルの cv_bridge を使用してコンパイルしたと思いますが、修正後は使用できるようになります。その後、apt で cv_bridge を削除すると、/usr/local/ にインストールした cv_bridge が自動的に検出されるので、それも使用できます通常の使用。しかし、ros に変更を加えずに最初から始めようとすると、ORB-SLAM3 をコンパイルするときに、ros インストールに付属の cv_bridge がまだ使用されていることを示す警告が表示されます。現時点では cv_bridge が見つかりません。 , インストールしたcv_bridgeをrosにコピーしたらコンパイルできるようになりました。

まとめ方

1. ros の cv_bridge を変更する
2. 元の cv_bridge は削除せず、ソース コード cvbridge をインストールし、cmakelist で変更する コンパイル完了後、apt は元のブリッジを削除します。
3. 元の cv_bridge を削除し、ソース コード ブリッジをインストールしてから、それを cmakelist で変更し、/usr/local/share にあるブリッジを ros パスにコピーします。

エラー3

./build_ros.sh を呼び出してコンパイルするとエラーが報告される

c++: error: /usr/lib/x86_64-linux-gnu/libopencv_core.so.3.2.0: 没有那个文件或目录
c++: error: /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.3.2.0: 没有那个文件或目录
c++: error: /usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0: 没有那个文件或目录
c++: error: /usr/lib/x86_64-linux-gnu/libopencv_core.so.3.2.0: 没有那个文件或目录
c++: error: /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so.3.2.0: 没有那个文件或目录
c++: error: /usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so.3.2.0: 没有那个文件或目录

解決

この問題については、ここでビルド フォルダーを削除し、ORB_SLAM3-1.0/Examples_old/ROS/ORB_SLAM3 フォルダーに戻り、build_ros.sh を再コンパイルします。

AdapSLAMの実装

インストール手順

1. デフォルトの ORB-SLAM 3 インストール環境がセットアップされています。
2.

エラー 1:

/home/llw/Guide_blind/AdaptSLAM/Sim
AdaptSLAM/Examples_old/Monocular-Inertial/mono_inertial_euroc.cc:195:54:
エラー:
'ORB_SLAM3::System::TrackMonocular(cv::Mat&, double&, int,
std::vector<ORB_SLAM3::IMU::Point>&)'
SLAM.TrackMonocular(im,tframe,-1,vImuMeas); // TODO を monocular_inertial に変更します

/home/llw/Guide_blind/AdaptSLAM/Sim
AdaptSLAM/Examples_old/Monocular-Inertial/mono_inertial_tum_vi.cc:207:54:
エラー:
'ORB_SLAM3::System::TrackMonocular(cv::Mat&, double&, int,
std::vector<ORB_SLAM3::IMU::Point>&)'
SLAM.TrackMonocular(im,tframe,-1,vImuMeas); // TODO を monocular_inertial に変更します

/home/llw/Guide_blind/AdaptSLAM/Sim
AdaptSLAM/Examples_old/Monocular/mono_kitti.cc: 関数 'int
main(int, char**)' 内: /home/llw/Guide_blind/AdaptSLAM/Sim
AdaptSLAM/Examples_old/Monocular/ mono_kitti.cc:109:97: エラー: 'ORB_SLAM3::System::TrackMonocular(cv::Mat&, double&, int, std::vector<ORB_SLAM3::IMU::Point>, __gnu_cxx:)
の呼び出しに一致する関数がありません: :__alloc_traits<std::allocator<std::__cxx11::basic_string ::value_type&)' onocular(im,tframe,-1,vector<ORB_SLAM3::IMU::Point>(), vstrImageFilenames[ni]);




解決策 1:
3 つのエラー ファイルを開いてエラー コードを見つけ、-1 を削除します。呼び出された System.cc ファイルにはパラメータ -1 の定義と型がなく、なぜ - があるのか​​不明であるためです。 1.
最後に make -j4 が成功しました

エラー 2:

/opt/ros/melodic/share/ros/core/rosbuild/private.cmakeでの例外 CMake エラー:99
(メッセージ): [rosbuild] rospackが「/opt/ros/melodic/share/ORB_SLAM3」
でパッケージ「ORB_SLAM3」を見つけました
, ただし、カレントディレクトリは
「/home/llw/Guide_blind/AdaptSLAM/Sim
AdaptSLAM/Examples_old/ROS/ORB_SLAM3」となっています。ROS_PACKAGE_PATHを再確認して、
パッケージが正しい
優先順位で見つかっていることを確認する必要があります。

解決策 1:
gedit ~/.bashrc パスを変更し、AdaptSLAM/Sim-AdaptSLAM/Examples_old/ROS パスを追加します。

gedit ~/.bashrc 
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/xxx/AdaptSLAM/Sim-AdaptSLAM/Examples_old/ROS
source ~/.bashrc 

解決に失敗しました。

解決策 2:
多くの解決策では、環境変数が設定されておらず、環境変数を bashrc またはその他のファイルに追加して
環境変数を確認すると記載されていますが、私は解決策 1 を使用しましたが、確認できず、
その後使用しました以前の解決策は、ソフト リンク ORB_SLAM3 を作成した後、
まず /opt/ros/melodic/share ディレクトリに移動し、元の ORB_SLAM3 ソフト リンク (存在する場合) を削除します。

sudo rm -r ORB_SLAM3

/opt/ros/melodic/share ディレクトリにソフト リンクを作成します。

sudo ln -s /home/xxx/Guide_blind/ORB_SLAM3/Examples/ROS/ORB_SLAM3 /opt/ros/melodic/share/ORB_SLAM3

実際、私は以前に ORB SLAM の他のバリアントを実行したことがあります。そのとき、ROS は /opt/ros/melodic/share フォルダーの下にソフト リンク ORB_SLAM3 を作成します。現在のプロジェクトでは、元のソフト リンクを現在のワークスペースに置き換える必要があります。 . 道を下ります。

エラー 3:

CMakeLists.txt:37 (メッセージ) の CMake エラー: OpenCV > 2.4.3 が
見つかりません。

以前は OpenCV のバージョンの問題もありました。CMakeLists.txt ファイルを直接変更してください

find_package(OpenCV 4.0 QUIET)

エラー 4:

./build_ros.sh を実行し続けると、いくつかの問題が発生し続けるため、以前のブログでこれらの問題の詳細な解決策を説明しましたが、今回はいくつかの新しい異なるエラーが発生したため、新しい記録を作成します。

質問 1:
ここに画像の説明を挿入
sophus ライブラリが見つからないというメッセージが表示されます。Examples/ROS/ORB_SLAM3 にある CMAKELISTS を変更して追加し、次のように変更します。

${PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus

質問 2:

AdaptSLAM/Sim-AdaptSLAM/Examples_old/ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc:151:41:
エラー: 「Sophus::SE3f {aka Sophus::SE3}」から
非スカラー型「cv::」への変換Mat' がリクエストした
cv::Mat Tcw = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());
#include <固有/密>
#include <opencv2/core/eigen.hpp>

ROS/ORB_SLAM3/src/AR/ros_mono_ar.cc の 151 行目を削除し、次の行に置き換えます。

cv::Mat Tcw;
Sophus::SE3f Tcw_SE3f = mpSLAM->TrackMonocular(cv_ptr->image,cv_ptr->header.stamp.toSec());
Eigen::Matrix4f Tcw_Matrix = Tcw_SE3f.matrix();
cv::eigen2cv(Tcw_Matrix, Tcw);

2 つのヘッダー ファイルを導入します

#include <固有/密>
#include <opencv2/core/eigen.hpp>

質問 3:

AdaptSLAM/Sim-AdaptSLAM/Examples_old/ROS/ORB_SLAM3/src/AR/ViewerAR.cc:
メンバー関数 'void ORB_SLAM3::Plane::Recompute()' 内:
/home/llw/Guide_blind/AdaptSLAM/Sim-AdaptSLAM/Examples_old /ROS/ORB_SLAM3/src/AR/ViewerAR.cc:530:42:
エラー: 'Eigen::Vector3f {aka Eigen::Matrix<float, 3,
1>}' から非スカラー型 'cv:: への変換Mat' が要求した
cv::Mat Xw = pMP->GetWorldPos();

ROS/ORB_SLAM3/src/AR/ViewerAR.cc の 530 行目を削除し、次の行に置き換えます。

cv::Mat Xw;
cv::eigen2cv(pMP->GetWorldPos(), Xw);

2 つのヘッダー ファイルを導入します

#include <固有/密>
#include <opencv2/core/eigen.hpp>

質問 4:


エラー: 'std::vectorcv::Mat::push_back(Eigen::Vector3f)'
vPoints.push_back(pMP->GetWorldPos())の呼び出しに一致する関数がありません。

ROS/ORB_SLAM3/src/AR/ViewerAR.cc 行 408 を削除し、次の行に置き換えます。

cv::Mat WorldPos;
cv::eigen2cv(pMP->GetWorldPos(), WorldPos);
vPoints.push_back(WorldPos);

2 つのヘッダー ファイルを導入します

#include <固有/密>
#include <opencv2/core/eigen.hpp>

質問 5:

/home/llw/Guide_blind/AdaptSLAM/Sim-AdaptSLAM/Examples_old/ROS/ORB_SLAM3/src/ros_mono_inertial.cc:
メンバー関数 'void ImageGrabber::SyncWithImu()' 内:
/home/llw/Guide_blind/AdaptSLAM/Sim-AdaptSLAM /Examples_old/ROS/ORB_SLAM3/src/ros_mono_inertial.cc:178:48: エラー:
'ORB_SLAM3::System::TrackMonocular(cv::Mat&, double&, int,
std::vector<ORB_SLAM3:)の呼び出しに一致する関数がありません: :IMU::Point>&)'
mpSLAM->TrackMonocular(im,tIm,-1,vImuMeas);

上記のエラー コードを見つけて、-1 を削除します。呼び出された System.cc ファイルには、-1 パラメーターの定義と型がなく、なぜ -1 があるのか​​不明であるためです。

質問6:

/usr/bin/ld: 警告: libopencv_xxx.so.3.4、…/…/…/…/lib/libORB_SLAM3.so が必要、見つかりません (-rpath または -rpath-link を使用してみてください)

.../.../.../.../lib/libORB_SLAM3.so: 'cv::xxx' への未定義の参照

一歩間違っていて、cv::xxxはC言語のopencv3.xのライブラリと関数ですが、前回のedgeSLAM試行でrosのopencv3.2を削除し、今はopencv4を呼び出しているため、ros環境を再構築する必要がありますこの問題を解決できます。

ROSを再インストールする

次のコマンドを入力して、ros を段階的にアンインストールします。

//先卸载ros包
sudo apt-get purge ros-*
//删除ros相关依赖和配置
sudo apt-get autoremove

スクリプト コマンドを使用して ROS を直接インストールするのは非常に簡単ですが、スクリプトのインストール時のオプションの選択に注意する必要があります。

wget http://fishros.com/install -O fishros && . fishros

スクリプトがインストールされたら、このブログの 6.rosdep init 初期化手順に直接スキップして、タートルを描画します。

QT 環境が仮想環境で競合します。
たとえば、pyqt は anaconda によって作成された仮想環境に存在しますが、これは cv2 に付属する libqxcb.so バージョンと競合します。cv2.imshow を使用する場合は、pyqt の libqxcb.so が優先されます。上記の読み込みエラーが発生します。

解決策も非常に簡単で、anaconda で pyqt をアンインストールします。

conda remove pyqt5
pip uninstall pyqt5

おすすめ

転載: blog.csdn.net/qq_45848817/article/details/127741078