ros学习笔记

上官栋 上官栋     2022-10-14     347

关键词:

创建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进二阶学习笔记--metapackage

ROS进阶学习笔记(24)--MetapackageMetapackage是ROSFileSystem概念层中的一个概念:2.CreateandConfigureaMetapackage:url:http://wiki.ros.org/catkin/package.xml#MetapackagesUsuallytheparentfolder,namedli 查看详情

ros学习笔记三(理解ros节点)

要求已经在Linux系统中安装一个学习用的ros软件包例子:sudoapt-getinstallros-indigo-ros-tutorialsROS图形概念概述nodes:节点,一个节点即为一个可执行文件,可以通过ROS和其他节点进行通信;messages:消息,当订阅或者发布一个topic时使... 查看详情

ros学习笔记——debug

NEW1$roscoreNEW2$rosrunrqt_consolerqt_console  $rosrunrqt_logger_levelrqt_logger_levelNEW3$rosrunturtlesimturtlesim_node 查看详情

ros学习笔记(十六)——初级教程学习结束

ROS系统查错的功能:NEW1$roscd$roswtf  #看起来很简单,但是具体怎么用?没搞懂.这部分的内容太少了...来个有用的指令roslocateuri<package_name> 查看详情

ros学习笔记——软件版本的选择

下面是Google的SLAM系统Cartographer对系统的要求:Cartographer对ROS版本要求: ROSIndigo对Ubantu的版本要求: 所以,综上所述:Ubantu版本:Trusty(14.04)ROS版本:ROSIndigoIgloo  PS:ROS网站:http://wiki.ros.org/   Cartog 查看详情

ros学习笔记

创建ros工作环境:mkdir-p~/catkin_ws/src//建立项目目录,同时生成src文件夹cd~/catkin_ws///进入项目目录catkin_make//编译项目,即使什么文件也没有也可以编译sourcedevel/setup.bash//执行编译生成的脚本文件,这会使当前项目目录加入环境变... 查看详情

ros进二阶学习笔记--metapackage

ROS进阶学习笔记(24)--MetapackageMetapackage是ROSFileSystem概念层中的一个概念:2.CreateandConfigureaMetapackage:url:http://wiki.ros.org/catkin/package.xml#MetapackagesUsuallytheparentfolder,namedlikethemetapackageorjustthereponame,containsnopackage.xmlbutallpackage... 查看详情

ros进二阶学习笔记-programmaticwaytostart/stoparoslaunch(代码片段)

ROS进二阶学习笔记(3)-programmaticwaytostart/stoparoslaunchSometimes,weneedtostart/stoparos.launchfile/rosnodeinaprogrammaticway,especiallywhenwebringintheSMACHmethodtohandleourapplications.Here 查看详情

ros学习笔记——rostopic

NEW1$roscoreNEW2$rosrunturtlesimturtlesim_nodeNEW3$rosrunturtlesimturtle_teleop_key NEW4$sudoapt-getinstallros-indigo-rqt  #安装rqt,这个貌似是一个节点管理器$sudosudoapt-getinstallros-indigo-rqt-common-plugins$ 查看详情

《ros理论与实践》学习笔记机器人语音交互(代码片段)

《ROS理论与实践》学习笔记(七)机器人语音交互课程内容1.讯飞开放平台使用2.ROS语音识别与语音输出3.语音交互本讲作业结语在学习《ROS理论与实践》课程时,记录了学习过程中的编程练习,课后作业以及发现... 查看详情

ros学习笔记之——remark

此博文用于本人备忘一些资料~Real-TimePanoramicTrackingforEventCamerashttps://github.com/VLOGroup/dvs-panotrackinghttps://github.com/VLOGroup/dvs-reconstructionCeresSolver一文助你Ceres入门——CeresSolver新手向全攻略_福尔摩睿的工作站-CSDN 查看详情

ros学习笔记(十七)——进一步的教程选择1

...台可以选择,都是别人做好的,拿来玩一下可以,但是不是和学习.http://wiki.ros.org/APIs在这里面有包含了ROS的绝大部分核心模块,但是没有目的性的逐个扫描太慢了,也可能学到很多用不到的东西.http://www.ros.org/browse/list.php?packag 查看详情

《ros理论与实践》学习笔记机器视觉处理(代码片段)

《ROS理论与实践》学习笔记(六)机器视觉处理课程内容1.ROS摄像头驱动及数据接口2.摄像头参数标定3.ROS+OpenCV图像处理方法及案例4.ROS+Tensorflow物体识别方法及案例本讲作业1.通过人脸识别方式,发布速度控制指... 查看详情

ros实验笔记之——px4仿真

 之前博文《ROS学习笔记之——PX4开发初入门》《ROS学习笔记之——PX4生态系统》已经对PX4做了一些基本的学习,并且在mac上搭建了px4开发环境。本博文在ubuntu下对PX4进行一些基本的仿真学习~之前在做无人机仿真开发时... 查看详情

ros从入门到放弃(学习笔记1)

...器人,机缘巧合接触到了ROS,在这里分享一下我学习ROS的经历。首先就是安装ROS,安装ROS网上有很多资料可以查到,但是我在安装的时候初始化一直出问题,基本网上什么方法都尝试了,总是在最后一步失... 查看详情

ros进二阶学习笔记--rosbag

ROSBag是ROS计算图级的一个概念:Bags:ref:http://wiki.ros.org/Bags在计算图里在线使用  工具:rosbag  创建bags,收听topic,记录数据。可以回放或者remap到别的topic。  rosbag还能处理具有时间戳的数据,publish一个simula... 查看详情

ros学习笔记11——ros中catkin_makeinstall的用法

catkin_makeinstall的作用是:创建一个可以运行,但不含源码的工程包,以便于给客户等其他人使用,但同时不至于泄露源码的这么一个作用。下面是我写的,并验证通过的###############Install###############install(TARGETSlcm_ros_nodeARCHIVEDESTINA... 查看详情

ros入门(六)actionlib学习笔记

在读move_base的代码的时候,遇到了actionlib,于是记录下学习笔记。首先说,actionlib是一个完善service的功能包,当一个功能需要执行一段时间,但是你需要实时察看执行的状态和阶段的时候,service就无法满足了。于是出现了actionl... 查看详情