Ubuntu ROS安装

2023-01-06
7分钟阅读时长

在Ubuntu上安装ROS

Ubuntu 安装

实体机和虚拟机上都行,去官网下ubuntu 22.04就行,要desktop版本

https://releases.ubuntu.com/

如果需要kde桌面可以下kubuntu

https://kubuntu.org/

如果要使用gazebo等比较大型的图形软件,那么建议用有显卡性能别太弱的物理机,虚拟机建议还是用vmware的。

ROS1

melodic

ubuntu 18.04

暂略

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

sudo apt install -y ros-melodic-desktop-full

sudo apt install -y python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
sudo rosdep init
rosdep update

一堆包:

software_version=melodic
#
sudo apt-get install ros-${software_version}-serial
sudo apt-get install -y ros-${software_version}-navigation
sudo apt-get install -y ros-${software_version}-robot-localization
sudo apt-get install -y ros-${software_version}-robot-state-publisher
#
sudo apt install -y ros-${software_version}-joy 
sudo apt install -y ros-${software_version}-move-base 
sudo apt install -y ros-${software_version}-mrpt* 
sudo apt install -y ros-${software_version}-geographic-msgs 
sudo apt install -y ros-${software_version}-map-server 
sudo apt install -y ros-${software_version}-gmapping 
sudo apt install -y ros-${software_version}-amcl 
sudo apt install -y ros-${software_version}-rviz-imu-plugin 
sudo apt install -y ros-${software_version}-dwa-local-planner 
sudo apt install -y ros-${software_version}-controller-manager
sudo apt install -y ros-${software_version}-effort-controllers
sudo apt install -y ros-${software_version}-joint-state-controller 
sudo apt install -y ros-${software_version}-driver-base 
sudo apt install -y ros-${software_version}-rtabmap-ros
sudo apt install -y ros-${software_version}-ackermann-msgs
sudo apt install -y ros-${software_version}-teb-local-planner 
sudo apt install -y ros-${software_version}-open-karto
sudo apt install -y ros-${software_version}-slam-karto 
sudo apt install -y ros-${software_version}-roslint
sudo apt install -y ros-${software_version}-joint-state-publisher-gui
sudo apt install -y ros-${software_version}-ros-controllers
sudo apt install -y ros-${software_version}-global-planner
sudo apt install -y ros-${software_version}-driver-base
sudo apt install -y ros-${software_version}-cv-bridge 
sudo apt install -y ros-${software_version}-image-geometry

sudo apt install -y ros-${software_version}-gazebo-ros-pkgs ros-${software_version}-gazebo-ros-control ros-${software_version}-ros-controllers ros-${software_version}-twist-mux

sudo apt-get install -y ros-${software_version}-cv-bridge ros-${software_version}-tf ros-${software_version}-message-filters ros-${software_version}-image-transport ros-${software_version}-image-transport*
    
sudo apt install -y libignition-math4-dev 
sudo apt install -y ros-${software_version}-libnabo
sudo apt install -y ros-${software_version}-libpointmatcher

加入环境(可选)

echo "source ~/robot_ws/devel/setup.bash" >> ~/.bashrc 
source ../.bashrc

noetic

ubuntu 20.04

#ubuntu 换源
sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list
#添加ros源, 使用清华源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
#增加key

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
#或者增加key
curl -sSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add -

sudo apt update
sudo apt install ros-noetic-desktop-full
#把ros环境加载脚本添加到bashrc
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
#安装rosdep
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
#添加清华源 
echo "export ROSDISTRO_INDEX_URL=https://mirrors.tuna.tsinghua.edu.cn/rosdistro/index-v4.yaml" >> ~/.bashrc

更新
sudo rosdep init
rosdep update

一堆包:

