ROS仿真环境安装与配置

ROS安装

ROS安装可参考官方文档:

https://wiki.ros.org/melodic/Installation/Ubuntu

因为ros版本需要与Ubuntu的版本对应,如本机是Ubuntu 18.04需要安装Melodic,

Setup your sources.list

Setup your computer to accept software from packages.ros.org.

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

Set up your keys

sudo apt install curl # if you haven't already installed curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

Installation Desktop-Full Install: (Recommended) : 

sudo apt install ros-melodic-desktop-full

Environment setup

echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc

Dependencies for building packages

Up to now you have installed what you need to run the core ROS packages. To create and manage your own ROS workspaces, there are various tools and requirements that are distributed separately. For example, rosinstall is a frequently used command-line tool that enables you to easily download many source trees for ROS packages with one command.

To install this tool and other dependencies for building ROS packages, run:

sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential

Initialize rosdep

Before you can use many ROS tools, you will need to initialize rosdep. rosdep enables you to easily install system dependencies for source you want to compile and is required to run some core components in ROS. If you have not yet installed rosdep, do so as follows.

sudo apt install python-rosdep

但是由于被墙,以下命令无法是使用

sudo rosdep init
rosdep update

解决方案参考

ROS安装过程中如何解决 rosdep update 命令出现错误 - 知乎

总结一下就是

  1. 改用手机热点(玄学无用,切勿当真)
  2. 改hosts文件附加 www.rawgithubusercontent.com 的IP地址(随着墙墙的壮大,能用的IP越来越少了)
  3. 用 .github 代替 .rawgithub(本质无差)
  4. 修改 TIMEOUT 值(此法治标不治本。它有点用,但不完全有用,建议还是使用下文的必杀招)

作者采用代理方法,如下:

1 打开包含资源下载函数的文件:

$ sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py

2. 添加代理:

url="https://ghproxy.com/"+url

下面是代码修改的位置

ROS仿真环境安装与配置_第1张图片

3. 修改/usr/lib/python2.7/dist-packages/rosdistro/__init__.py文件中的DEFAULT_INDEX_URL

$ sudo gedit /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
DEFAULT_INDEX_URL = 'https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'

4. 修改其余(4个)文件中的地址,在地址 https://raw.githubusercontent.com/... 前添加https://ghproxy.com/

//行数不一定一一对应,以实际网址所在位置为准,基本上就在附近
$ sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py
//修改第36行的地址
$ sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py 72行
//修改第72行
$ sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/rep3.py
//修改第39行
$ sudo gedit /usr/lib/python2.7/dist-packages/rosdistro/manifest_provider/github.py
//修改第68行、119行

5. 解决 Hit 第五个地址的报错

$ sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/gbpdistro_support.py 
//在第204行添加如下代码(即在该函数块下的第一行处)
gbpdistro_url = "https://ghproxy.com/" + gbpdistro_url
//注意,原网址中代理地址的双引号是中文,直接粘贴复制会报字符识别错误

6. 再次运行 

sudo rosdep init
rosdep update

7.验证安装是否成功:

首先输入 roscore

在这里插入图片描述

 然后再打开一个终端(快捷键: Ctrl+Shift+T ),输入 rosrun turtlesim turtlesim_node。系统会弹出一个窗口,窗口的中间有一只海龟。

在这里插入图片描述

然后再打开一个终端(快捷键: Ctrl+Shift+T ),输入rosrun turtlesim turtle_teleop_key。这时按照窗口中的提示就可以驱动小海龟进行运动了。 

在这里插入图片描述

 如果上述命令都可以运行,证明ROS已经安装成功啦。

环境配置

创建工作空间:

1)打开终端,在根目录下创建文件夹catkin_ws

cd ~
mkdir catkin_ws

2) 进入catkin_ws文件夹,并在里面建立新的src文件夹。

cd catkin_ws
mkdir src

3)进入src文件夹,并把当前文件夹初始化为workspace属性的文件夹。

此时,如果/home/你的用户名/catkin_ws/src文件夹下出现了CMakeLists文件,说明工作空间生成成功。ROS仿真环境安装与配置_第2张图片

4)接下来对工作空间进行编译,打开一个新终端,进入catkin_ws文件夹。

cd catkin_ws

  开始编译。

catkin_make

编译成功后/home/你的用户名/catkin_ws下会出现develbuild文件。ROS仿真环境安装与配置_第3张图片

5)产生install文件夹。 

catkin_make install

6)创建功能包。(功能包是存放源码的最小单元)

cd src
catkin_create_pkg test_pkg std_msgs rospy roscpp

此时会产生一个test_pkg文件夹,这是安装包的名字。

