失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > ROS操作系统基本命令汇总

ROS操作系统基本命令汇总

时间:2020-05-31 10:26:18

相关推荐

ROS操作系统基本命令汇总

【1】在使用ROS发布或者订阅消息之前,必须要使用命令roscore将这个ROS内核启动才行;【2】当编写好相关文件之后,一定要返回到ROS工程目录下,进行编译,具体操作是:

$ cd ~/catkin_ws$ catkin_make$ source ~/catkin_ws/devel/setup.bash

【3】当使用roscd 语句提示:无法找到相应的ros包的时候,采用

echo "export ROS_PACKAGE_PATH"=~/ <文件名> /:"$ROS_PACKAGE_PATH " >> ~/.bashrc

问题就可以得到解决【4】一般而言,一个ROS工作空间包括:

-(1)src 文件夹: 一般包括ROS包(launch文件+msg文件+src文件+srv文件+头文件)+CMakeLists.txt文件+package.xml文件

-(2)build 文件夹:用来存放编译过程的文件

-(3)devel 文件夹:用来存放目标文件(如setup.bash)

ROS文件空间的基本组成

ROS包的基本组成

【5】node是ROS操作系统中的最小单位,当我们需要打开多个node节点的时候会,我们必须采用master来进行管理。

roscore //表示启动ros的master节点

【6】rosrun语句的基本命令格式为:

$ rosrun pkg_name node_name //表示的是运行某个包中的节点

【7】下图详细展示了如何查看rosnode的相关信息:

【8】launch文件:通常我们需要开启很多个节点(Node)才能实现机器人某个功能(如摄像头采集信息,处理信息,对这些信息做出相应判断等),这时我们就直接使用roslaunch命令来实现这个过程:

$ roslaunch pkg_name file_name.launch

该文件的编写规则遵循:xml文件的编写格式。

【9】在ROS系统中,通信方式是其核心概念,主要包括四种方式:topic主题,service服务,parameter service参数服务器,actionlib动作库

(1)详细介绍topic类型的通信方式:是一种单向、异步,实时的、多对多的通信方式,一般有一个publisher和多个subscriber。

(2)常见的topic操作指令包括:

(3)详细介绍Message的通信结构:

类似于结构体类型的变量

基本的操作命令包括:

【10】Service的通信模式:

是一种双向的通信模式,而且是同步进行的。当Node A 发布请求之后,会在与原地等待reply,直到Node B处理完 请求并且完成了reply之后,Node A 才会继续执行相关操作。

其基本的操作指令包括:

注意,由于service具有反馈的过程,因此在进行文件(srv)定义的时候,需要区别对待,一般的格式为:

其基本的指令包括:

最后,当我们完成了msg或者srv等相关信息的模式定义之后,我们都需要对CMakelist.txt的编译文件和package.xml文件进行修改,使得其依赖或者包文件能够编译通过,生成对应的头文件。

【11】整个ROS包文件的分层结构图如下所示:

【12】roscpp文件位于ros包文件目录下的src文件夹中,一般包括以下几个部分:

【13】topic在roscpp中的应用:基本的步骤如下:

-(1)创建一个msg,并且要规定msg的内容;

-(2)注意在程序编译的时候需要“message_generation”,在程序运行的时候,需要“message_runtime”,因此我们需要打开package.xml,在文件中加入:

然后我们再打开CMakelists.txt然后再加入:

如果想要直接返回ros的基本工作空间,可以直接使用如下语句:

$ cd ../..

-(3)创建一个publisher文件:(注意是在src文件夹下)

#include “ros/ros.h” //必须引入这个头文件#include "std_msgs/String.h" //采用标准的信息库包#include <sstream> //标准的信息输出流int main(int argc, char **argv){ros::init(argc,argv,"talker"); //初始化,并且创建一个节点名字ros::Nodehandle n; //创建一个句柄ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter",1000);//创建一个publisher,并且往chatter这个topic上发送消息ros::Rate loop_rate(10); //定义发布的频率int count = 0;while(ros::ok()) //如果ros还没有关闭{std_msgs::String msg;std::stringstream ss;ss<<"hello world"<<count; //把count数值和hello world分别给ssmsg.data=ss.str();ROS_INFO("%s",msg.data.c_str()); //在窗口上打印出来chatter_pub.publisher(msg); //发布这个消息ros::spinOnce(); //如果需要回调函数,则必须使用这个spinOnce()函数loop_rate.sleep(); //表示10Hz频率发布,而不是一直发布++count;}return 0;}

-(4)创建一个subscriber函数:(注意是是在src文件夹下)

#include "ros/ros.h"#include "std_msgs/String.h"void chatterCallback(const std_msgs::String::ConstPtr& msg){ROS_INFO("I heard: [%s]", msg->data.c_str());}int main(int argc, char **argv){ros::init(argc,argv,"listener");ros::NodeHandle n;ros::Subscriber sub = n.subscribe("chatter",1000,chatterCallback) ;ros::spin(); //表示进入循环,一直在chatter的topic上订阅消息return 0;}

-(5)修改编译文件:CMakeLists.txt

最后要编译整个工作空间:

# In your catkin workspace$ cd ~/catkin_ws$ catkin_make$ source ~/catkin_ws/devel/setup.bash //更新

如果觉得《ROS操作系统基本命令汇总》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。