如何安装ros系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何安装ros系统相关的知识,希望对你有一定的参考价值。

参考技术A ROS作为一款开源机器人操作系统,在各种工业机器人、自动驾驶导航中非常流行,是学习自动驾驶、机器人的方向的人必须接触的系统软件,这里以目前写这篇文件时最新(2018年5月)的ROS Melodic Morenia的系统安装为例,写一篇经验。
工具/原料
ROS Melodic Morenia Ubuntu Bionic amd64 版
方法/步骤
1/9 分步阅读
首先要安装一个基础的linux系统,在ROS Melodic Morenia看一下受支持的linux发行版本,主要只有Ubuntu Bionic(18系列),Ubuntu Artful(17系列),和Debian Stretch(9系列),故这里以Ubuntu 18.04 LTS系统为例进行安装。

2/9
首先要添加网络库,这里选择使用国内的镜像源,中科大的镜像源安装速度快一些,如果使用国外的源,电信的宽带几乎就安装不了。
执行sudo sh -c '. /etc/lsb-release && echo "deb <软件源> $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list',如下图指令,加入中科大源到sourcelist。

ROS机器人开发入门_免费视频课程_讯飞AI大学
广告
3/9
添加认证密钥,国内从ubuntu的官方keyserver添加密钥较快。
使用如下图命令添加认证公钥到软件源中。

【全新】「梦幻西游网页版」开局满神装,人人有神宠
广告
4/9
更新软件源缓存数据,sudo apt-get update

合肥 全屋整装系统_实力品牌集成墙板厂家大保障!
广告
5/9
新手安装的直接全环境安装即可,使用指令
sudo apt-get install ros-melodic-desktop-full
如下图,国内的源下载速度非常快,大概十几分钟就可以安装完成。

查看剩余1张图
6/9
安装完成后,接下来要做一些初始化设置才能开始使用。依次输入
sudo rosdep init
rosdep update
如下图所示。

查看剩余1张图
7/9
为了使用方便,你可以将配置好一打开你的bash就自动导入所有Ros环境变量,这样你可以方便以后的使用。

8/9
最后你需要安装一些开发使用的编译工具,最后你就可以愉快使用ROS了。
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
安装编译工具如下图。

9/9
最后使用roscore命令测试一下安装效果。

编辑
参考技术B 在机器人智慧化的过程当中,ROS(机器人操作系统)成为最关键的一环,当机器人要投入生活甚至是医疗等更多元的场景时,皆需要面对相较普通的生产线以及更复杂的空间环境,而ROS也相较于我们大脑的中枢,不仅能汇集环境变动的数据,亦能分析服务对象的空间位置,进而提供对应的服务操作。

回到设计的需求,用ROS跑项目的确可以加速进行。基本上ROS的核心精神就是在巴别塔里面讲着相同的语言。

总而言之,就是不要再重复造部件!而ROS是架构在Linux内的一套软件,所以只要有Ubuntu就行啦!这次我们用仿真器,可以是VMWARE或是Virtual Box,使用Ubuntu 16.04安装ROS Kinetic,但在2018五月时,ROS推出了Melodic,也有网友在Ubuntu 18.04安装,基本上也没什么问题!

ROS安装过程

这篇文章在VMWARE使用ubuntu-16.04.5-desktop-amd64.iso。

在安装过程中,会需要输入Ubuntu的账号及密码。

下图有一点小小提示,本来作者是用预设的20GB,但在尝试ROS的仿真器与程序代码后,东灌西灌的结果就是20GB搞到要爆炸了,所以建议60GB会比较好一点点。

简单提一下,作者的MAC Air 128G一开始是用双系统切了一半过去,用了1个月后系统容量爆炸,完完全全不够用啊!!!之后再来提一下MAC系统如果不是只想模拟该怎么办。

由于这篇文章目的在模拟,所以在Windows与MAC OS都能用VMWARE或是Virtual Box,但问题来了,如果您是研究所以上的学生,教授要您做出硬件来,VMWARE或是Virtual Box都无法控制到远程的硬件啊!这也是作者试了好几次才发现,一定要用原生的Linux系统加上ROS才行啊!!!所以建议在Windows上的解决方式是直接做双系统,反正硬盘够大,但UEFI的Bios也搞了许久。

