http://t.csdn.cn/QIQDr
这是当时操作的主参考教程
本机上已经有ros-melodic,ros安装可以参考其他博主的教程,或者我写的新手安装笔记
为之前安装的时候睬了很多坑,后来又因为目标检测yolov5、pytorch什么的重装了好几次系统,被迫生出来的经验
建议安装anaconda使用conda环境,这会很方便,并且减少之前可能出现的错误
(我以下都在我之前创建的conda环境中景象,每次操作前都操作
conda activate yt(yt是我创建的环境envs的名字)
这个指令,在这个环境(其实就是相当于一个容器,我感觉更像u型管,因为与外部大环境其实相关联的)
本机已有opencv,我之前在conda创建新环境的时候看到当时创建的时候已经有opencv了,如果没有的花可以按照其他的博主的教程进行安装,当然安装前要记得检测自己的机子上是否已经安装有opencv,不然重复下载可能会出错(由于文件名重复什么的),然后可以使参考上面那个博主的教程测试是否安装正确
wget -O ~/下载/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2.zip
cd ~/下载/ && unzip gtsam.zip -d ~/下载
/
cd ~/下载/gtsam-4.0.0-alpha2/
mkdir build && cd build
cmake ..
sudo make install
4.1安装VTK
4.1.1 在按照VTK之前,要安装依赖库X11,OpenGL和CMake-gui
首先安装X11
sudo apt-get install libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev
安装OpenGL
sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev
安装 CMake-gui
sudo apt-get install cmake cmake-gui
4.1.2 下载VTK源代码
下载链接:https://www.vtk.org/download/
解压
PCL和VTK可能存在版本需求,截止安装日2020年3月9日,PCL官网版本为1.11,(可以在/usr/include中寻找自己的PCL版本。)这里我下载的VTK版本是7.1.1,选择下图中的,VTK-7.1.1.zip,下载完成后解压缩到文件夹,自定义安装目录(我在home/yt/下载里创建了一个文件夹VTK,从官网下载之后的zip解压到这个新建的文件夹中)。(亲测可以使用。具体对应关系还不清楚惹。)
4.1.3 安装VTK
(1) 终端输入下指令,启动cmake-gui;
cmake-gui
(2) 设置where is the source code:的路径为文件夹VTK-7.1.1所在路径,如这里是/home/js/VTK-7.1.1;
(3) 设置where to build the binaries:的路径为/home/js/VTK-7.1.1/build,即在/home/VTK-7.1.1的路径下新建文件夹build;如下图
(4) 点击“Configure”,在弹出对话框中选择“Current Generator”为“Unix MakeFiles”,完成之后会提示“Configuring done”;
(5) 然后在里面勾选“VTK_GROUP_Qt”选项,再次点击“Configure”按钮,若提示警告信息,需要设置Qt安装路径,则设置路径后,再次点击“Configure”按钮;
(6) 提示“Configure done”,点击“Generate”按钮,在vtk_build会生成工程文件,完成之后会提示“Generating done”,如下图
(7) cd到vtk目录下的build文件夹,若没有则在使用$mkdir build来创建
(8)编译
在这个路径下
(yt) yt@yt-Legion-Y7000P-IAH7:~/下载/VTK/VTK-7.1.1/build$
依次执行下面三个指令
cmake ..
sudo make
sudo make install
第一个指令结果
-- Check size of short
-- Check size of short - done
-- Check size of int
-- Check size of int - done
-- Check size of long
-- Check size of long - done
-- Check size of long long
-- Check size of long long - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/yt/下载/VTK/VTK-7.1.1/build
第二个指令结果
[100%] Building CXX object Views/Infovis/CMakeFiles/vtkViewsInfovis.dir/vtkSCurveSpline.cxx.o
[100%] Building CXX object Views/Infovis/CMakeFiles/vtkViewsInfovis.dir/vtkTanglegramItem.cxx.o
[100%] Building CXX object Views/Infovis/CMakeFiles/vtkViewsInfovis.dir/vtkTreeAreaView.cxx.o
[100%] Building CXX object Views/Infovis/CMakeFiles/vtkViewsInfovis.dir/vtkTreeHeatmapItem.cxx.o
[100%] Building CXX object Views/Infovis/CMakeFiles/vtkViewsInfovis.dir/vtkTreeMapView.cxx.o
[100%] Building CXX object Views/Infovis/CMakeFiles/vtkViewsInfovis.dir/vtkTreeRingView.cxx.o
[100%] Building CXX object Views/Infovis/CMakeFiles/vtkViewsInfovis.dir/vtkViewUpdater.cxx.o
[100%] Linking CXX shared library ../../lib/libvtkViewsInfovis-7.1.so
[100%] Built target vtkViewsInfovis
第三个指令结果
-- Installing: /usr/local/include/vtk-7.1/vtkRenderedHierarchyRepresentation.h
-- Installing: /usr/local/include/vtk-7.1/vtkRenderedRepresentation.h
-- Installing: /usr/local/include/vtk-7.1/vtkRenderedSurfaceRepresentation.h
-- Installing: /usr/local/include/vtk-7.1/vtkRenderedTreeAreaRepresentation.h
-- Installing: /usr/local/include/vtk-7.1/vtkRenderView.h
-- Installing: /usr/local/include/vtk-7.1/vtkSCurveSpline.h
-- Installing: /usr/local/include/vtk-7.1/vtkTanglegramItem.h
-- Installing: /usr/local/include/vtk-7.1/vtkTreeAreaView.h
-- Installing: /usr/local/include/vtk-7.1/vtkTreeHeatmapItem.h
-- Installing: /usr/local/include/vtk-7.1/vtkTreeMapView.h
-- Installing: /usr/local/include/vtk-7.1/vtkTreeRingView.h
-- Installing: /usr/local/include/vtk-7.1/vtkViewUpdater.h
-- Installing: /usr/local/include/vtk-7.1/vtkViewsInfovisModule.h
至此,VTK安装完成
更新一下
sudo apt-get update
pcl
:
sudo apt-get install libpcl-dev pcl-tools
安装OpenGL
相关的包
sudo apt-get install freeglut3-dev
此时安装完成
这里安装参考了点这个博主的内容http://t.csdn.cn/3ChEw
测试代码pcl_test.cpp:
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv) {
std::cout << "Test PCL !!!" << std::endl;
pcl::PointCloud::Ptr point_cloud_ptr (new pcl::PointCloud);
uint8_t r(255), g(15), b(15);
for (float z(-1.0); z <= 1.0; z += 0.05)
{
for (float angle(0.0); angle <= 360.0; angle += 5.0)
{
pcl::PointXYZRGB point;
point.x = 0.5 * cosf (pcl::deg2rad(angle));
point.y = sinf (pcl::deg2rad(angle));
point.z = z;
uint32_t rgb = (static_cast(r) << 16 |
static_cast(g) << 8 | static_cast(b));
point.rgb = *reinterpret_cast(&rgb);
point_cloud_ptr->points.push_back (point);
}
if (z < 0.0)
{
r -= 12;
g += 12;
}
else
{
g -= 12;
b += 12;
}
}
point_cloud_ptr->width = (int) point_cloud_ptr->points.size ();
point_cloud_ptr->height = 1;
pcl::visualization::CloudViewer viewer ("test");
viewer.showCloud(point_cloud_ptr);
while (!viewer.wasStopped()){ };
return 0;
}
可以用txt文本写,然后改后缀就就行了,改成.cpp,就会变成c语言的文件了
CMakeLists.txt文件:
cmake_minimum_required(VERSION 2.6)
project(pcl_test)
find_package(PCL 1.2 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable(pcl_test pcl_test.cpp)
target_link_libraries (pcl_test ${PCL_LIBRARIES})
install(TARGETS pcl_test RUNTIME DESTINATION bin)
将pcl_test.cpp和CMakeLists.txt放在同一个文件夹下,如下图(具体文件夹没有要求):
(我的)
执行:
cmake .
make
./pcl_test
第一个指令结果
TypeFontConfig;vtkRenderingImage;vtkRenderingLIC;vtkRenderingLOD;vtkRenderingMatplotlib;vtkRenderingParallel;vtkRenderingParallelLIC;vtkRenderingQt;vtkRenderingVolumeAMR;vtkRenderingVolumeOpenGL;vtkTestingGenericBridge;vtkTestingIOSQL;vtkTestingRendering;vtkViewsContext2D;vtkViewsGeovis;vtkWrappingJava (Required is at least version "1.2")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/yt/下载/folder
第二个指令结果
(yt) yt@yt-Legion-Y7000P-IAH7:~/下载/folder$ make
Scanning dependencies of target pcl_test
[ 50%] Building CXX object CMakeFiles/pcl_test.dir/pcl_test.cpp.o
In file included from /home/yt/下载/folder/pcl_test.cpp:5:0:
/usr/include/pcl-1.8/pcl/visualization/cloud_viewer.h:202:14: warning: ‘template class std::auto_ptr’ is deprecated [-Wdeprecated-declarations]
std::auto_ptr impl_;
^~~~~~~~
In file included from /usr/include/c++/7/memory:80:0,
from /usr/include/boost/config/no_tr1/memory.hpp:21,
from /usr/include/boost/smart_ptr/shared_ptr.hpp:23,
from /usr/include/boost/shared_ptr.hpp:17,
from /usr/include/pcl-1.8/pcl/pcl_base.h:48,
from /usr/include/pcl-1.8/pcl/common/common.h:41,
from /usr/include/pcl-1.8/pcl/common/common_headers.h:39,
from /home/yt/下载/folder/pcl_test.cpp:2:
/usr/include/c++/7/bits/unique_ptr.h:51:28: note: declared here
template class auto_ptr;
^~~~~~~~
[100%] Linking CXX executable pcl_test
[100%] Built target pcl_test
第三个指令结果
(yt) yt@yt-Legion-Y7000P-IAH7:~/下载/folder$ ./pcl_test
Test PCL !!!
^C
这里我出现了另外一个窗口,右下角那个
准备跑包
(最开头我放的那个连接的那个博主有教数据集怎么弄,bag怎么弄,我这里用的是学长给的我们学校湖泊的bag,还有数据集是我们自己之前弄的,需要数据集的可以参考那篇博客)
在跑bag之前需要有工作空间
这里参考了这个博主的博客http://t.csdn.cn/6pHCK
创建当前工作空间路径,并使用catkin_make进行第一次编译。
# mkdir创建文件夹,-p可以创建多级文件夹
# 后面的路径可以自己指定
mkdir -p ~/catkin_ws/src
# 切换到创建的文件路径
cd ~/catkin_ws/
# catkin_make是ros自带的命令,类似于我们学习的Cmake .. 和 make
catkin_make
我们可以在刚才创建的文件夹中找到一个新生成的devel文件夹,内部包含了很对*sh文件,使用source激活里面的setup.bash激活当前环境。
# 激活当前环境
source devel/setup.bash
随后使用下述命令,查看是否激活成功。
$ echo $ROS_PACKAGE_PATH
若返回的结果类似于如下形式,则证明环境激活成功。
/home/youruser/catkin_ws/src:/opt/ros/melodic/share
如果在运行中出现如下报错
错误描述:[×××.launch]is neither a launch file in package [××] nor is [××] a launch file name. The traceback for the exception was written to the file
解决办法: 这里参考了这个博主的博客http://t.csdn.cn/Xcknr
cd ~/catkin_ws
source devel/setup.bash
(但是这个的花可能下次同样的指令下次还会出现这杨的报错,然后再用这个指令解决,相当于每次都需要激活环境)
catkin_ws 是你的工作空间的名称,但是这样只是暂时解决了,本次有效。
一劳永逸的解决办法是:
打开.bashrc文件
gedit ~/.bashrc
把下面这句话添加进去,保存文件
source ~/catkin_ws/devel/setup.bash
这个指令我进行了更改,因为我这里出现了没有找到这个路径这个文件这样的报错,然后我打开了这个路径下知照例setup.bash这个文件,所以进行了更改
再在终端执行
source ~/.bashrc
然后我输入了上面所说的那个查看是否激活成功指令,返回结果正确,ok,完成
catkin_ws中新建dataset文件夹,保存数据包
我将学长给的bag直接拷贝到了这个文件夹中
cd ~/catkin_ws/src
git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git
cd ..
catkin_make -j1
编译完成示意图:
打开终端输入
roslaunch lego_loam run.launch
我这里就出现了我上面说的工作空间的问题,然后像上面说的那样解决了
cd到数据集文件夹下面,重新开启一个终端,输入
rosbag play --clock rrt13.bag
(rrt13.bag是我的bag的名字)
成功完成!!!耶!!!overover!!!