● 然后对功能包进行编译。

cd catkin_ws
catkin_make

ROS仿真环境安装与配置_第4张图片

 7)设置环境变量,打开一个新终端。

sudo gedit ~/.bashrc

● 在打开的.bashrc文件的末尾加一行,保存后并退出

source ~/catkin_ws/devel/setup.bash

● 刷新一下环境变量。 

cd catkin_ws
source devel/setup.bash

至此便完成了工作空间和功能包的创建,之后便可以在功能包中写程序并运行了。

(1)下载一个中科院软件所的仿真环境。

github网址:https://github.com/DroidAITech/ROS-Academy-for-Beginners

要是网速慢也可网盘自取

链接:https://pan.baidu.com/s/1B8NRfcKIysgkMhAlHDb6Ow 
提取码:1017

在该软件包中,包含了以下功能包:

软件包 内容
robot_sim_demo 机器人仿真程序,大部分示例会用到这个软件包
topic_demo topic通信,自定义msg,包括C++和python两个版本实现
service_demo service通信,自定义srv,分别以C++和python两种语言实现
action_demo action通信,自定义action,C++和python两种语言实现
param_demo param操作,分别以C++和python两种语言实现
msgs_demo 演示msg、srv、action文件的格式规范
tf_demo tf相关API操作演示,tf示例包括C++和python两个版本
name_demo 演示全局命名空间和局部命名空间下参数的提取
tf_follower 制作mybot机器人 实现mybot跟随xbot的功能
urdf_demo 创建机器人urdf模型,在RViz中显示
navigation_sim_demo 导航演示工具包,包括AMCL, Odometry Navigation等演示
slam_sim_demo 同步定位与建图演示,包括Gmapping, Karto, Hector等SLAM演示
ros_academy_for_beginners Metapacakge示例,依赖了本仓库所有的pacakge
robot_orbslam2_demo ORB_SLAM2的演示

 下载好后,将上述zip文件解压缩后放至/home/你的用户名/catkin_ws/src文件目录下。

(2) 安装依赖项:(上文已经解决被墙的问题,否则此步会无法安装完所需的依赖)

cd ~/catkin_ws
rosdep install --from-paths src --ignore-src --rosdistro=melodic -y

(3)检查gazebo版本,该仿真环境要求gazebo的版本在7.0以上。

gazebo -v

如果gazebo版本低于7.0,则需要进行手动升级,依次执行如下命令即可。

 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 gazebo7

(4)编译工作空间。

cd ~/catkin_ws
catkin_make

刷新环境变量。 

source ~/catkin_ws/devel/setup.bash
rospack profile

或 

source ~/catkin_ws/devel/setup.bash (如果在~/.bashrc文件的末尾添加了source ~/catkin_ws/devel/setup.bash,则此步骤可以省略。)

ORB-SLAM2的安装与配置

1. 安装cmake,gcc,g++,git

先安装配置ORB-SLAM2所必要的一些工具(已经安装的忽略)

sudo apt-get update
sudo apt-get install cmake gcc g++ git

2. 安装Pangolin0.5(过高版本会导致错误)

3. 安装Eigen3

4. 安装OpenCV3(4会导致错误)

5. 安装ORB-SLAM2

(1)普通模式

● 运行如下命令,对其进行编译(注意在src文件夹中打开终端)

cd ORB_SLAM2
chmod +x build.sh
./build.sh

● 进行测试,验证是否安装成功。

下载数据集,Computer Vision Group - Dataset Download,下载第一个fr1/xyz即可。由于是国外数据集,需要挂梯子,否则下载很慢。也可自取,

链接:https://pan.baidu.com/s/1Li7ci0AkJzGWZspxQ19yvw 
提取码:1017

下载好后,进入/home/你的用户名/catkin_ws/src/ORB_SLAM2文件夹创建一个文件夹:data,将下载好的数据集压缩包提取到data文件夹下面,然后在ORB_SLAM2文件夹下打开一个终端:

./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml ./data/rgbd_dataset_freiburg1_xyz

ROS仿真环境安装与配置_第5张图片

 可以跑通数据集,则证明安装成功。

(2)ROS模式

为了能够在线实时地运行ORB-SLAM2,需要借助ROS。SLAM在ROS下跑和非ROS下跑的区别:可以把ROS理解成在Linux系统下集成了许多好用的第三方和多进程编程的一个库集。在ROS下跑SLAM可以使用ROS的许多成熟的方法库。不在ROS下跑,很多进程间通信、同步、回调之类的就需要自己去设计。