而在MAC Air就不能切双系统了,128G切一半就不能拿来工作了,所以在MAC Air是用外接128G USB随身碟安装Ubuntu,这也搞了许久,总之Windows与MAC OS安装ROS都可以写一篇文章了。好,回到开始用VMWARE安装Ubuntu的时候,会看到下图,这时可以去喝杯饮料悠闲的等待~

安装完毕后,可以去更新一下在Software & Updates,但不更新也可以准备安装就是了。

然后在Terminal输入以下指令:

sudo sh -c ‘echo “debhttp://packages.ros.org/ros/ubuntu $(lsb_release -sc) main” > /etc/apt/sources.list.d/ros-latest.list’

这个时候会请您输入密码,之后再贴上KEY的指令(如下方指令):

sudo apt-key adv –keyserverhkp://ha.pool.sks-keyservers.net:80 –recv-key421C365BD9FF1F717815A3895523BAEEB01FA116

然后再sudo apt-get update:

接着sudo apt-get upgrade升所有需要的安装包:

所以建议前面不要Software & Update也可以,接着就是安装Desktop-Full版本的ROS系统在Ubuntu内:sudo apt-get install ros-kinetic-desktop-full

安装完毕,再来呢?接下就就是要初始化!

sudo rosdep init

rosdep update

配置环变量:

echo “source /opt/ros/kinetic/setup.bash”>> ~/.bashrc

source ~/.bashrc

上面2句还挺重要的,不然每次ROSRUN xxx什么安装包都出现Error,例如:

But!人生就是有这个But!

印象中有一次在Windows的VMWARE中也输入上面2句然后再ROSRUN还是出现Error,所以就开了MAC Air内的Ubuntu看了一下.bashrc档照抄:

红框是有修正过的,如果您下了ROSRUN的指令也出现Error,就照抄Source的那行吧!

许眼尖的读者会发现上面的.bashrc档最后一行是TURTLEBOT3!

作者当初就是在Windows的VMWARE安装UBUNTU及MAC Air安装Virtual Box,不论是在哪台机器都控制不了Turtlebot3的硬件啊!至于如何控制硬件!?接下来安装所有以后可能用的到的套件:

sudo apt-get install python-rosinstallpython-rosinstall-generator python-wstool build-essential

安装结束啰 ~ 而本篇的最后,就是来个roscore测试一下!

然后看到如下图的描述没出现Error就正确啦~

恭喜各位进入ROS的世界!!!

ros是机器人操作系统(Robot Operating System)的英文缩写。ROS是用于编写机器人软件程序的一种具有高度灵活性的软件架构。ROS的原型源自斯坦福大学的STanford Artificial Intelligence Robot (STAIR) 和 Personal Robotics (PR)项目。[1]

中文名

机器人操作系统

外文名

Robot Operating System

简称

ROS

性质

机器人软件平台

快速
导航

ROS的历史 许可协议 主要发行版本 主要功能

ROS是什么

ROS是用于编写机器人软件程序的一种具有高度灵活性的软件架构。它包含了大量工具软件、库代码和约定协议,旨在简化跨机器人平台创建复杂、鲁棒的机器人行为这一过程的难度与复杂度。

ROS图标

ROS设计者将ROS表述为“ROS = Plumbing + Tools + Capabilities + Ecosystem”,即ROS是通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体[2] 。

ROS简介

关于ROS是什么,一些不同解释如下:

ROS wiki的解释

ROS(Robot Operating System,下文简称“ROS”)是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。

ROS 的主要目标是为机器人研究和开发提供代码复用的支持。ROS是一个分布式的进程(也就是“节点”)框架,这些进程被封装在易于被分享和发布的程序包和功能包中。ROS也支持一种类似于代码储存库的联合系统,这个系统也可以实现工程的协作及发布。这个设计可以使一个工程的开发和实现从文件系统到用户接口完全独立决策(不受ROS限制)。同时,所有的工程都可以被ROS的基础工具整合在一起。

Brian Gerkey的网上留言

我通常这样解释ROS:

1. 通道:ROS提供了一种发布-订阅式的通信框架用以简单、快速地构建分布式计算系。

2. 工具:ROS提供了大量的工具组合用以配置、启动、自检、调试、可视化、登录、测试、终止分布式计算系统。

3. 强大的库:ROS提供了广泛的库文件实现以机动性、操作控制、感知为主的机器人功能。

4. 生态系统:ROS的支持与发展依托着一个强大的社区。ros.org尤其关注兼容性和支持文档,提供了一套“一站式”的方案使得用户得以搜索并学习来自全球开发者数以千计的ROS程序包。

