最近一周因为工程需要,把ROS的一些基础学习了一下,现在做一下总结。

学习资源:

#创客智造整理的wiki上的ROS入门教程(中文)
https://www.ncnynl.com/category/ros-junior-tutorial/ #如果时间较多想锻炼自己英文水平或者就是英语大牛可以直接阅读wiki原稿
http://wiki.ros.org/ROS/Tutorials
#入门学习视频:古月居ROS入门21讲(推荐!!!)
https://www.bilibili.com/video/av59458869?from=search&seid=4767000398980361963

第一次接触ROS的话不建议去看创客智造和wiki ros,上面一开始就讲了两种工作区创建方式什么build和catkin_make的,穿插说的看着就很乱而且也不好理解,第一遍看的时候看的很糊涂。。。

而且那是以前的教程,现在ROS文件结构说法也已经更新了。

这里建议大家去b站看古月老师的视频!!讲解的很详细!!这么好的视频居然都没多少人看!!大家快去关注三连阿!

附上古月老师21讲课程资源的Git hub地址:

https://github.com/huchunxu/ros_21_tutorials/

好了,以下是我们的总结(以下都是ubuntu环境):

1. ROS安装

这里介绍ros-indigo版本的安装,其他版本大家可以参考并自行百度安装步骤:

(1) 添加ROS软件源

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list' 

若上面不可用,可以尝试这个:

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

(2) 添加密钥

wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudo apt-key add -

(3) 安装ROS

sudo apt update
sudo apt install ros-indigo-desktio-full

(4)初始化rosdep

sudo rosdep init
rosdep update

(5)设置环境变量

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

(6)安装rosinstall

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

(7)安装完成

用ctl+alt+t打开一个终端,直接输入:roscore

出现下图信息,则表示ros安装成功:

接下来我们测试一个ros里自带的小案例

ctrl+alt+t新开一个终端(刚刚roscore终端不要关闭了,关闭了的话得先运行roscore)

输入命令,打开一个带有小乌龟的窗口:

rosrun turtlesim turtlesim_node 

再打开一个终端输入命令,按动方向键,能观察到乌龟移动(需要定位在当前终端):

rosrun turtlesim turtle_teleop_key 

至此,成功安装好了ROS

2. ROS文件结构

  • 工作空间
  • 功能包
  • 文件(配置文件、具体代码文件、参数文件等)

创建命令:

创建工作空间:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
编译工作空间:
cd ~/catkin_ws/
catkin_make

设置环境变量(重要):
source devel/setup.bash

检查环境变量:
echo $ROS_PACKAGE_PATH 创建功能包:
(格式:catkin_create_pkg <package_name> [depend1] [depend2] [depend3] [...])
cd ~/catkin_ws/src
catkin_create_pkg test_pkg_std_msgs rospy roscpp 编译功能包:
cd ~/catkin_ws
catkin_make  
source ~/catkin_ws/devel/setup.bash 同一个工作空间下,不允许存在同名功能包;
不同工作空间下,允许存在同名功能包。

3. ROS通信

ROS里主要是通过一种叫节点(Node)的东西进行通信

节点是ROS中的执行单元,执行具体任务的进程,独立运行的可执行文件;

不同节点可以使用不同的编程语言,可分布式运行在不同的主机,目前支持的语言有:

  • C++
  • Python
  • Java
  • JS

节点间通过话题(Topic)或服务(Service)传递消息

  • 话题(Topic)

  采用异步通信机制,即发布消息的节点不管有没有其他接受消息的节点,只要它打开了,就会一直发消息。

消息数据类型和数据结构定义在.msg文件中。

  • 服务(Service)

  同步通信机制,使用客户端/服务器(C/S)模型,客户端发送请求,服务器完成处理后返回应答数据。

服务的数据结构和类型定义在.srv文件内。

ROS初步的基础概念大概就是这些,下篇我们来看一看具体的代码实现通信。

ROS基础学习总结的更多相关文章

  1. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  2. 如何从零基础学习VR

    转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...

  3. IOS基础学习-2: UIButton

    IOS基础学习-2: UIButton   UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...

  4. HTML5零基础学习Web前端需要知道哪些?

    HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...

  5. python入门到精通[三]:基础学习(2)

    摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...

  6. python入门到精通[二]:基础学习(1)

    摘要:Python基础学习: 注释.字符串操作.用户交互.流程控制.导入模块.文件操作.目录操作. 上一节讲了分别在windows下和linux下的环境配置,这节以linux为例学习基本语法.代码部分 ...

  7. CSS零基础学习笔记.

    酸菜记 之 CSS的零基础. 这篇是我自己从零基础学习CSS的笔记加理解总结归纳的,如有不对的地方,请留言指教, 学前了解: CSS中字母是不分大小写的; CSS文件可以使用在各种程序文件中(如:PH ...

  8. Yaf零基础学习总结5-Yaf类的自动加载

    Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...

  9. Yaf零基础学习总结4-Yaf的配置文件

    在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置 ...

随机推荐

  1. jpa remove

    直接使用em.remove会报错,IllegalArgumentException: Removing a detached instance 即对象处于脱管的状态,使用merge使之被session ...

  2. html from表单异步处理

    from表单异步处理. 简单处理方法: jQuery做异步提交表单处理, 通过$("#form").serialize()将表单元素的数据转化为字符串, 最后通过$.ajax()执 ...

  3. 虚拟机安装linux遇到的问题

    1.运行 yum -y update,提示没有权限,改为sudo yum  -y update后,提示没有已启用的仓库.网上查找发现没有yum的库,然后开始安装yum. sudo apt-get in ...

  4. 将百分制转换为5分制的算法 Binary Search Tree ordered binary tree sorted binary tree Huffman Tree

    1.二叉搜索树:去一个陌生的城市问路到目的地: for each node, all elements in its left subtree are less-or-equal to the nod ...

  5. python学习之路---day16--面向对象

    面向对象及成员的基本总结复习一:先用一个实际例子说明类: class 类名: class Car: #__init__ :使我们在具体构造一个对象时,使这个对象有具体的属性,像有名字啊,价格等等这样的 ...

  6. Jquery append() 添加多次同个元素时,只有一次作用,如何解决?

    这是一个简单的table <table id="mytable"> <!-- 这里将要动态加载tr数据 --> </table> 这是一个模版t ...

  7. poj2718Smallest Difference (穷竭搜索)

    escription - 题目描述 给定若干位十进制数,你可以通过选择一个非空子集并以某种顺序构建一个数.剩余元素可以用相同规则构建第二个数.除非构造的数恰好为0,否则不能以0打头. 举例来说,给定数 ...

  8. 字符串类——KMP子串查找算法

    1, 如何在目标字符串 s 中,查找是否存在子串 p(本文代码已集成到字符串类——字符串类的创建(上)中,这里讲述KMP实现原理) ? 1,朴素算法: 2,朴素解法的问题: 1,问题:有时候右移一位是 ...

  9. jmeter 非GUI执行测试,没有响应数据保存到jtl文件办法

    估计是jmeter为了减轻客户机负担,就没又默认把这些信息保存,如果想要保存,也可以,需要做出如下配置: 修改bin目录下的user.properties文件,追加配置: jmeter.save.sa ...

  10. MySQL集群(PXC)入门

    一.学习动机 伴随互联网行业的兴起,越来越多的领域需要相应的技术方案,比如:打出软件.电商平台.直播平台.电子支付.媒体社交. 身边常见的,校园出成绩那一年,我们会感觉网站异常的卡顿,因为访问人数太多 ...