ROS入门教程(一)
本文为原创博客, 转载请注明出处:https://blog.csdn.net/q_z_r_s
机器感知 一个专注于SLAM、三维重建、机器视觉等相关技术文章分享的公众号 ![]() |
开源地址:点击该链接
Core ROS 教程(新手)
1. 安装和配置ROS环境
安装ROS: 详见ROS安装教程
1.1 管理ROS环境
确保ROS环境变量已被设置
printenv | grep ROS
#输出如下
linux@linux:~$ printenv | grep ROS
ROS_ROOT=/opt/ros/indigo/share/ros
ROS_PACKAGE_PATH=/opt/ros/indigo/share:/opt/ros/indigo/stacks
ROS_MASTER_URI=http://localhost:11311
ROSLISP_PACKAGE_DIRECTORIES=
ROS_DISTRO=indigo
ROS_ETC_DIR=/opt/ros/indigo/etc/ros
1.2 创建ROS工作空间
关于catkin和rosbuild的选择
ROS Indigo发布于2014年, ROS Groovy发布于2012, 根据官网说明, ROS Groovy及其之后的版本使用catkin, ROS Fuerte及更老的版本使用rosbuild, 因此, 我这里使用catkin
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make
在工作空间中首次运行catkin_make
命令后, 它会在./src
目录下创建一个CMakeLists.txt.
linux@linux:~/catkin_ws$ ls
build devel src
在devel
文件夹中, 有几个setup.*sh
的文件, source
任何一个, 都将覆盖工作空间顶层环境
$ source devel/setup.bash
输入以下命令, 确保ROS_PACKAGE_PATH
环境变量包含了当前路径
$ echo $ROS_PACKAGE_PATH
/home/youruser/catkin_ws/src:/opt/ros/kinetic/share
#自己添加的, 非官网
linux@linux:~/catkin_ws$ printenv | grep ROS
ROS_ROOT=/opt/ros/indigo/share/ros
ROS_PACKAGE_PATH=/home/linux/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks
ROS_MASTER_URI=http://localhost:11311
ROSLISP_PACKAGE_DIRECTORIES=/home/linux/catkin_ws/devel/share/common-lisp
ROS_DISTRO=indigo
ROS_ETC_DIR=/opt/ros/indigo/etc/ros
通过对比, 仅有ROS_PACKAGE_PATH
和ROSLISP_PACKAGE_DIRECTORIES
发生了变化
2. ROS文件系统
2.1 安装ros-indigo-ros-turorials(安装ROS时已经安装过了)
sudo apt-get install ros-indigo-ros-tutorials
2.2 文件系统概念
- Packages: Packages是ROS代码的软件单元的一种组织方式, 每个Package可以包含库, 可执行程序, 脚本等.
- Manifests(package.xml): manifest(中文: 清单)是一个package的描述文件. 它定义了包之间的依赖, 并用来捕获包的元信息(meta information, 元数据是关于数据的组织、数据域及其关系的信息,简言之,元数据就是关于数据的数据。), 例如版本, 维护者, 证书等等.
2.3 文件系统工具
ROS代码分布于很多packages
中, 使用诸如ls
和cd
这样命令行来进行文件导航是及其繁琐乏味的, 因此ROS提供了相关的工具来使用
使用rospack
rospack可以获得有关packages的信息, 此处展示
find
命令, 帮助命令为rospack help
linux@linux:~/catkin_ws$ rospack find roscpp /opt/ros/indigo/share/roscpp
使用roscd
roscd是rosbash的一部分, 此命令可以让你直接把目录改变到一个package中或一个stack中
#语法, 可以直接进入某个package文件夹中 roscd [locationname[/subdir]] linux@linux:~/catkin_ws$ roscd roscpp linux@linux:/opt/ros/indigo/share/roscpp$ pwd /opt/ros/indigo/share/roscpp
注: 和其他ROS工具类似, roscd只寻找
ROS_PACKAGE_PATH
所列出路径, 其中的每个路径用:
来分隔.roscd log
此命令会进入ROS存储log的文件夹, 如果执行此命令之前名优运行过ROS程序, 此命令会报错, 找不到此文件夹.
linux@linux:/opt/ros/indigo/share/roscpp$ roscd log No active roscore bash: cd: /home/linux/.ros/log: 没有那个文件或目录
使用rosls
rosls与roscd类似, 不多介绍.
Tab补全
rosls, roscd, TAB都与Linux shell提供了同样的功能, 不多介绍
2.4 总结
- rospack = ros + pack(age)
- roscd = ros + cd
- rosls = ros + ls
此类书写风格在ROS工具中很常用.
3. 创建ROS Package
此章节使用roscreate-pkg
或catkin
创建一个新的package, 并用rospack列出包的的依赖关系.
3.1 一个catkin package的组成
必须包含一个catkin兼容的package.xml文件
必须包含一个使用catkin的CMakeLists.txt
每个package必须有自己的文件夹: 这意味着没有嵌套的包,也没有共享同一目录的多个包.
最简单的package如下:
my_package/CMakeLists.txtpackage.xml
3.2 catkin工作空间中的package
使用catkin packages工作的推荐方式是使用catkin工作空间, 当然也可以单独建立一个catkin package. 一个普通的工作空间大概如下:
workspace_folder/ -- WORKSPACEsrc/ -- SOURCE SPACECMakeLists.txt -- 'Toplevel' CMake file, provided by catkinpackage_1/CMakeLists.txt -- CMakeLists.txt file for package_1package.xml -- Package manifest for package_1...package_n/CMakeLists.txt -- CMakeLists.txt file for package_npackage.xml -- Package manifest for package_n
3.3 创建一个catkin Package
创建工作空间的方法见:
1.2 创建ROS工作空间
catkin_create_pkg <package_name> [depend1][depend2] [depend3]
$ cd ~/catkin_ws/src $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
3.4 编译catkin工作空间并source
$ cd ~/catkin_ws
$ catkin_make
$ . ~/catkin_ws/devel/setup.bash
3.5 package依赖
一级依赖:
$ rospack depends1 beginner_tutorials
此命令的输出与穿件package时传入的参数一致, 这些对packages的依赖存储在package.xml中.
间接依赖:
$ rospack depends1 rospy
大多数情况下, 一个依赖项都会有它自己的依赖. rospack可以递归检测所有的嵌套依赖.
3.6 定制Package
定制package.xml
包括description, maintainer, license, dependencies(包括了buildtool_depend, build_depend, exec_depend)
定制CMakeLists.txt
4. 编译ROS Package
4.1 编译Packages
catkin_make可以看做是组合调用了标准Cmake工作流: cmake, make
# In a CMake project $ mkdir build $ cd build $ cmake .. $ make $ make install # (optionally) # In a catkin workspace $ catkin_make $ catkin_make install # (optionally)
catkin_make命令将编译
src
目录下的所有工程. 对于源码不在当前目录下的使用方法为:# In a catkin workspace $ catkin_make --source my_src $ catkin_make install --source my_src # (optionally)
编译Package
在当前工作空间中(~/catkin_ws/):
catkin_make
.
5. ROS Nodes
本节引入ROS graph的概念, 并探讨roscore, rosnode, rosrun的使用.
5.1 Graph概念概览
- Nodes: 一个node表示一个使用ROS来与其他nodes进行通信的
可执行程序
. - Messages: ROS数据类型.
- Topics: Nodes可以向topic发布消息,也可以订阅topic来接收消息.
- Master: Name service for ROS(即帮助节点找到彼此).
- rosout: ROS下的stdout/stderr.
- roscore: Master + rosout + parameter server
5.2 Nodes
在ROS package中, 一个node实际上只不过是一个可执行文件. ROS nodes使用ROS client library与其他nodes进行通信. Nodes可以发布和订阅一个Topic. Nodes也可以提供或使用一个Service.
5.3 Client Libraries
ROS client library允许使用不同编程语言写出来的nodes进行通信
- rospy = python client library
- roscpp = c++ client library
5.4 roscore
roscore是当你使用ROS时第一个应该运行的东西
5.5 使用rosnode
rosnode显示当前正在运行的有关ROS nodes的信息
#列出活跃状态的nodes
$ rosnode list
#显示有关指定node的信息
$ rosnode info /rosout
5.6 使用rosrun
rosrun允许使用package名来直接运行一个package中的node(不用非得知道package的路径).
#Usage:
$ rosrun [package_name] [node_name]
#run the turtlesim_node in the turtlesim package
$ rosrun turtlesim turtlesim_node
ROS支持为node重新指定名字
$ rosrun turtlesim turtlesim_node __name:=my_turtle
linux@linux:~$ rosnode list
/my_turtle
/rosout
可以使用$ rosnode ping my_turtle
来测试是否真的跑起来了.
5.7 总结
- roscore = ros + core: master(prodives name service for ROS) + rosout(stdout/stderr) + parameter server.
- rosnode = ros + node: ROS tool to get information about a node.
- rosrun = ros + run: runs a node from a given package.
6. ROS Topics
本节引入ROS topics, 与此同时使用rostopic和rqt_plot工具.
6.1 准备工作
- 确保roscore在运行, 在一个新打开终端输入
roscore
可进行测试 - 运行
$ rosrun turtlesim turtlesim_node
- 运行
$ rosrun turtlesim turtle_teleop_key
, 使用方向键控制turtle移动
6.2 ROS Topics
使用
rqt-graph
rqt-graph
创建系统的一个动态图.rtq-graph
是rqt package
的一部分, 安装方法如下:$ sudo apt-get install ros-<distro>-rqt $ sudo apt-get install ros-<distro>-rqt-common-plugins
在新终端中输入:
$ rosrun rqt_graph rqt_graph
会出现一个可视化窗口, 显示nodes之间的关系.引入
rostopic
rostopic
工具用来获取ROS topics.使用
rostopic echo
rostopic echo
显示发布在一个topic上的数据, 只有在运行之后有新的消息发布到topic上时才会有输出.#Usage: $ rostopic echo [topic] $ rostopic echo /turtle1/cmd_vel
使用
rostopic list
使用
$ rostopic list -v
列出所有的topics
6.3 ROS Messages
topics上的通信是通过在nodes之间发送ROS messages进行的. 发布者和订阅者必须发送和接收同种类型的消息. 这意味着, topic的类型是由发布在其上的message类型定义的. message的类型可通过rostopic type [topic]
来查询. 可以使用rosmsg show type
查看信息格式.
6.4 rostopic续
rostopic pub
可以在一个topic上发布数据#Usage: $ rostopic pub [topic] [msg_type] [args] #双短线表示后边的不是命令选项 $ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
rostopic hz
报告数据发布速率:$ rostopic hz [topic]
6.5 使用rqt_plot
使用指令: $ rosrun rqt_plot rqt_plot
, 添加需要查看的topic即可.
7. ROS Services and Parameters
本节介绍ROS Services and Parameters, 与此同时使用rosservice和rosparam命令行工具. Services
是nodes间进行通信的另一种方式, Services
允许nodes发送一个请求(request和接收一个响应(response).
#Usage:
rosservice list [topic]#列出[topic]所提供的服务
rosservice type [service]#显示服务类型
rosservice call [service] [args]#调用服务
#查看带参数的示例
rosservice find #find services by service type
rosservice uri #print service ROSRPC uri
$ rosservice type /spawn | rossrv showfloat32 xfloat32 yfloat32 thetastring name---string name
$ rosservice call /spawn 2 2 0.2 ""#name field is optionalname: turtle2
rosparam
循序我们存储和操作ROS Parameter Server
上的数据, Parameter Server
可以存储整型, 浮点型, 布尔型, 字典, 列表. rosparam
使用YAML
标记语言语法.
#Usage:
rosparam set [param_name] #set parameter
#设置参数之后使用/clear服务刷新操作
$ rosservice call /clear
rosparam get [param_name] #get parameter
rosparam load #load parameters from file
rosparam dump #dump parameters to file
rosparam delete #delete parameter
rosparam list #list parameter names
#Usage:
rosparam dump [file_name] [namespace]
rosparam load [file_name] [namespace]
#write all the parameters to the file params.yaml
$ rosparam dump params.yaml
# load these yaml files into new namespaces, e.g. copy
$ rosparam load params.yaml copy
$ rosparam get /copy/background_b
ROS入门教程(一)相关推荐
- ROS入门教程(三)—— 用C++实现Hello world
本文将继上文介绍安装完用C++或Python实现Hello world后,如何在VS Code下用C++实现Hello world. 目录 前言 Hello world实现 前言 在VS Code下用 ...
- ROS 入门教程 —— 小海龟简单控制
ROS 入门教程 -- 小海龟简单控制 这里我们直接介绍命令使用方法,原理请查看我的另外几篇博客: ROS 命令行工具的使用 ROS 创建工作空间与功能包 运行并控制小海龟 由于小海龟并不是 ROS ...
- 【ROS入门教程】---- 01 ROS介绍
ROS,机器人系统的不二选择 文章目录 ROS,机器人系统的不二选择 ROS是什么 ROS的强大之处 ROS的学习方法 总结 ROS是什么 作为新世纪的孩子们,可能从出生以来,我们就伴随着机器人的飞速 ...
- ROS学习----依据ROS入门教程,整理的ROS命令
文章目录 ROS命令学习 文件系统介绍 ROS文件系统工具命令:rospack,rosstack roscd,rosls 创建ROS程序包命令:roscreate,catkin程序包结构,catkin ...
- ROS编程入门教程(全过程示例代码)
ROS系统目前主流语言为C++/Python , Python需要安装vscode, 所以本文使用C++ .编译使用catkin (catkin和rosbuild都能用) 首先创建工作空间(worki ...
- ROS 中文教程目录(最好不要过度依赖这种,建议养成看英文原版习惯)
About | Support | Discussion Forum | Service Status | Q&A answers.ros.org Search: cn ROS Tutoria ...
- ros入门--中科院软件所ros学习笔记
视频链接: 中科院软件所-机器人操作系统入门(ROS入门教程)_哔哩哔哩_bilibili 中科院软件所-机器人操作系统入门(ROS入门教程)_哔哩哔哩_bilibili 另外有一个不错的 学习网址: ...
- 【ROS入门学习01| ROS命令行工具的使用】
ROS命令行工具的使用 -----------------可以配合古月居的ROS入门教程来学习实践. 文章目录 ROS命令行工具的使用 一.roscore 二.rosrun 三.rqt_graph 四 ...
- 【一学就会的ROS基础入门教程 】03-1 ROS基础编程:ROS工作空间的创建、话题topic的发布与接收、以及话题消息的自定义使用
[一学就会的ROS基础入门教程 ]03-1 ROS基础编程:ROS工作空间的创建.话题topic的发布与接收.以及话题消息的自定义使用 文前白话 1.创建工作空间与功能包 关于工作空间的介绍 创建开发 ...
- ROS入门21讲 | ROS机器人入门教程 【简明笔记】
古月·ROS入门21讲 | 一学就会的ROS机器人入门教程 文章目录 ROS核心概念 ROS命令行 工作空间与功能包 订阅与发布 发布者 Publisher 订阅者 Subscriber 话题消息的自 ...
最新文章
- 题目1206:字符串连接
- 拖延不是你的锅,全是基因惹的祸
- c++中结构体套结构体用 = {0}初始化编译报错解决办法(用memset或者={})(error: invalid conversion)
- eq linux_在线试用 200 多种 Linux 和 Unix 操作系统 | Linux 中国
- C语言操作符(又称运算符)(1)
- [译]BitTorrent协议规范
- 针对CDP协议攻击分析及安全防护
- 计算机恢复语言文件格式,当你的电脑无故变成英文且语言包丢失后用这几招恢复-win7语言包...
- Google 发布全新绘画工具 AutoDraw
- Mina(1):快速上手
- 名编辑电子杂志大师教程 | 添加搜索功能
- 神经网络模型应用实例SPSS - 典型的神经网络模型 - 神经网络模型的应用
- WORD中图、表、公式自动编号及制表位、尾注的应用
- “百度杯”CTF比赛 十一月场Fuzz
- Accenture国内出差常用报销填法
- 短信验证码(俗称接码平台)分享定义是什么
- 如何获取PDF修改权限并编辑文档?
- iOS 真机调试出现”A signed resource has been added modified or deleted“错误的解决办法
- 【bug】联想小新出现问题,你的PIN不可用。
- oracle创建多字段索引吗,oracle复合索引介绍(多字段索引)
热门文章
- 通用 USB 重定向和客户端驱动器注意事项
- 华硕飞行堡垒atk驱动在哪_11月8日华硕再撒大额福利 满减优惠价机不可失_第1页...
- Linux之执行一个可执行文件
- Java字符串排序(根据字节及字符长度进行排序)
- 浅谈-61850-2-服务端模拟软件构建
- 基于snowflake的Id序列号生成器
- 【计算机网络原理】各层的数据传输
- 微粒群算法(一、简介)
- c语言如何用编译器编辑,C语言编译器怎么用,C语言编译器使用教程
- c语言编译器官网,C语言编译器app_c语言编译器app官网下载_c语言编译器手机版app-多特软件站安卓网...