摘自《ROS by Example》的解释

ROS的首要目标是提供一套统一的开源程序框架,用以在多样化的现实世界与仿真环境中实现对机器人的控制。

ROS的历史

ROS是一个由来已久、贡献者众多的大型软件项目。在ROS诞生之前,很多学者认为,机器人研究需要一个开放式的协作框架,并且已经有不少类似的项目致力于实现这样的框架。在这些工作中,斯坦福大学在2000年年中开展了一系列相关研究项目,如斯坦福人工智能机器人(STandford AI Robot, STAIR)项目、个人机器人(Personal Robots, PR)项目等,在上述项目中,在研究具有代表性、集成式人工智能系统的过程中,创立了用于室内场景的高灵活性、动态软件系统,其可以用于机器人学研究。

ROS操作系统快速入门

文章目录

一、简介

手机界的安卓操作系统就和机器人界的ros操作系统一样,向上可以扩展不同应用,向下可以适应不同的硬件设备

模块化、分布式的系统设计

  • 模块化:ros中每个.lanuch文件相当于一个机器人,每个node节点相当于一个模块

  • 分布式:可以使用多个计算机(实际上是cpu)来处理不同模块的计算任务

ros操作系统要跑在运算能力强的芯片上,例如瑞芯微、树莓派、电脑等,通过数据链路(usb、串口)与单片机进行通信传输指令与数据,在ros的应用中开发能够进行串口通信的node,例如GMapping(建图)、Move_base(自主导航)

二、安装虚拟机与ROS系统安装

虚拟机的缺点

  • 运行效率低【两个系统之间隔着虚拟机】
  • 调用宿主硬件的方法比较繁琐【利用宿主电脑的显卡GPU进行CUDA加速,映射操作比较复杂】

安装ubuntu20.04

ubuntu20.04安装教程

一些注意点:

  1. 关于20.04版本:

    • 可以在这个页面下载:https://releases.ubuntu.com/20.04.5,选“64-bit PC (AMD64) desktop image”版本
  2. 修改分辨率

    • 因为分辨率看不见按钮,通过命令行修改分辨率
    • 按Ctrl+Alt+T,出现终端窗口,然后在终端窗口输入命令:
    • xrandr -s 1280x800后回车(需要注意的是1280和800中间的x是字母x)
  3. 安装过程跳过更新

  4. 虚拟机备份

  5. 安装vmware tools工具

    • 安装步骤
    • 注意:由于文件夹由于容量过小,不能在这个文件夹解压,需要将文件夹移动到用户目录下
  6. Ubuntu20.04使用过程中总是弹出检测到系统程序出现问题的解决方法

  7. Ubuntu已安装VMware Tools仍无法粘贴复制主机文件夹

  8. 刚建立好的linux虚拟机使用NAT方式可以连接外网,系统重启几次,系统无法上网,这是什么问题导致的呢?

其他教程:

三、ROS系统安装

切换镜像源

  1. 要知道当前系统的代号,可以用以下命令:
lsb_release -a
  1. 换镜像源教程

关于无法保存只读文件问题,可以在home目录下创建好该文件然后复制过去

  1. 刷新列表,一定要执行刷新
sudo apt-get update//必须执行
sudo apt-get upgrade//非必须执行

视频教程

教程链接

四、ROS应用商城APT源

简介与指令介绍

ubuntu有自带的下载源,到指定的应用商城下载软件包

ROS官方应用商城网站:index.ros.org

添加不同的源,就类似于添加不同的应用商城

下载指令格式:

suod apt install ros-noetic-软件包名称

软件包需要ros系统启动起来才能使用,另外开终端输入

roscore

报错的解决方法

运行软件包指令

rosrun 包的名称 节点的名称

案例

安装如下两个软件包进行测试

sudo apt install ros-noetic-turtlesim
sudo apt install ros-noetic-rqt-robot-steering

运行两个软件包

rosrun turtlesim turtlesim_node
rosrun rqt_robot_steering rqt_robot_steering

输入框中可以修改速度发送的主题名称

ros应用商城介绍


点击软件包的名称可以查看详细信息,例如源代码存放位置是github

右侧的website内有软件包的使用细节介绍

五、GIthub

在github中下载的是源码,没有编译,需要在本地编译,编译时有指定的文件格式,所以需要建立一个工作空间,所谓的工作空间就是符合某种要求的目录结构,编译器会安装这个目录结构去检索源代码,完成编译工作

