机器人操作系统教程总结

Ros教程总结:
参考网址:http://training.eeworld.com.cn/video/14321(视频网址)

最简单的一个package(如下图所示)
机器人操作系统教程总结_第1张图片
其中,CMakeLists.txt文件
规定了catkin编译的规则,例如:源文件,依赖项,目标文件。
常用的CMakeLists.txt文件的语法:机器人操作系统教程总结_第2张图片
一般使用catkin_create_pkg指令之后,通过自己的需要在对应的函数后边添加必要的文件.比如,自己写了一个msg,那么必须将该msg文件名写到add_message_file()中,写了srv,则把srv文件名写到add_service_files()中.
至于其他的比如节点,发布者,订阅者,服务跟客户,则每个都需要在末尾添加以下3个句子.
第一个句子是对该文件进行编译,第一个参数是编译生成的文件名,第二个参数是编译的文件的地址。
第二个句子,为生成文件指定了该文件需要链接的库,如果用到opencv或者qt的库,需要另行添加,库的链接.如果编译需要添加形如-lmenuw -lncursesw,则需要在末尾加上。(如下图第二个所示)
第三个句子,为生成文件指定依赖关系.
三个句子的示例如下所示
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES} -lmenuw -lncursesw)
add_dependencies(talker beginner_tutorials_generate_messages_cpp)

而,Package.xml文件
定义了package的属性,例如:包名,版本号,作者,依赖等等。
常用的package.xml文件的语法:
机器人操作系统教程总结_第3张图片
这个package可以根据ros提供的文件自行更改,一般只需要更改的包.其他的维护者什么的,可以根据其他的package自己模仿,较为简单。
典型的package结构:(较为复杂,每个package应按照规矩来做.)
机器人操作系统教程总结_第4张图片
常用的部分ros指令及其功能:
机器人操作系统教程总结_第5张图片
其中,详细讲解一下catkin_create_pkg.(可用于创建自己的node)
加入你要创建一个叫做hello的node。
进入你的工作空间,例如:catkin_ws这个工作空间。
如果你还没有这个空间,就自己创建一个吧。
指令:

$ cd ~
$ mkdir catkin_ws
$ catkin_make

(这样子,你自己的工作空间就创建好啦,其中第二条指令的文件名可以自己更改)
创建完工作空间后,记得将自己工作空间的setup.bash写入环境变量:
指令:(< yourname>是你自己本机的~的名称)

$ echo “source/home//catkin_ws/devel/setup.bash” >> ~/.bashrc

接下来,继续讲解创建属于自己的node。
指令:(依赖性随需要而定,以下的三个依赖项只是示范,其中,roscpp是c++文件的依赖项,rospy是python文件的依赖项,std_msgs是通信的依赖项)

$ catkin_create_pkg hello roscpp std_msgs rospy 

这个时候,catkin_ws/src中就会出现一个最简单的package啦,里面一开始只有package.xml,CMakeLists.txt文件和一个src的空文件夹(src文件夹用来存放你自己想变成node的代码)。

一般我们使用roscore打开ros的核心,要运行ros的node之前必须启动roscore

ros的node的运行指令:
rosrun
例如你先要要启动hello这个package里面的hello_node这个node
则,你需要使用指令:<每个指令对应一个终端,不可关闭,除非不用了。>

$roscore
$ rosrun hello hello_node

rosnode指令:<常用指令>
机器人操作系统教程总结_第6张图片
rosnode info 显示的信息大致如下:
机器人操作系统教程总结_第7张图片
有时候,可以在其中查找自己想要的topic的信息,然后借助rostopic info 来显示出对应的topic,然后找到该topic对应的发布节点以及msg文件,自行编写一个相同的msg文件以及一个侦查者来接受该node发布在topic上的信息。

roslaunch指令:
roslaunch
例如:
roslaunch usb_cam usb_cam.launch

对于launch文件的语法,如下:
机器人操作系统教程总结_第8张图片
额外参考网址:https://blog.csdn.net/qq_35460250/article/details/54744473
1根元素中间内容

2.launch文件中的内容主要是需要启动的各个节点。


name=”” //给节点指派了名称,它将覆盖任何通过调用ros::int来赋予节点的名称
pkg=”” //包名
type=”” //可执行文件名(节点名)
例如:


3.< node> 的内容除了2中必须要之外还有其他一些

required=“true”//必须,即该节点关闭所有都关闭

respawn=”true”//节点关闭会重启

launch-prefix=””//前缀,实现特定功能,如另起终端 “xterm -e“

