ROS的安装
ros的安装过程非常简单,可以参考官方文档,在终端中输入下列命令即可:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt install curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt update
sudo apt install ros-noetic-desktop-full
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo apt install python3-rosdep
sudo rosdep init
rosdep update
这一过程中唯一可能出现问题的就是sudo rosdep init
rosdep update中的网络问题。
ROS中opencv版本的问题
在安装了ROS后orin的系统上可能存在三种opencv环境,第一个是orin安装时安装的opencv,一个是安装ROS时安装的opencv,还有就是自身需要的opencv版本。这三个版本可能会有冲突,导致ROS中的opencv无法使用,尤其是cv_bridge可能会出现问题。
这里提供一种解决方案,首先是在刷机后首先卸载自带的opencv,在终端中输入如下指令:
sudo apt-get purge libopencv*
sudo apt autoremove
sudo apt-get update
如果在catkin_make的时候出现如下错误,则可能是自己环境需要的opencv与ROS安装的opencv产生了冲突,导致了cv_bridge的错误,错误显示如下:
/usr/bin/ld: warning: libopencv_imgproc.so.3.3, needed by /usr/local/lib/libopencv_highgui.so.3.3.1, may conflict with libopencv_imgproc.so.4.2
/usr/bin/ld: CMakeFiles/tracker_eco_node.dir/eco_camera.cpp.o: in function `eco::SampleUpdate::SampleUpdate()':
eco_camera.cpp:(.text._ZN3eco12SampleUpdateC2Ev[_ZN3eco12SampleUpdateC5Ev]+0x24): undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: eco_camera.cpp:(.text._ZN3eco12SampleUpdateC2Ev[_ZN3eco12SampleUpdateC5Ev]+0x30): undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: CMakeFiles/tracker_eco_node.dir/eco_camera.cpp.o: in function `eco::ScaleFilter::ScaleFilter()':
eco_camera.cpp:(.text._ZN3eco11ScaleFilterC2Ev[_ZN3eco11ScaleFilterC5Ev]+0x3c): undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: CMakeFiles/tracker_eco_node.dir/eco_camera.cpp.o: in function `Eco_Tracker::Eco_Tracker()':
eco_camera.cpp:(.text._ZN11Eco_TrackerC2Ev[_ZN11Eco_TrackerC5Ev]+0x114): undefined reference to `cv::Mat::Mat()'
/usr/bin/ld: eco_camera.cpp:(.text._ZN11Eco_TrackerC2Ev[_ZN11Eco_TrackerC5Ev]+0x164): undefined reference to `cv::Mat::Mat()'
collect2: error: ld returned 1 exit status
make[2]: *** [tracker_eco/CMakeFiles/tracker_eco_node.dir/build.make:207: /home/rislab/wqb_ws/devel/lib/tracker_eco/tracker_eco_node] Error 1
make[1]: *** [CMakeFiles/Makefile2:1049: tracker_eco/CMakeFiles/tracker_eco_node.dir/all] Error 2
make: *** [Makefile:141: all] Error 2
Invoking "make -j12 -l12" failed
解决方案如下:
首先卸载ROS自己安装的cv_bridge,按照如下命令:
sudo apt-get remove ros-noctic-cv-bridge
然后在github下载对应ROS版本的cv_bridge,进入下载后的文件夹后,执行如下命令:
mkdir build
cd build
cmake ..
make
sudo make install
然后在需要opencv的包的cmakeLists.txt文件中将以下命令加入到find_package之前
set(cv_bridge_DIR /usr/local/share/cv_bridge/cmake)
之后在运行catkin_make就可以了!
但是笔者之后又发现python脚本中import cv_bridge运行会显示没有cv_bridge模块,只要再把ros-noctic-cv-bridge下下来就好了:
sudo apt-get install ros-noctic-cv-bridge