software_version=noetic
#
sudo apt-get install ros-${software_version}-serial
sudo apt-get install -y ros-${software_version}-navigation
sudo apt-get install -y ros-${software_version}-robot-localization
sudo apt-get install -y ros-${software_version}-robot-state-publisher
#
sudo apt install -y ros-${software_version}-joy 
sudo apt install -y ros-${software_version}-move-base 
sudo apt install -y ros-${software_version}-mrpt* 
sudo apt install -y ros-${software_version}-geographic-msgs 
sudo apt install -y ros-${software_version}-map-server 
sudo apt install -y ros-${software_version}-gmapping 
sudo apt install -y ros-${software_version}-amcl 
sudo apt install -y ros-${software_version}-rviz-imu-plugin 
sudo apt install -y ros-${software_version}-dwa-local-planner 
sudo apt install -y ros-${software_version}-controller-manager
sudo apt install -y ros-${software_version}-effort-controllers
sudo apt install -y ros-${software_version}-joint-state-controller 
sudo apt install -y ros-${software_version}-driver-base 
sudo apt install -y ros-${software_version}-rtabmap-ros
sudo apt install -y ros-${software_version}-ackermann-msgs
sudo apt install -y ros-${software_version}-teb-local-planner 
sudo apt install -y ros-${software_version}-open-karto
sudo apt install -y ros-${software_version}-slam-karto 
sudo apt install -y ros-${software_version}-roslint
sudo apt install -y ros-${software_version}-joint-state-publisher-gui
sudo apt install -y ros-${software_version}-ros-controllers
sudo apt install -y ros-${software_version}-global-planner
sudo apt install -y ros-${software_version}-driver-base
sudo apt install -y ros-${software_version}-cv-bridge 
sudo apt install -y ros-${software_version}-image-geometry

sudo apt install -y ros-${software_version}-gazebo-ros-pkgs ros-${software_version}-gazebo-ros-control ros-${software_version}-ros-controllers ros-${software_version}-twist-mux

sudo apt-get install -y ros-${software_version}-cv-bridge ros-${software_version}-tf ros-${software_version}-message-filters ros-${software_version}-image-transport ros-${software_version}-image-transport*
    
sudo apt install libignition-math4-dev 
sudo apt install ros-${software_version}-libnabo
sudo apt install ros-${software_version}-libpointmatcher

加入环境(可选)

echo "source ~/robot_ws/devel/setup.bash" >> ~/.bashrc 
source ../.bashrc

gazebo9

livox仿真只支持到9

sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'

wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -

sudo apt-get update
sudo apt-get install -y gazebo9 libgazebo9-dev

sudo apt-get install -y ros-${software_version}-gazebo9-ros-pkgs ros-${software_version}-gazebo9-ros-control
sudo apt-get install -y  ros-${software_version}-gazebo-ros*

模型下载

cd ~/.gazebo/
ls
mkdir -p models
ls
cd ~/.gazebo/models/
wget http://file.ncnynl.com/ros/gazebo_models.txt
ls
#下载
wget -i gazebo_models.txt
#解压
ls model.tar.g* | xargs -n1 tar xzvf
rm -r model.tar.g*

gazebo11

software_version=noetic
sudo apt-get remove gazebo9 gazebo9-common gazebo9-plugin-base libgazebo9:amd64 libgazebo9-dev:amd64 ros-${software_version}-gazebo-*   

sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'

wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
 
sudo apt-get update
sudo apt-get install -y gazebo11 libgazebo11-dev ros-${software_version}-gazebo11-ros-pkgs ros-${software_version}-gazebo11-ros-control


 
 gazebo -version

卸载:

sudo apt-get remove -y gazebo11 libgazebo11-dev
sudo apt-get remove gazebo11 gazebo11-common gazebo11-plugin-base libgazebo11:amd64 libgazebo11-dev:amd64 ros-noetic-gazebo-*

依赖库安装

eigen

sudo apt-get install libeigen3-dev

pcl

点云库

尽量用库安装,直接编译很慢

预编译库安装

sudo apt-get install libcgal-dev pcl-tools

编译安装

依赖


sudo apt-get update
sudo apt-get install -y git build-essential linux-libc-dev
sudo apt-get install -y cmake cmake-gui
sudo apt-get install -y libusb-1.0-0-dev libusb-dev libudev-dev
sudo apt-get install -y mpi-default-dev openmpi-bin openmpi-common
sudo apt-get install -y libflann1.8 libflann-dev
sudo apt-get install -y libeigen3-dev
sudo apt-get install -y libboost-all-dev
sudo apt-get install -y libqhull* libgtest-dev  
sudo apt-get install -y freeglut3-dev pkg-config  
sudo apt-get install -y libxmu-dev libxi-dev   
sudo apt-get install -y mono-complete   
sudo apt-get install -y libopenni-dev   
sudo apt-get install -y libopenni2-dev 
sudo apt-get install -y libx11-dev libxext-dev libxtst-dev libxrender-dev libxmu-dev libxmuu-dev
sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev
sudo apt-get install -y cmake cmake-gui


