ROS学习笔记(一):安装ROS并搭建一个自己的ROS工作空间

ROS学习笔记(一):安装ROS并搭建一个自己的ROS工作空间

  • 前言
  • 一、ROS安装
  • 二、ROS工作空间基本架构
    • 1、Catkin编译系统
    • 2、ROS工作空间搭建模板
      • (0)、启动ROS Master
      • (1)、搭建工作空间目录
      • (2)、创建功能包
      • (3)、创建节点文件并配置编译依据文件
        • 节点文件语言为C++:
        • 节点文件语言为Python:
      • (4)、工作空间再编译

前言

在写这篇文章的一年前左右,我有浅学过一段时间ROS机器人操作系统,用windows的记事本做了些笔记,现在做项目需要用到,回过头去看自己做的笔记,属实是有些杂乱无章,现在重新在这里整理一下笔记,顺便记录一下自己的学习过程,首先从ROS的架构开始。

ROS机器人操作系统是建立在最基本的操作系统之上的,ROS诞生于Ubuntu系统,随后不断更新,至目前为止也支持在Windows和Mac上进行部署开发。其本身是基于操作系统开发的,因此在配置ROS环境之前要先配置好底层操作系统的环境,如我所用的是基于Ubuntu18.04的ROS操作系统,那应当先配置好Ubuntu18.04的环境。
关于Ubuntu18.04的安装,个人实践过这个视频,安装很顺利:翘课去写代码:安装windows和ubuntu双系统
还有这篇博客:Ubuntu18.04安装教程
都非常的详细,有需要可以跳转去查看一下。
然后就到了ROS本身,ROS封装了大量的便于开发的库/包,在配置好工作空间后,可以通过API或终端命令行进行ROS系统的开发。以下为ROS官网和教程的超链接:
ROS官网:ROS官网(https://www.ros.org/)
ROS官方wiki:ROS Wiki(http://wiki.ros.org/)
最后是一个我个人认为很不错的ros入门教学视频和一个ros Melodic的安装视频:ROS机器人入门 、 ROS Melodic安装

一、ROS安装

我使用的系统是Ubuntu18.04,因此以melodic版本为例:首先打开 wiki.ros.org,如下图所示顺序点击进入官方的安装教程。
ROS学习笔记(一):安装ROS并搭建一个自己的ROS工作空间_第1张图片
进入之后首先第一步是要添加ros的软件源至你的源列表中,如下图所示。
ROS学习笔记(一):安装ROS并搭建一个自己的ROS工作空间_第2张图片
点击Mirrors,然后在中国的源列表中选择一个作为你的ros软件源,这里我选择1.1.1中科大的源,即打开终端,输入:

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

然后回到刚刚的界面:
ROS学习笔记(一):安装ROS并搭建一个自己的ROS工作空间_第3张图片
即先更新源:

sudo apt update

再进行完整的ros安装:

sudo apt install ros-melodic-desktop-full

这里会有较长的等待时间,安装完成后添加环境变量。
ROS学习笔记(一):安装ROS并搭建一个自己的ROS工作空间_第4张图片
终端输入如下所示命令即可:

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

安装rosinstall工具:
ROS学习笔记(一):安装ROS并搭建一个自己的ROS工作空间_第5张图片
如下所示:

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

最后初始化rosdep:
在这里插入图片描述
如下所示:

sudo rosdep init

如果出现报错,可参考该视频:ROS Melodic安装,在4:05开始初始化rosdep。
完成并且不报错后,输入如下所示命令:

rosdep update

至此ros的安装就完成了,如下所示为小海龟命令:
先打开一个终端用于运行ros master:

roscore

再打开2个终端分别运行海龟和键盘的节点:

rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

效果如下所示:
ROS学习笔记(一):安装ROS并搭建一个自己的ROS工作空间_第6张图片

二、ROS工作空间基本架构

1、Catkin编译系统

首先了解一下catkin。catkin是ROS中的一种基于Cmake衍生出来的常用的编译系统,利用该套编译系统搭建工作空间并对已写的逻辑程序进行编译和运行,实现ROS的开发。
如下为ROS的catkin下的工作空间基本架构:

  • 自定义工作空间:
    • src :用于定义功能包和编写各个节点
    • build :用于存放该工作空间编译的中间文件
    • devel :用于存放该工作空间中的编译后生成的文件

在上述工作空间主目录下的src中,存放了各个自定义的功能包,功能包内通常的文件架构如下所示:

  • 功能包:
    • src :用于存放.cpp文件
    • include :用于存放.h文件
    • scripts :用于存放.py文件或.sh脚本文件
    • launch :用于存放.launch文件,.launch文件是一个配置同时启用多个节点的文件
    • msg :用于存放.msg文件,.msg文件是一个定义消息类型的文件
    • srv :用于存放.srv文件,.srv文件是一个定义服务类型的文件
    • CMakeLists.txt :配置编译依据信息
    • package.xml :配置包信息

2、ROS工作空间搭建模板

在这里记录一个搭建工作空间的模板,方便以后copy。

(0)、启动ROS Master

在搭建工作空间之前,一个必不可少的步骤就是运行ros master。master在ros里充当着一个管理员的角色或者说是一个主节点,在这个松耦合的分布式通信平台上,所有节点之间想要互相通信都要通过这位master之手,它负责对节点之间通信进行管理调度。打开一个独立的终端,输入以下程序即可启动master:

roscore

启动master的同时启动参数服务器和rosout日志节点,这种情况下,节点与节点之间可利用参数服务器减少许多累赘的参数交换。

(1)、搭建工作空间目录

首先在master运行的情况下,再打开一个新的终端,输入如下命令,建立一个文件夹作为工作空间,并在工作空间内先行创建src文件夹。然后使用catkin_make进行编译,其中formwork为工作空间名称(可改)

mkdir -p formwork/src
cd formwork
catkin_make

编译完成后会在工作空间内生成build和devel文件夹。随后就是在src文件夹中创建一个的功能包用于开发。

(2)、创建功能包

在刚刚的终端输入如下命令:

cd src
catkin_create_pkg package roscpp rospy std_msgs

如上命令中的catkin_create_pkg即为功能包创建命令,package为功能包名(可改),roscpp为C++库,rospy为python库,std_msgs为标准消息库,不管用c还是python,都加进去就行了,当然洁癖严重点的也可以去掉不用的。功能包创建完成后可看到src文件夹下多了功能包文件夹和CMakeLists.txt配置文件。

(3)、创建节点文件并配置编译依据文件

节点文件语言为C++:

在功能包文件夹下会生成include、src两个文件夹和CMakeLists.txt、package.xml两个配置文件。src为存放c文件的文件夹。
如下所示,在刚刚的终端输入以下命令即可在功能包的src目录下创建cpp文件:

touch package/src/code.cpp
# 和上文一样,package替换成你当前的功能包文件名称。code也需替换成你创建的c++文件名称。

然后就是编写程序。。。这部分留在后面的文章再记录,准备搞多几份基础的程序框架留着应对各种通信需求(方便copy)。
更改配置文件:
然后就到了配置编译环境,打开同功能包目录下的CMakeLists.txt,该文件便是CMake编译包中常见的配置文件,打开后找到add_executable(即添加可执行文件),打开注释,将刚刚的.cpp文件名称替换进去,然后随便定义一个名称把 ${PROJECT_NAME}_XX 替换掉,作为映射名称。再找到target_link_libraries(即目标链接库),同样打开注释,用刚刚上面改的映射名称替换掉 ${PROJECT_NAME}_XX ,这样一个c文件编译所需的配置就完成了。

节点文件语言为Python:

首先要在功能包下新建一个存放python文件的文件夹,类似于上述功能包下的src,在刚刚的终端使用如下命令:

cd package
mkdir scripts
cd  scripts
touch code.py
chmod +x code.py
# 和上文一样,package替换成你当前的功能包文件名称。code也需替换成你创建的python文件名称。

如上所示,创建了一个scripts文件夹后,在文件夹内创建了一个python文件,然后为这个python文件添加可执行权限。
然后再打开功能包下的CmakeList.txt,修改scripts后的文件名为自己创建的python文件名。可能玩python的同学会觉得奇怪,python不是只用解释器就行吗,为啥也要配置编译依赖文件。其实这个不是为编译而配置的,是为了找到适合该python文件的解释器而配置的,有了这一步就不用担心python2或python3的问题了。

(4)、工作空间再编译

最后再重新回到工作空间首目录,如果你完全按照之前上述命令在终端执行的话,输入以下命令即可回到工作空间(即返回到上一层目录),再使用catkin_make进行编译即可:

按照的是上述 节点文件语言为C++ 的终端命令:

cd ..
catkin_make

按照的是上述 节点文件语言为Python 的终端命令:

cd ../../..
catkin_make

只要代码没问题,那么编译顺利,搭建完成。再回过头编写节点主要内容即可。
每次完成编写完成编译后都要记得修改环境变量,每次编译后按照如下命令执行即可顺利运行节点:

source ./devel/setup.bash
rosrun 功能包名 节点映射名

当然这一切都应该是在master正在运行的情况下才能正常运行的,即在另一个终端已经执行了roscore并保持他的运行。

本人是一名学生,目前正在学习中,本篇文章也算是我的学习笔记,如有错误的话还请指正。

你可能感兴趣的:(ubuntu,ROS,学习,机器人,自动驾驶,linux,c++)