opt文件夹下没有ros_ubuntu16.04下ROS操作系统学习笔记(二)
做SLAM的硬件要求(不一定是必須的,看包和庫的依賴):
(1):差分輪式機器人,可以使用Twist速度指令控制,需要線速度和角速度。
(2):需要激光雷達、深度攝像頭等測距設備,可以獲取環境深度信息。
(3):最好使用正方形和圓形的機器人,其他外形的機器人雖然可以正常使用,但是效果可能不佳。機器人的深度信息里面需要包含什么內容。可以通過以下命令來對其進行查看:
rosmsg show sensor_msgs/LaserScan
最上面三行包括序列、時間戳、坐標系。下面的話就是一些關于激光雷達的數據:angle_min:可檢測范圍的起始角度。angle_max:可檢測范圍的終止角度,與angle_min組成激光雷達的可檢測范圍。像從-180度到+180度就是360度的范圍。angle_increment:相鄰數據幀之間的角度步長。time_increment:采集到相鄰數據幀之間的時間步長,當傳感器處于相對運動狀態時進行補償使用。scan_time:采集一幀數據所需的時間。range_min:最近可檢測深度的閾值。range_max:最遠可檢測深度的閾值。ranges:一幀深度數據的存儲數組(深度數據的具體內容)。
最后面的intensities代表的是激光的反光屬性,等等的這樣一些性質。一般的低成本雷達在強度這一塊是用不到的。高端的雷達才會使用它做輔助判斷。
除了激光雷達,深度攝像頭也是可以采集深度信息的,像kinetic這樣的攝像頭就可以。在ros里面depthimage_to_laserscan功能包就能把三維點云數據轉換成二維的激光雷達數據。但是深度攝像頭的精度不高。機器人里面的里程計信息
你可以通過下面的命令查看一下里程計信息:
rosmsg show nav_msgs/Odometry
里面主要包含兩個內容,一個是pose,一個是twist。
pose:機器人當前位置坐標,包括機器人的XYZ三軸位置與方向參數,以及用于校正誤差的協防差矩陣。里面有位置信息position和姿態信息orientation。
twist:機器人當前的運動狀態,包括XYZ三軸的線速度與角速度,以及用于校正誤差的協防差矩陣。
在這里的話,我們主要以仿真環境來演示效果:
代碼的包在教學視頻的文件里面有,我們打開一個終端運行以下命令:
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
運行成功之后會打開下面這樣的一個界面:
接下來我們看一下一些SLAM的功能包:Gmapping功能包:
基于激光雷達的功能包,采用Rao-Blackwellized粒子濾波算法創建二維柵格地圖。調用gmapping功能包的時候需要給它三個信息的輸入:(1):深度信息。(2):IMU信息。(3)里程計信息。gmapping的算法來自于OpenSlam的開源算法。輸出是nav_msgs/OccupancyGrid這樣的柵格地圖。
我們可以通過以下方式對其進行安裝:
sudo apt-get install ros-kinetic-gmapping
gmapping里面有一個核心的節點,我們要使用gmapping建圖的話我們就需要去啟動這個核心的節點。啟動的方式是使用.launch文件來啟動的。因為這里面有很多參數需要去配置。改變這個參數能夠改變我們建圖的效果。但是如果我們只是為了能夠使用建圖功能的話,我們可以去參考turtlebot機器人的建圖功能就可以了。我們可以去roswiki上面看一下功能包的使用方法。
輸入以下命令:
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
roslaunch mbot_navigation gmapping_demo.launch
roslaunch mbot_teleop mbot_teleop.launch
建圖完成之后效果如下:
我們可以通過下面這個命令來將地圖保存:
rosrun map_server map_saver -f cloister_gmappingg
可能會沒有安裝功能包,所以我們需要安裝功能包:
git clone https://github.com/ros-planning/navigation.git
之后回到工作空間目錄下面catkin_make。
可能會需要依賴:
sudo apt-get install ros-kinetic-tf2-sensor-msgs
這種安裝方式不會使得你出現以下這種錯誤:
[rosrun] Couldn't find executable named map_save below /opt/ros/kinetic/share/map_server
保存之后會有兩個文件:
第一個是一張圖片,第二個是一些說明文件:
第一個是圖片的名稱,第二個是圖片的分辨率,0.05米,origin代表的是機器人的位置,下一次導航的時候可以把機器人放到這個位置。Hector_slam功能包:
基于激光雷達建圖,采用高斯牛頓方法,是二維柵格地圖,不需要里程計數據,輸出地圖話題。可以通過以下命令對其進行安裝:
sudo apt-get install ros-kinetic-hector-slam
接下來我們來啟動演示一下:
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
roslaunch mbot_navigation hector_demo.launch
roslaunch mbot_teleop mbot_teleop.launch
效果如下:
但是這種方法如果機器人運動的速度過大的話就會使得建圖出現偏差。建圖過程中特征點比較多的話,建圖效果會比較好。Cartographer功能包:
這個功能包是2016年10月5日谷歌開源的基于圖網絡的優化方法,是一種二維或三維條件下的定位及建圖功能,設計的目的是在計算資源有限的情況下,實時獲取相對較高精度的2D地圖,主要是基于激光雷達,后面會支持更多傳感器和機器人平臺,同時不斷增加新的功能。安裝:
安裝工具:
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build
創建一個名字為google_ws的文件夾作為我們的工作空間:
wstool init src wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall wstool update -t src
上面第二步可能會有網絡問題,我們可以到src目錄下面ctrl+h打開隱藏文件夾,修改里面第三個包的下載地址: https://github.com/ceres-solver/ceres-solver.git
下載功能包:
src/cartographer/scripts/install_proto3.sh
lsb_release -a
查看自己的ubuntu版本號:
rosdep update rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y --os=ubuntu:xenial
這里我之前由于沒有加后面這個os報錯如下,加了之后就沒有了:
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
cartographer: No definition of [eigen] for OS version []
ceres-solver: No definition of [eigen] for OS version []
編譯功能包:
catkin_make_isolated --install --use-ninja source install_isolated/setup.bash #當前終端有效
接下來我們可以演示一下效果:
下載 2D SLAM Demo:
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
啟動 2D SLAM Demo:
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
下載 3D SLAM Demo:
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/with_intensities/b3-2016-04-05-14-14-00.bag
啟動 3D SLAM Demo:
roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag
下載PR2 Demo:
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/pr2/2011-09-15-08-32-46.bag
啟動PR2 :roslaunch cartographer_ros demo_pr2.launch bag_filename:=~/Downloads/2011-09-15-08-32-46.bagORB_SLAM功能包
基于特征點的實時單目SLAM系統,實時解算攝像機的移動軌跡,構建三維點云地圖,不僅適用與手持設備獲取的一組連續圖像,也可以應用于汽車行駛過程中獲取的連續圖像。
安裝:
安裝工具&下載源碼:
sudo apt-get install libboost-all-dev libblas-dev liblapack-dev
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
安裝eigen3.2
去官網下載:http://eigen.tuxfamily.org/index.php?title=Main_Page
解壓源碼包,并進入目錄:
mkdir build
cd build
cmake ..
make
sudo make install
編譯安裝Pangolin
sudo apt-get install libglew-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
編譯g2o:
cd ~/ORB_SLAM2/Thirdparty/g2o/
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
編譯DBoW2:
cd ~/ORB_SLAM2/Thirdparty/DBoW2/
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
編譯ORM_SLAM:
cd ~/ORB_SLAM2
chmod +x build.sh
./build.sh
在make -j4這一步的時候,如果你遇到了error: ‘usleep’ was not declared in this scope,這種問題的話,你需要找到出錯的文件,添加頭文件:
#include <unistd.h>
Examples/Monocular/http://mono_euroc.cc Examples/Monocular/http://mono_kitti.cc Examples/Monocular/http://mono_tum.cc Examples/RGB-D/http://rgbd_tum.cc Examples/Stereo/http://stereo_euroc.cc Examples/Stereo/http://stereo_kitti.cc src/http://LocalMapping.cc src/http://LoopClosing.cc src/http://System.cc src/http://Tracking.cc src/http://Viewer.cc
爆炸,我之前裝的是opencv3,裝不上去,不想卸載,也不想裝兩個版本opencv,以后再說。https://github.com/raulmur/ORB_SLAM2
總結
以上是生活随笔為你收集整理的opt文件夹下没有ros_ubuntu16.04下ROS操作系统学习笔记(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python程序结构有哪几种_三、pyt
- 下一篇: eclipse创建springboot项