编译安装

GHPROXY=https://ghproxy.com/
git clone ${GHPROXY}https://github.com/PointCloudLibrary/pcl.git
cd pcl
mkdir release
cd release
cmake -DCMAKE_BUILD_TYPE=None -DCMAKE_INSTALL_PREFIX=/usr \ -DBUILD_GPU=ON-DBUILD_apps=ON -DBUILD_examples=ON \ -DCMAKE_INSTALL_PREFIX=/usr ..
make  
sudo make install -j2  #很占内存 线程可以少一点

GTSAM

参考:

https://blog.csdn.net/weixin_40599145/article/details/126929222

git clone https://github.com/borglab/gtsam
cd gtsam
mkdir build && cd build
# 注意这里要加-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF这个选项,不然后面运行会报错
cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
sudo make install -j8
sudo ln -s /usr/local/lib/libmetis-gtsam.so /usr/lib/libmetis-gtsam.so

opencv

库安装编译安装二选一 注意ubuntu 18.04的默认opencv库为3.2.0

库安装
sudo apt update
sudo apt install libopencv-dev python3-opencv
pkg-config --cflags --libs opencv4

编译安装

以4.7.0版本为例

sudo apt-get install -y cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
GHPROXY=https://ghproxy.com/
#wget -O opencv_build.zip ${GHPROXY}https://github.com/opencv/opencv/archive/refs/tags/4.7.0.zip
unzip opencv_build.zip
wget -O opencv_build.zip ${GHPROXY}https://github.com/opencv/opencv/archive/refs/tags/3.4.16.zip
unzip opencv_build.zip
cd ~/opencv-*
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make install -j8
pkg-config --modversion opencv

echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig  " >> ~/.bashrc 
echo "export LD_LIBRARY_PATH=/usr/local/lib " >> ~/.bashrc 

安装Ceres

非线性优化库

官网下载链接:https://github.com/ceres-solver/ceres-solver 安装依赖:

# CMake
sudo apt-get install -y cmake
# google-glog + gflags
sudo apt-get install -y libgoogle-glog-dev libgflags-dev
# Use ATLAS for BLAS & LAPACK
sudo apt-get install -y libatlas-base-dev
# Eigen3
sudo apt-get install -y libeigen3-dev
# SuiteSparse (optional)
sudo apt-get install -y libsuitesparse-dev

然后:

git clone https://ceres-solver.googlesource.com/ceres-solver
cd ceres-solver
mkdir build
cd build
cmake ..
make -j8
sudo make install -j8

安装完后查看Ceres版本: 因为Ceres库版本的定义在 /usr/local/include/ceres/version.h 里面,所以

sudo cat /usr/local/include/ceres/version.h 

for 18.04 20.04 太新版本的ceres ros编译会报错

要点:glog和ceres的版本要对


wget https://github.com/ceres-solver/ceres-solver/archive/refs/tags/2.0.0.zip
unzip 2.0.0.zip
cd ceres-solver-2.0.0
mkdir build
cd build
cmake ..
make -j8
sudo make install -j8

glog

git clone https://github.com/google/glog
sudo apt-get install autoconf automake libtool
cd glog
mkdir build
cd build
cmake ..
make -j 24
sudo make install

for 18.04

wget https://github.com/google/glog/archive/refs/tags/v0.5.0.zip
unzip v0.5.0.zip
cd glog-0.5.0

livox

cd ~/robot_ws/src/livox_ros_driver_for_R2LIVE/livox_ros_driver
git clone https://github.com/Livox-SDK/Livox-SDK
cd Livox-SDK
cd build && cmake ..
make
sudo make install

18.04 新版本cmake

wget https://github.com/Kitware/CMake/releases/download/v3.16.0/cmake-3.16.0.tar.gz
tar -zxvf cmake-3.16.0.tar.gz
cd cmake-3.16.0
apt install libssl-dev build-essential

./bootstrap && make && sudo make install

一些问题

bashrc误删

先恢复主体

#先恢复主体
cp /etc/skel/.bashrc ~/

然后把ros安装时需要加的都加回来

<opencv/cv.h>找不到

如果有<opencv/cv.h>找不到报错,则把<opencv/cv.h>改为<opencv2/core.hpp>