建立如下目录结构:

安装git与克隆软件包

sudo apt install git

在src目录下克隆软件包

git clone https://github.com/6-robot/wpr_simulation.git

执行安装依赖包的脚本

下载后的目录结构中有scripts目录,【用于放置脚本文件,执行脚本可以为下载安装和编译需要用到的依赖项,为实体机器人映射端口】,根据ros版本执行不同的脚本,此类操作只需要执行一次

./install_for_noetic.sh

编译

cd ~/catkin_ws
catkin_make

注意:该指令(catkin_make)只能在catkin_ws路径下,会对src里面的源代码进行编译

编译完成后会得到如下几个文件

然后是将catkin_ws工作空间里面的环境变量加载到终端里面,使用source指令载入工作空间的环境设置

source ~/catkin_ws/devel/setup.bash

使用roslaunch运行编译好的ros程序

roslaunch wpr_simulation wpb_simple.launch


通过上面安装的速度控制工具可以控制机器人运动,运行软件包

rosrun rqt_robot_steering rqt_robot_steering

通常会把设置工作空间环境参数的source指令放到终端启动的初始化脚本文件bashrc中

gedit ~/.bashrc

在最末尾添加

source ~/catkin_ws/devel/setup.bash

在终端输入

source ~/.bashrc

六、安装vscode

快速下载教程

下载后的路径在

/home/fang/下载

执行解压

sudo dpkg -i 压缩包名称

运行vscode

code

在vscode软件中将/home/fang/catkin_ws/src添加为工作空间

安装插件:

  • chinese
  • ros(会顺带安装c++和python等插件)
  • cmake(安装CMake Tools会自动安装CMake)
  • bracket【vscode已经内置了,无须安装】
  • C/C++ Extension Pack【它包含了 vscode 编写 C/C++ 工程需要的插件(C/C++、C/C++ Themes、CMake、CMake Tools和Better C++ Syntax等)】

其他插件:地址

设置编译快捷键:

按下:ctrl+shift+b
选择第一项:

此时编译工作空间里面的软件包

当然也可以设置第一项为默认编译选择,点击右侧齿轮按钮

此时工作目录中出现的tasks.json文件,修改group选项

设置拼写错误检查

  • 出现头文件引用问题是,c/c++插件没有找到,删除左侧的c__cpp_properties.json文件,然后关闭vscode再打开,此时ros插件会初始化,会修改c__cpp_properties.json文件,自动将头文件添加到路径中

  • 特殊情况:ros插件无法识别,则需要手动关闭报错,按住ctrl+shift+p,输入:error squiggles,选择禁用错误波形曲线,此时左侧会多一个setting.json文件, 如果要启动检查则改为true

七、超级终端Terminator

安装Terminator

sudo apt install terminator

ctrl+AIT+T启动Terminator,在运行其他任务的时候可以分割界面

快捷键

  • ctrl+shifr+E:分割为左右
  • ctrl+shifr+O:分割为上下
  • ALT+方向键:切换焦点窗口
  • ctrl+shifr+W:删除刚刚切割的窗口

注意:ctrl+shifr+E可能会激活ubuntu输入法的符号模式,需要取消输入法对该快捷键的占用,终端输入:ibus-setup,删除该快捷键的占用,操作步骤如下

八、Node节点与Package包

基本单元:node

一个机器人由多个节点组成

节点的组织形式:package

使用apt下载的,虽然只使用了一个软件包里面的某些节点的功能,但是下载的还是整个软件包(package)


ros采用cmake和catkin作为编译工具,引入了package的概念(ros中各个节点采用模块化的思想),可以将各个节点的关联性进行分类,一次只安装一个包(一组节点),此时包可以理解为节点的容器

九、写一个Node节点

创建超声波节点的软件包

进入catkin_ws/src目录:

catkin_create_pkg ssr_pkg rospy roscpp std_msgs 

catkin_create_pkg指令:

catkin_create_pkg <包名> <依赖项列表>

ps:依赖项是通用的依赖项,也可以成为通用节点

  • rospy:ros和python结合
  • roscpp:ros和cpp结合
  • std_msgs :标准消息

此时会创建两个文件,两个目录

ps:

  • 凡是catkin软件包里面一定含有package.xml
  • CMakeLists.txt是指令和注释,可以作为编译项进行复制,避免写错,##表示注释 ,#表示指令