output=”screen”//在控制台输出信息

ns=”namespace”//。对一个节点设置默认命名空间 ,通常叫做压入(pushing down)命名空间

2)launch

运行 roslaunch pkg_ name launch_name

请求详细信息 roslaunch –vpackage-name launch-file-name

控制台显示所有节点输出roslaunch –screen package-name launch-file-name

3)名称重映射

作用:更改节点名称 可更改节点订阅的话题 其他用处?

name=”turtlesim_node”>

< /node>

4)launch文件包含其他启动文件,即想在启动文件中包含其他启动文件的内容

可< include file=”$(findpackage-name)/launch-file-name”>

包含元素同样支持命名空间属性,可以将内容压入一个指定的命名空间中去:

应该说该设置是十分普遍的,尤其是当被包含进来的启动文件属于另一个功能包的时候,设置的操作应当独立于其他节点
例子:


这里,系统将默认使用rospack find roslaunch找到文件的路径,然后进入其resources/目录,然后叠加她的example-include.launch文件。

5)启动参数arg

A.通过设置参数来描述节点在不同ROS会话中运行时可能需要改变的一小部分

声明参数 并赋值

//默认

//value

参数赋值亦可通过roslaunchpackage-name launch-file-name arg-name:=arg-value 来实现,会覆盖默认值,对于value值无法更改,并报错

B.获取参数值 一旦参数值被声明并且被赋值,可以使用该参数值了

$(arg arg-name)

C.arg参数相当于局部变量,不能被被包含的启动文件继承。可以将arg元素放到include中

< /include>

在include标签之间的参数是属于被包含文件的,而不是它们出现的启动文件。因为目的是为被包括的启动文件设置响应的参数值,所以该处需要使用value属性。

一种常见的情况是两个启动文件(包含文件和被包含文件)有一些共同的参数,在这种情况下,希望参数在传递的时候不会改变。这样的元素在两个地方使用相同的参数名:

在该例子中,第一个参数名字通常是指被包含文件中的参数,第二个参数名是指当前文件中的参数。这样做之后,给定参数在两个启动文件中有相同的值。

6)group

作用

group可以把若干个节点放入同一个命名空间内。

< /group>

组内的每个节点都从给定的默认命名空间启动。

group可以有条件地使能或禁用一个节点。

< /group>

核心部分:
ros的topic与msg:(用于node与node之间的异步通信)
Node之间通过publish和subscribe机制通信()
在这里插入图片描述

Node之间发布topic跟订阅topic并没有影响的关系。
简而言之,一个只管发,一个只管订阅,并不在乎订阅的是谁发布的topic,只要msg类型相同即可。
基本msg中内容类型可包括:
机器人操作系统教程总结_第9张图片
rostopic和rosmsg常用指令:
机器人操作系统教程总结_第10张图片

Service与srv:
不用于ros的发布和订阅,这个属于ros中的同步订阅
Node之间通过request和reply方式通信。
机器人操作系统教程总结_第11张图片

Topic和service的区别对比:
机器人操作系统教程总结_第12张图片
.srv文件是service通信的数据格式,定义在srv文件夹中。
Srv的文件格式形如:
int a
int b

int sum
中间必须有三个-将request(请求)还有reply(回应)隔开
Note:srv和msg文件都可以嵌套msg文件,但是不可以嵌套stv文件,例如:
机器人操作系统教程总结_第13张图片
如果有msg和srv文件<针对以上的两个msg和一个srv文件>
必须在package文件添加:
在这里插入图片描述
在CMakeLists.txt文件添加:
机器人操作系统教程总结_第14张图片
rosservice和rossrv指令的常见用法:
机器人操作系统教程总结_第15张图片
Rosparam指令的用法:
机器人操作系统教程总结_第16张图片

ros::NodeHandle Class:
类方法:ros::Publisher advertise(const string &topic,uint32_t queue_size);
第一个参数是topic的名称,第二个参数是往topic发布的程度,结果返回一个publisher
发布的基本写法:
ros::NodeHandle nh;
ros::Publisher pub = nh.advertise(…);
Pub.publish(msg);

类方法:ros::Subscriber subscriber(const string &topic,unit32_t queue_size,void(*)(M));
前两个同上,第三个其实是一个函数指针,指向回调函数。
基本写法:
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscriber(…);
sub.subscribe(msg);
其他类方法:/参考链接:http://docs.ros.org/api/roscpp/html/
机器人操作系统教程总结_第17张图片

你可能感兴趣的:(机器人操作系统教程总结)