#include <opencv/cv.h>
to
#include <opencv2/core.hpp>

error: no match for call to ‘(pcl::getFieldIndex(const pcl::PCLPointCloud2

‘minus’ is not a member of ‘pcl::traits’

以上错误的原因大概率是编译时没有设定C++编译器的版本导致的,需要在CMakeLists.txt文件中设定,在CMakeLists.txt文件中添加以下语句,设定为C++14

set(CMAKE_CXX_STANDARD 14)

Error: conflicting declaration ‘typedef struct LZ4_streamDecode_t LZ4_streamDecode_t’

ubuntu18.04 error: conflicting declaration ‘typedef struct LZ4_streamDecode_t LZ4_streamDecode_t’ 在ubuntu18.04上使用ros中的PCL库时会遇到lz4冲突问题解决方法如下:

 sudo mv /usr/include/flann/ext/lz4.h /usr/include/flann/ext/lz4.h.bak
 sudo mv /usr/include/flann/ext/lz4hc.h /usr/include/flann/ext/lz4.h.bak

sudo ln -s /usr/include/lz4.h /usr/include/flann/ext/lz4.h
 sudo ln -s /usr/include/lz4hc.h /usr/include/flann/ext/lz4hc.h

gazebo运行报错:Unable to convert from SDF version 1.7 to 1.6

解决方式将.world文件中第一行的<sdf version = '1.7'>该为<sdf version = '1.6'>即可。

rosrun rqt_tf_tree rqt_tf_tree

ROS问题解决:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position xxx ordinal

解决方案:

  • 在目录/opt/ros/${ros_version}/lib/python2.7/dist-packages下,新建一个sitecustomize.py文件,内容为:
#coding=utf8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
sudo nano /opt/ros/melodic/lib/python2.7/dist-packages/sitecustomize.py

Warning [parser_urdf.cc:1119] multiple inconsistent exists due to fixed joint reduction overwriting previous value [1] with [true].

1 9.8

The imported target “vtkRenderingPythonTkWidgets” references the file “/usr/lib/x86_64-linux-gnu/libvtkRenderingPythonTkWidgets.so"but this file does not exist.

解决办法:创建两个软链接

sudo ln -s /usr/lib/python2.7/dist-packages/vtk/libvtkRenderingPythonTkWidgets.x86_64-linux-gnu.so /usr/lib/x86_64-linux-g
sudo ln -s /usr/bin/vtk6 /usr/bin/vtk 

Could NOT find METIS (missing: METIS_INCLUDE_DIR METIS_LIBRARY)

sudo apt install libmetis-dev

Sensorsfailed to initialize when loading model[scout] via the factory mechanism, Plugins for the model will not be loaded.

报错,经过查gazebo的代码

image-20230114135028769

发现旧版本(我的是gazebo9.19)是通过迭代等5s如果插件加载不出来就退出加载,我这边几个插件加载很吃性能,5s不可能加载出来。按照这个思路然后我也找到了相应的issue https://github.com/gazebosim/gazebo-classic/issues/2382

就是加载livox插件太吃性能了,模型应该没啥错

新版本的gazebo11超时改成了30s

image-20230114135114101

所以解决方案是升级gazebo9 到11

编译错误(找不到依赖包)

一种原因是ros的包编译顺序导致的,解决方案就是多编译几次

catkin_make
catkin_make
catkin_make
catkin_make

sudo dpkg -i –force-overwrite /var/cache/apt/archives/ros-melodic-mrpt1_1.5.9-1bionic.20220514.021711_amd64.deb

sudo apt-get -f install

ROS2安装(未完成)

ubuntu 22.04

参考:https://docs.ros.org/en/dashing/Installation/Ubuntu-Development-Setup.html

安装密钥:

sudo apt update && sudo apt install curl gnupg2 lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key  -o /usr/share/keyrings/ros-archive-keyring.gpg

#如果出现连不上github 等网络问题请自行解决。
#一种解决方式
sudo curl -sSL http://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/ros.key  -o /usr/share/keyrings/ros-archive-keyring.gpg

设置语言

locale  # check for UTF-8

sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8

locale  # verify settings

设置中文

sudo locale-gen zh_CN zh_CN.UTF-8
sudo update-locale LC_ALL=zh_CN.UTF-8 LANG=zh_CN.UTF-8
export LANG=zh_CNUTF-8