roscd指令

该指令可以在终端中进入指定软件包的文件地址

路径:/opt/ros/noetic/share/roscpp 里面都是软件包,来源于安装ros的desktop-full基础包或独立扩展包
catkin_ws工作空间中的软件包则是源码,而在此目录下是可执行文件

在bashrc中source /opt/ros/noetic/setup.bashsource ~/catkin_ws/devel/setup.bash就分别是软件包的两个安装空间

创建超声波node节点

在srv目录下创建chao_node.cpp文件

#include <ros/ros.h>

int main(int argc, char *argv[])//argv没有const

    /* code */
    ros::init(argc,argv,"chao_node");//节点初始化后才能与ros系统产生连接,才能调用ros的核心功能
    printf("hello world");
    //节点启动后一直运行,true可以替换为ros::ok()函数,避免节点不响应任何外部信号,例如ctrl+c
    while(ros::ok())
        printf("hhhhh");
    
    return 0;

为新建节点添加编译规则

打开CMakeLists.txt,添加如下两条

# 为这个包的节点添加可执行指令
# 前一项:指定可执行文件的名字,可以和节点名保持一致
# 后一项:指定从哪个代码文件进行编译
add_executable(chao_node src/chao_node.cpp)

# 链接ros::init函数所在的库文件
target_link_libraries(chao_node
  $catkin_LIBRARIES
)

运行节点

  1. 启动roscore
  2. 终端输入:rosrun ssr_pkg chao_node

rosrun <包名> <节点文件名>

十、Topic话题与Message消息

Topic 话题

  1. 话题Topic是节点间进行持续通讯的一种形式
  2. 话题通讯的两个节点通过话题的名称建立起话题通讯连接话题中通讯的数据,叫做消息Message
  3. 消息Message通常会按照一定的频率持续不断的发送,以保证消息数据的实时性
  4. 消息的发送方叫做话题的发布者Publisher。
  5. 消息的接收方叫做话题的订阅者Subsciber。
  6. 一个ROS节点网络中,可以同时存在多人话题
  7. 一个话题可以有多个发布者,也可以有多个订阅者2
  8. 一个节点可以对多个话题进行订阅,也可以发布多个话题
  9. 不同的传感器消息通常会拥有各自独立话题名称,每个话题只4有一个发布者。
  10. 机器人速度指令话题通常会有多个发布者,但是同一时间只能有一个发言人。

一个话题多个发布者的情况是存在的,例如底盘驱动需要速度指令,该指令可以由跟踪或者导航节点发布,注意的是要控制发布的顺序

Message 消息

不同的消息包有不同的消息类型,标准消息包std_msgs就包含多个基本消息类型

可以将消息类型理解为C语言中的结构体

十一、Publisher 发布者和Subscriber 订阅者的实现

Publisher 发布者的实现

chao_node.cpp

  1. 确定话题名称和消息类型
  2. 在代码文件中include消息类型对应的头文件
  3. 在main函数中通过NodeHandler大管家发布一个话题并得到消息发送对象。
  4. 生成要发送的消息包并进行发送数据的赋值
  5. 调用消息发送对象的publish()函数将消息包发送到话题当中。
#include <ros/ros.h>
#include<std_msgs/String.h>

int main(int argc, char *argv[])

    /* code */
    ros::init(argc,argv,"chao_node");

    ros::NodeHandle nh;//该对象是节点与ROS通讯的关键,理解为管家,通过管家发布一个话题并得到一个消息发送对象
    ros::Publisher pub = nh.advertise<std_msgs::String>("connect",10);//pub理解为由管家发的手机,该函数是泛型函数,尖括号参数是消息类型,参数是话题名称和,消息缓存长度

    ros::Rate loop_rate(10);//生成频率对象,括号内是每秒执行次数,即为10hz

    while(ros::ok())
        printf("wait for connect!\\n");
        std_msgs::String msg;
        msg.data = "we can hhhhhh !!!!";
        pub.publish(msg);
        loop_rate.sleep();//短时间阻塞

     
    return 0;

消息缓存长度可以避免等待订阅者订阅消息的时间问题

编译:

ctrl+shift+b

运行:

roscore

rosrun ssr_pkg chao_node

运行结果:

rostopic指令

查看当前系统中所有活跃的话题的指令

rostopic list

查看指定话题中消息包发送频率的指令

