ROS学习笔记
创建ros工作环境:
mkdir -p ~/catkin_ws/src //建立项目目录,同时生成src文件夹
cd ~/catkin_ws/ //进入项目目录
catkin_make //编译项目,即使什么文件也没有也可以编译
source devel/setup.bash //执行编译生成的脚本文件,这会使当前项目目录加入环境变量。每次开启终端都要设置
echo $ROS_PACKAGE_PATH //检查环境变量是否修改
ros文件架构:粗体为文件夹,此外为文件
catkin_ws 总目录
build 存储用于编译的文件
devel 存储生成的可执行文件,提供给其他包使用的头文件
src 存储自己编写的源代码CMakeLists.txt 编译文件
package (自命名)源代码以包的形式管理,每个包有一个main函数,建立一个节点就是执行一个包中的main函数package.xml 声明这个包在编译链接运行中所依赖的其他包
CMakeLists.txt 指定编译链接的流程
launch 用于存储.launch文件,一种脚本文件,例如生成多个结点,并指定结点间的关系
msg 存储.msg文件,如果要在发布的话题中使用自定义的数据类型,就必须编写这个文件。
srv 存储.srv文件,如果要发布一个服务,就要编写这个文件
src 存储源代码文件
总结:ros的工作环境中是以包为单位来组织代码,逻辑上一个包代表一个部件,例如一个网口,一个串口等等。
ros文件系统工具:
rospack find <package name> 寻找包的目录
roscd <package name> 进入包的目录
roscd log 查询ros的运行日志
rosls <package name> 显示包下的文件
由于ros是以包来管理代码,那么使用linux中的cd,ls指定绝对路径就有些不方便。可以用这些工具直接使用包的名字。但是系统可以找到包的前提是$ROS_PACKAGE_PATH变量中存储这个包所在的工作环境目录。一般自己建立的工作环境目录不会添加在这个变量中,所以在打开一个终端时需要source devel/setup.bash来添加工作环境目录
创建ros程序包:
//进入src文件夹
cd ~/catkin_ws/src
//使用catkin_create_pkg命令来创建一个名为'beginner_tutorials'的新程序包,这个程序包依赖于std_msgs、roscpp和rospy:
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
建立包的时候最好指定自己需要哪些包。这样在生成package.xml和CMakeLists.txt中就会添加这些信息。当然可以以后自行继续添加其他的库。
生成了package.xml文件后我们就可以查询到它的依赖包:
rospack depends1 <package name> 查询包的一级依赖
rospack depends <package name> 查询包的所有依赖
常用ROS命令
启动与查看结点。ros中是以结点(node)来组织工作的,每个一个节点相当于一个应用。对机器人而言,一个节点可能是一个机械臂,也可能是一个电机。这要看设计者的架构。
roscore 开启ros内核环境,只能开启一个
rosrun <package name> <node name> 打开包中的程序,生成相应的节点
rosnode list 查询ros环境中的所有节点
rosnode info <node name> 查询节点的详细信息
查询topic信息。结点与结点之间可以用topic交换信息。一个节点可以发布若干个topic,如果有节点订阅了这个topic,那么就可以接受这个信息,并执行指定的回调函数。
rostopic echo <topic name> 观察topic中传递的数据
rostopic list -v 显示所有的topic,分发布和接受显示
rostopic type <topic name> 显示topic中的数据类型
rostopic pub <topic name> <type name> <args> 将参数以type name所声明的类型发布到topic中
举例:rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
以上命令会发送一条消息给cmd_vel,告诉它以2.0大小的线速度和1.8大小的角速度开始移动。其中-1代表信息发布后程序返回
举例:rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
这条命令以1Hz的频率发布速度命令到速度话题上
rostopic hz <topic name> 统计topic发送信息的频率,程序会持续统计,用“Ctrl+c”退出
topic对于收发双发只能完成单向的传递,在需要反馈的情况下就需要定义两个topic。而service提供了反馈的机制。提供服务者是服务器,使用服务者是客户端。服务器声明相关服务,并指定回调函数。客户端呼叫服务并给出输入参数,服务器运算完成后返回结果。但是这样每次呼叫服务只能反馈一次。还有一种Action机制,可以持续监听服务器,不断反馈。
rosservice list 显示所有的服务
rosservice type <service name> 显示服务的类型,应该就是服务对应的函数
rosservice call <service name> <args> 调用服务
对参数服务器的操作
rosparam list 显示参数服务器中的所有参数
rosparam set <param name> <args> 设置参数服务器中的参数
rosparam get <param name> 获取参数服务器中的参数,如果参数名为“/”,表示显示所有数据
rosparam dump <file name> 将参数服务器中参数写入指定文件中,文件后缀为yaml
rosparam load params.yaml copy //加载params.yaml中的数据进入copy命名空间
rosparam get copy/background_b //获取该空间中指定参数的数据
运行launch脚本
roslaunch <package name> <file name.launch> 运行.launch文件
查询topic和service中的数据结构
rosmsg show <massage name> 显示消息中数据结构
rossrv show <service type> 显示服务中输入输出的数据结构
记录话题信息
rosbag record -a 在当前目录生成bag文件,记录所有topic发布的消息
rosbag record -o <file name> <topic name> 将topic中发布的信息记录到指定文件中
rosbag info <file name> 显示bag文件的信息
rosbag play <file name> 将bag文件中记录的信息重新发布
还有几个好用的工具介绍:
rosrun rqt_graph rqt_graph 打开节点视图,观察topic和节点的关系
rosrun rqt_plot rqt_plot 时序图表工具,可以显示topic中数据的时序变化
rosrun rqt_console rqt_console 运行rqt_console(显示节点输出信息)
rosrun rqt_logger_level rqt_logger_level 运行rqt_logger_level(修改节点信息等级)
ROS发布自己的程序
推荐教程:核心 ROS 教程
我在学习的过程中发现教程中有个错误。可能只是对Kinetic这个版本不一样而已。就是在定义自己的消息类型时,教程说在package.xml添加<run_depend>message_runtime</run_depend>,实际上应该添加<exec_depend>message_runtime</exec_depend>
ROS学习笔记的更多相关文章
- ROS学习笔记七:在ROS中使用USB摄像头
下面是一些USB摄像头的驱动(大多数摄像头都支持uvc标准): 1 使用软件库里的uvc-camera功能包 1.1 检查摄像头 lsusb ----------------------------- ...
- ROS学习笔记八:基于Qt搭建ROS开发环境
1 前言 本文介绍一种Qt下进行ROS开发的完美方案,使用的是ros-industrial的Levi-Armstrong在2015年12月开发的一个Qt插件ros_qtc_plugin,这个插件使得Q ...
- ROS学习笔记1-引言
该学习笔记参考ROS官方wiki的内容,见:http://wiki.ros.org/ROS/Introduction 什么是ROSROS的全称是Robot Operating System,即机器人操 ...
- ROS学习笔记十二:使用gazebo在ROS中仿真
想要在ROS系统中对我们的机器人进行仿真,需要使用gazebo. gazebo是一种适用于复杂室内多机器人和室外环境的仿真环境.它能够在三维环境中对多个机器人.传感器及物体进行仿真,产生实际传感器反馈 ...
- ROS学习笔记十:URDF详解
Unified Robot Description Format,简称为URDF(标准化机器人描述格式),是一种用于描述机器人及其部分结构.关节.自由度等的XML格式文件. 一.URDF语法规范 参见 ...
- ROS学习笔记五:创建和使用ROS msg和srv
1 msg和srv简介 1.1 msg文件 msg文件就是一个简单的text文件,其中每行有一个类型和名称,可用的类型如下: int8, int16, int32, int64 (plus uint* ...
- ROS学习笔记2-基本概念
本笔记来源于:http://wiki.ros.org/ROS/Concepts ROS文件系统级别文件系统级别主要包含了你能在ROS的磁盘上遇到的资源,包括: 包(Packages):包是ROS中资源 ...
- ROS学习笔记(七)——节点
NEW 1 #打开新的终端,以后不再注释$ sudo apt-get install ros-<distro>-ros-tutorials #下载一个教学用的仿真器$ roscore #运 ...
- ROS学习笔记(六)——创建、编译包
$ cd ~/catkin_ws #如果新开一个终端,就需要先吧ROS的工作空间配置好 $ source devel/setup.bash #工作空间的环境配置 #正式开始创建包 $ catkin_c ...
随机推荐
- python数据集处理
一.如何删除数据里中的某一列 1)打开文件open() 2)for循环读取文件的每一行 strip()--去除首尾的空格,split()--以空格分割数据.返回list数据 /** 这一部分对数据集进 ...
- Codeforces 777A Shell Game
A. Shell Game time limit per test:0.5 seconds memory limit per test:256 megabytes input:standard inp ...
- 让两个数x,y一直保持互质的模版
int gcd(int x,int y) { )return x; else return gcd(y,x%y); }
- Team Queue(STL练习题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1387 Team Queue Time Limit: 2000/1000 MS (Java/Others ...
- linux命令 uname -r 和 uname -a 的解释与演示
1.uname -r : 显示操作系统的发行版号2.uname -a :显示系统名.节点名称.操作系统的发行版号.内核版本等等. 系统名:Linux 节点名称: iZ2zeeailqvwws5dcui ...
- c++(非递归排序)
在上面一篇博客当中,我们发现普通查找和排序查找的性能差别很大.作为一个100万的数据,如果使用普通的查找方法,那么每一个数据查找平均下来就要几十万次,那么二分法的查找呢,20多次就可以搞定.这中间的差 ...
- 在Linux上如何查看Python3自带的帮助文档?
俩个步骤: 在Linux终端下输入: ortonwu@ubuntu:~$ pydoc -p 8000 pydoc server ready at http://localhost:8000/ 打开浏览 ...
- TI-RTOS 控制LED灯
TI将FreeRtos放在自家芯片上,于是得到了TI-RTOS,两者的区别我还不太清楚,近日因为项目需要,开始试用TI-RTOS,先来一个点灯的实验吧,算是 hello world. 这次手上的板子是 ...
- AMD规范学习笔记
背景 NodeJS的一套比较简洁 Moudles 规范, 使得在服务器端的模块化变得更加简单.很长一段时间,很多公司或者项目都有自己的一套模块化机制, 却未能形成一套统一的标准, NodeJS的Mou ...
- 通过Xshell如何从Linux服务器下载文件(亲测可行)
到网上下载lrzsz安装包,这里以lrzsz-0.12.20.tar.gz为例 2 打开终端 cd 到安装包所在目录 tar zxvf lrzsz-0.12.20.tar.gz 解压安装包 3 进入解 ...