● 将包含Examples/ROS/ORB_SLAM2的路径添加到ROS_PACKAGE_PATH环境变量中。打开.bashrc文件并在最后添加以下行。
● 将包含Examples/ROS/ORB_SLAM2的路径添加到ROS_PACKAGE_PATH环境变量中。打开.bashrc文件并在最后添加以下行

export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/ORB_SLAM2/Examples/ROS

保存后并退出,刷新环境变量。

source ~/.bashrc

● 此仿真环境下,发布的相机图像的话题为/camera/depth/image_raw和/camera/rgb/image_raw,所以我们slam接受话题的数据时名称要一致。打开/home/xxy/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ ros_rgbd.cc进行修改。位置大概在68行左右,修改成如下所示:
 

message_filters::Subscriber rgb_sub(nh, "/camera/rgb/image_raw", 1);
message_filters::Subscriber depth_sub(nh, "camera/depth/image_raw", 1);

● 编译ROS下的ORB-SLAM2
ORB_SLAM2文件夹下打开终端:

chmod +x build_ros.sh
./build_ros.sh

 这里编译的时候可能会有一些错误,如:

Building ROS nodes
./build_ros.sh: line 2: $'\r': command not found
./build_ros.sh: line 3: cd: $'Examples/ROS/ORB_SLAM2\r': No such file or directory
mkdir: cannot create directory ‘build\r’: File exists

这是由于文件格式不对导致,解决方案是

dos2unix build.sh
dos2unix build_ros.sh

详细的解释下文会有提及

如果出现:

/usr/bin/ld: CMakeFiles/RGBD.dir/src/ros_rgbd.cc.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/usr/lib/x86_64-linux-gnu/libboost_system.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
CMakeFiles/RGBD.dir/build.make:192: recipe for target '/home/ghj/ROS_SIM/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/RGBD' failed
 

ROS仿真环境安装与配置_第6张图片 这个是因为缺少库,可以用命令:

locate寻找boost_system boost_filesystem ,找到boost_system.so和 boost_filesystem.so然后复制到orb-slam2的lib目录下

ROS仿真环境安装与配置_第7张图片

 参考:

Undefined reference to symbol '_ZN5boost6system15system_categoryEv' · Issue #494 · raulmur/ORB_SLAM2 · GitHub

出现错误:

 error: ‘usleep’ was not declared in this scope
         usleep(mT*1000);

ROS仿真环境安装与配置_第8张图片

 这个算是比较常见的问题了,解决方案是:

在以下文件中加入#include

src中
LocaMapping.cc
Tracking.cc
System.cc
LoopClosing.cc
Viewer.cc

Examples/Monocular中
mono_euroc.cc
mono_kitti.cc
mono_tum.cc

Examples/RGB-D中
rgbd_tum.cc

/Examples/Stereo中
stereo_kitti.cc
stereo_euroc.cc

Examples/ROS/ORB_SLAM2/src/AR
ViewerAR.cc

运行仿真

运行仿真时,建议关闭虚拟机的加速3D图形,否则运行会卡顿。

ROS仿真环境安装与配置_第9张图片

(1)roscore是节点和程序的集合,这些节点和程序是基于ROS的系统所必需的。运行roscore,使ROS节点建立通信。

打开一个新终端,输入:

roscore

(2)打开仿真环境。打开一个新终端,输入:

roslaunch robot_sim_demo robot_spawn.launch

可能会出现

roslaunch: command not found

此时需要安装

sudo apt-get install rosbash

然后再运行 

roslaunch robot_sim_demo robot_spawn.launch 

通过拖拽达到合适的视角即可 ROS仿真环境安装与配置_第10张图片

这里可能存在一个问题,有些版本的ROS可能出现

Warning [parser.cc:950] XML Element[mu], child of element[link] not defined in SDF. Ignoring[mu]. You may have an incorrect SDF file, or an sdformat version that doesn't support this element.
Warning [parser.cc:950] XML Element[mu], child of element[link] not defined in SDF. Ignoring[mu]. You may have an incorrect SDF file, or an sdformat version that doesn't support this element.
Warning [parser.cc:950] XML Element[mu], child of element[link] not defined in SDF. Ignoring[mu]. You may have an incorrect SDF file, or an sdformat version that doesn't support this element.
Warning [parser.cc:950] XML Element[mu], child of element[link] not defined in SDF. Ignoring[mu]. You may have an incorrect SDF file, or an sdformat version that doesn't support this element.
Warning [parser.cc:950] XML Element[mu], child of element[link] not defined in SDF. Ignoring[mu]. You may have an incorrect SDF file, or an sdformat version that doesn't support this element.

 导致界面没有模型,解决的方案有两种,一是更改sdf文件的格式,还有一种比较彻底的方法是换ROS版本(这个是melodic,kinetic需要切换分支)