rostopic hz /话题名称

查看指定话题中发送消息包内容的指令

rostopic echo /话题名称

将unicode字符转化为中文的指令

echo -e “Unicode命令”

Subscriber 订阅者的实现

ma_node.cpp

  1. 创建atr_pkg软件包
  2. 创建ma_node.cpp节点
  3. 确定话题名称和消息类型
  4. 在代码文件中include <ros.h> 和消息类型对应的头文件
  5. 在main函数中通过NodeHandler大管家订阅一个话题并设置消息接收回调函数。
  6. 定义一个回调函数,对接收到的消息包进行处理
  7. main函数中需要执行ros:spinOnce(),让回调函数能够响应接收到的消息包。
#include <ros/ros.h>
#include<std_msgs/String.h>

//系统自动调用
void chao_callback(std_msgs::String msg)
    ROS_INFO(msg.data.c_str());//将字符数组转化为string类型,并打印时间措


int main(int argc, char *argv[])

    /* code */
    setlocale(LC_ALL,"");//接受发布者的中文内容
    ros::init(argc,argv,"ma_node");

    ros::NodeHandle nh;//该对象是节点与ROS通讯的关键,理解为管家,通过管家发布一个话题并得到一个消息发送对象
    ros::Subscriber sub = nh.subscribe("connect",10,chao_callback);//pub理解为由管家发的手机,该函数是泛型函数,尖括号参数是消息类型,参数是话题名称和,消息缓存长度

    while(ros::ok())
        ros::spinOnce();//调用该函数会注意到消息包的接收

     
    return 0;


缓存长度

图形化显示话题通讯关系工具

保持话题发布,然后在终端执行

rqt_graph

十二、使用launch文件启动多个节点

XML语法:

编写launch文件

在任意一个软件包(例如atr_pkg)中创建launch文件夹,新建launch文件

auto_run.launch

<launch>
	//roscode不需要描述,因为只要运行launch文件就会自动启动roscode
	<node pkg="ssr_pkg" type="yao_ndoe" name="yao_node"/>
	<node pkg="ssr_pkg" type="chao_ndoe" name="chao_node" launch-prefix="gnome-terminal -e"/>//表示使用一个新的终端去运行节点
	<node pkg="atr_pkg" type="ma_ndoe" name="ma_node" output="screen"/>//订阅者
</launch>

节点名称name是为了避免同名节点

运行launch文件

先删除注释,避免报错

roslaunch atr_pkg auto_run.launch
  1. 使用launch文件,可以通过roslaunch指令一次启动多个节点
  2. 在launch文件中,为节点添加 output=”screen”属性,可以让节点信息输出在终端中。(ROS WARN不受该属性控制)
  3. 在launch文件中,为节点添加 launch-prefix=”gnome-terminal -e属性,可以让节点单独运行在一个独立终端中。

十三、发布者节点的应用:底盘运动控制

机器人的运动方向设定

速度消息包的内容

在index.ros.org网站,搜索软件包:geometry_msgs,找到ros版本为noetic,找到速度控制的消息类型:Twist ,包含两个数据成员linear(线性)和angular(角度),分别对应矢量速度和旋转速度

运动控制的实现

流程图,有两个节点,之间通过话题进行通信,速度话题的名称一般是command_velocity

首先,下载wpr_simulation源码包,使用教程可以查看上面

运行wpr_simulation分两个终端执行如下代码

roslaunch wpr_simulation wpb_simple.launch

rosrun wpr_simulation demo_vel_ctrl

编写运动控制案例

进入catkin_ws/src目录:

catkin_create_pkg vel_pkg rospy roscpp geometry_msgs

进入src目录创建vel_node.cpp

#include <ros/ros.h>
#include <geometry_msgs/Twist.h>

int main(int argc, char** argv)

  ros::init(argc, argv, "demo_vel_ctrl");

  ros::NodeHandle n;
  ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("/cmd_vel", 10);

  geometry_msgs::Twist vel_msg;
  vel_msg.linear.x = 0.1;
  vel_msg.linear.y = 0.0;
  vel_msg.linear.z = 0.0;
  vel_msg.angular.x = 0;
  vel_msg.angular.y = 0;
  vel_msg.angular.z = 0;

  ros::Rate r(30);
  while(ros::ok())
  
    vel_pub.publish(vel_msg);
    r.sleep();
  

  return 0;

修改CMakeLists.txt

add_executable(vel_node src/vel_node.cpp)
add_dependencies( vel_node $$PROJECT_NAME_EXPORTED_TARGETS $catkin_EXPORTED_TARGETS)
target_link_libraries(vel_node 
  $catkin_LIBRARIES
)

编译:
运行:

roslaunch wpr_simulation wpb_simple.launch

rosrun vel_pkg vel_node

十四、激光雷达

  • 按照测量维度可以分为单线雷达和多线雷达
  • 按照测量原理可以分为三角测距雷达和TOF雷达
  • 按照工作方式可以分为机械旋转雷达和固态雷达

十五、使用Rviz观测传感器数据

Rviz是可视化工具,方便对机器人状态实时观测的辅助工具

执行仿真工具

roslaunch wpr_simulation wpb_simple.launch

拆分终端输入

rviz

修改fixed frame为base_footprint,然后点击左侧add添加机器人模型


添加激光雷达显示条

修改激光雷达的话题名称和显示点大小

rviz仿真工具与gazebo可视化工具的关系

保存可视化工具的配置
手动:File->save config as->在主目录下保存lidar.rivz,下次使用要手动点open config
自动:在launch中加载rviz配置文件

  • 运行:roslaunch wpr_simulation wpr_rviz.launch

十六、激光雷达消息包数据格式

传感器数据包:sensor_msgs,找到消息类型:LaserScan


在运行仿真和可视化工具的前提下,显示scan话题里面的消息

rostopic echo /scan --noarr #把数组折叠起来

参数解释

起始角度和终止角度【对ranges数组有用】

测距的旋转角度和时间差【用于修正高速运动的机器雷达测距点阵的形变】

两次扫描时间差为雷达转一圈所耗费的时间,

ranges数组

  • 每旋转一度就进行一次测距行为,数组的第一个成员是起始点

intensities表示信号的强度,强度越强,数据值有效性越高

十七、订阅者节点的应用:获取激光雷达数据

获取激光雷达数据的实现

分两个终端执行如下代码

roslaunch wpr_simulation wpb_simple.launch

rosrun wpr_simulation demo_lidar_data

流程图

编写获取激光雷达数据的案例

进入catkin_ws/src目录:

catkin_create_pkg lidar_pkg rospy roscpp sensor_msgs

进入src目录创建lidar_node.cpp

#include <ros/ros.h>
#include <std_msgs/String.h>
#include <sensor_msgs/LaserScan.h>

void LidarCallback(const sensor_msgs::LaserScan msg)

    int nNum = msg.ranges.size();
    
    int nMid = nNum/2;//180°为正前方
    float fMidDist = msg.ranges[nMid];
    ROS_INFO("前方测距 ranges[%d] = %f 米", nMid, fMidDist); 


int main(int argc, char** argv)

    setlocale(LC_ALL,"");//设置中文编码
    ros::init(argc,argv,"demo_lidar_data");
    
    ros::NodeHandle n;
    ros::Subscriber lidar_sub = n.subscribe("/scan", 10, &LidarCallback);

    ros::spin();//保持节点运行不退出

修改CMakeLists.txt

add_executable(lidar_node src/lidar_node.cpp)
target_link_libraries(lidar_node 
  $catkin_LIBRARIES
)

编译
运行:

roslaunch wpr_simulation wpb_simple.launch

rosrun lidar_pkg lidar_node

十八、节点发布+订阅的应用:激光雷达避障

修改lidar_node.cpp

#include <ros/ros.h>
#include <std_msgs/String.h>
#include <sensor_msgs/LaserScan.h>
#include <geometry_msgs/Twist.h>

ros::Publisher vel_pub;
static int nCount = 0;

void LidarCallback(const sensor_msgs::LaserScan msg)

    int nNum = msg.ranges.size();
    
    int nMid = nNum/2;
    float fMidDist = msg.ranges[nMid];
    以上是关于如何安装ros系统的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu 18.04 版本下安装ROS 系统

详细介绍如何在ubuntu20.04中安装ROS系统,超快完成安装(最新版教程)

RancherOS(ROS)如何安装到硬盘? 并设置为用户自动登录到系统? -a rancher.autologin=tty1

尽管在 ROS 中有其他版本的 OpenCV 版本,我如何引用独立的 OpenCV 安装

ROS 机器人操作系统:Ubuntu 安装 ROS Noetic

ROS 机器人操作系统:Ubuntu 安装 ROS Noetic