GitHub - DroidAITech/ROS-Academy-for-Beginners at melodic

(3)运行键盘控制节点。打开另一个终端,输入:

rosrun robot_sim_demo robot_keyboard_teleop.py

ROS仿真环境安装与配置_第11张图片

通过i,j,k等控制小车移动,q/z加减速等。

此时出现 /usr/bin/env: ‘python\r’: No such file or directory ROS仿真环境安装与配置_第12张图片

大致是由于这个python文件是在windows上写的,然后我在ubuntu上run就出现这个问题,主要是换行符导致的。

在windows下,用两个连续的符号进行换行: ‘\r’和’\n’ ,其中 ‘\r’为回车符,’\n’为换行符
在ubuntu下,用一个符号进行换行:’\n’
所以直接使用这种在windows上写的python代码就会出问题,而且这些符号是隐藏的,想查看,还要打开显示选项,并且每一行都有,改起来相当费劲。

解决方案是安装一个工具:
先下载,然后对需要调整格式的python文件使用就可以了,如下:
sudo apt-get install dos2unix
dos2unix abc.py(如上文提到的./src/ROS-Academy-for-Beginners/robot_sim_demo/scripts/robot_keyboard_teleop.py)

然后再rosrun这个python文件就不会报错了! 非常好用,亲测可行。

(4)运行orbslam2,打开一个新终端,输入:

这里需要注意的是我们需要用到ROS文件里面的相机参数文件Zdzn.yaml而不是ORB文件里面的相机参数。

rosrun ORB_SLAM2 RGBD /home/ghj/ROS_SIM/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/ghj/ROS_SIM/src/ROS-Academy-for-Beginners-melodic/orbslam2_demo/param/Zdzn.yaml

此时通过按键控制机器人移动,即可进行定位与建图工作!

ROS仿真环境安装与配置_第13张图片

 总结,需要四个命令,四个窗口:

roscore
roslaunch robot_sim_demo robot_spawn.launch

rosrun robot_sim_demo robot_keyboard_teleop.py

rosrun ORB_SLAM2 RGBD /home/ghj/ROS_SIM/src/ORB_SLAM2/Vocabulary/ORBvoc.txt /home/ghj/ROS_SIM/src/ROS-Academy-for-Beginners-melodic/orbslam2_demo/param/Zdzn.yaml

 非正常退出gazebo,运行roslaunch robot_sim_demo robot_spawn.launch会出现

运行roslaunch gazebo_ros empty_world.launch指令,出现process has died的报错[gazebo-1] process has died [pid 397, exit code 255, cmd /opt/ros/melodic/lib/gazebo_ros/gzserver -e ode worlds/empty.world __name:=gazebo __log:=/home/jiqiang/.ros/log/366747d8-0841-11ed-adde-1c1bb54aa7d6/gazebo-1.log].
log file: /home/zgjldx/.ros/log/366747d8-0841-11ed-adde-1c1bb54aa7d6/gazebo-1*.log

解决方法是杀掉对应的进程 

killall gzserver
 
killall gzclient

再运行roslauch即可

rosrun robot_sim_demo robot_keyboard_teleop.py

此外

rostopic list

可以查看查看机器人发布的所有的话题,其中/camera/depth/image_raw和/camera/rgb/image_raw即为深度和rab的图像话题。(与我们上文改的一致) 

ROS仿真环境安装与配置_第14张图片

rosrun image_view image_view image:=/camera/depth/image_raw
rosrun image_view image_view image:=/camera/rgb/image_raw

上述两个命令可以查询机器人所采集到的图像:

ROS仿真环境安装与配置_第15张图片

 ROS仿真环境安装与配置_第16张图片

下图是orbslam程序运行的日志

ROS仿真环境安装与配置_第17张图片

场景地图

ROS仿真环境安装与配置_第18张图片

实时帧图

ROS仿真环境安装与配置_第19张图片  

 其中SLAM_MODE表示当前模式,KFs:1表示地图中总关键帧总数为1,MPs:1006表示地图中的地图点总数为1006,Matches:807表示成功陪陪的特征点总数为807

生成的轨迹图(蓝色表示关键帧,红色代表参考地图点,其实就是tracking里面的local mappoints,黑色点表示所有地图点,红色点属于黑色点的一部分,绿色的线表示共视关系)

ROS仿真环境安装与配置_第20张图片

 ROS仿真环境安装与配置_第21张图片

 链接:https://pan.baidu.com/s/1khI-JtKhf7ZASvp9_0PY5w 
提取码:xew2

你可能感兴趣的:(SLAM,ubuntu,自动驾驶,机器人)