去年是我第一次开始了解ROS。也是在那个时候,我决定要学习更多关于ROS的知识,并根据它进行尽可能多的项目。在阅读了第一个教程之后,我确信这会很痛苦,直到我’我将建立第一个基于ROS的机器人。我是对的。
ROS的第一步从本教程开始。或者更好的是,一切都始于两个新疆风采,即所谓的基本元素。一个新疆风采用于发布数据,一个新疆风采用于读取和显示接收到的数据。作为自动翻译,我知道学习未详细解释的事情有多么困难。在本教程中,我对资源以及编写和运行两个新疆风采(发布者新疆风采和订阅者新疆风采)所需的步骤进行了很多关注。
注意:我已经用大写字母写了Publisher和Subscriber来突出两个ROS概念。
您在本教程中找到的内容
- 所需资源
- 发布者和订阅者新疆风采的简短描述
- 新疆风采的架构
- 创建工作空间和包含新疆风采的包
- 发行人
- 订户
- 使用自动启动文件运行新疆风采
- 有用的命令
- 统计
- 结论
1.所需资源
要编写两个ROS新疆风采,您需要硬件和软件资源。在下面,我列出了必填资源,最后,我添加了一个可选资源,可用于开发复杂的项目。
- A 树莓派3 板连接到显示器,键盘和鼠标。除这些以外,您还可以使用SSH(安全外壳)选项或图形界面选项。允许从另一台计算机进行Pi控制的应用程序之一是远程桌面连接。 这里 是一个教程,您可以在其中找到用于远程控制Pi的设置。
- Ubuntu MATE 安装在Raspberry Pi 3上。 一个版本的Ubuntu MATE 专为Raspberry Pi设计。
- ROS动力学 已安装在Raspberry Pi 3上。我解释了安装完整版本的必要步骤。 本教程中的ROS Kinetic.
- 您也可以选择安装 适用于Python的IDE。我使用IDLE。
2.发布者和订阅者新疆风采的简短描述
这个想法是模拟传感器(例如,它可以是超声波传感器)与命令机器人方向的程序之间的数据传输。诸如HC-SR04的超声波传感器以数字字符串形式返回信息。用户新疆风采将读取传感器返回的数字字符串,以进行机器人导航的计算和决策。
为了模拟发送和读取数据的简单场景,我’ve创建了两个新疆风采。发布者新疆风采将生成一个随机数,而订阅者新疆风采将显示从发布者新疆风采接收到的随机数。
在下面,我绘制了新疆风采的架构,数据将如何流动,用于将信息从一个新疆风采发送到另一个新疆风采的数据类型以及数据传输的速率。
3.新疆风采的架构
一个新疆风采方案,其中包含两个新疆风采的名称,发送/接收的数据类型以及数据发送速率。
4.创建工作区和包含新疆风采的包
仅当您尚未创建工作空间时,此步骤才有效。如果创建了工作空间,则可以跳过步骤4.1并直接跳至以下命令– section 4.2 –创建包。
4.1创建工作区的命令
mkdir -p〜/您的工作空间名称_此处/ src
cd〜/ your_workspace_name_here / src
catkin_init_workspace
catkin_make
源devel / setup.bash
上面的命令创建了一组目录,这些目录将托管所有ROS新疆风采。
如果应该熟悉前两个命令,则以下两个命令是ROS特定的。这两个命令都旨在为ROS创建元数据。的“catkin_init_workspace”命令创建CmakeLists.txt文件。的“catkin_make”命令生成一系列目录来承载文件,库或可执行程序。
4.2创建ROS包的命令
包含两个新疆风采的ROS程序包必须包含在工作空间目录中。此外,每个程序包将包含两个文件:CmakeLists.txt和package.xml。
用于创建软件包的命令是:
cd〜/您的工作空间名称_此处/ src
catkin_create_pkg your_package_name 红润的
‘catkin_create_pkg’是用于创建新软件包的命令。
‘rospy’ is the dependency of the new package created by the 红润的 package.
5.发行人
下面是Publisher新疆风采的代码。该新疆风采将每2秒生成一个介于0和5000之间的随机数。该文件必须是可执行的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #!/ usr / bin / env python 进口 红润的 从 std_msgs.味精 进口 Int32 从 随机 进口 兰丁 //定义random_number发布者 定义 随机_number_publisher(): 红润的.init_node('random_number') 酒馆=红润的.发行人('rand_no', Int32, queue_size=10) 率= 红润的.率(2) //每2秒产生一个随机数 而 不 红润的.is_shutdown(): 随机_msg=兰丁(0,5000) 红润的.日志信息(随机_msg) 酒馆.发布(随机_msg) 率.睡觉() 如果 __名称__== '__主要__': 尝试: 随机_number_publisher() 除 红润的.ROSInterruptException: 通过 |
要制作可执行文件,请运行以下命令:
chmod u + x the_file.py
6.订户
订户新疆风采将显示订户新疆风采发送的所有随机数。显示速率与发布者新疆风采的传输速率相同。该文件也必须是可执行的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/ usr / bin / env python 进口 红润的 从 std_msgs.味精 进口 Int32 //定义显示文字 定义 打回来(数据): 红润的.日志信息(“我收到%s”, 数据.数据) //定义订户 定义 随机_subscriber(): 红润的.init_node(“ 随机_subscriber”) 红润的.订户('rand_no',Int32, 打回来) 红润的.旋转() 如果 __名称__== '__主要__': 随机_subscriber() |
7.使用自动启动文件运行新疆风采
要运行这两个文件,必须在不同的终端上运行三个shell命令。第一终端属于 罗斯科尔 命令。第二个命令属于发布者新疆风采,第三个命令是订阅者命令。为了不打开终端并手动一个接一个地运行控件,ROS为我们提供了一种自动运行所有这些命令的工具。它’s about 罗斯劳奇.
要自动启动所有文件,我们需要一个带有扩展名的文件‘.launch’。我们的文件包含下图中的行,并将被保存在Publisher和Subscriber包中。该文件必须是可执行文件,就像其他发布者和订阅者文件一样。
该文件的内容带有‘.launch’ extension
运行roslaunch文件
8.有用的命令
- rostopic信息rand_no–显示有关主题的信息,在我的情况下,主题名称为rand_no
- rostopic hz rand_no–显示发贴率
- rostopic类型rand_no–显示主题类型
- rqt_graph–显示一个包含新疆风采及其之间链接的窗口
9.统计
树莓派3板的内存和处理资源有限。这就是为什么必须随时知道ROS新疆风采消耗的资源的原因。下面,我在运行两个新疆风采时监视了Raspberry Pi的负载。根据打开的应用程序,以下数据可能会有所不同。仅在运行两个ROS新疆风采时完成以下捕获。
树莓派3统计信息
10.结论
本教程适用于初学者,适合那些想学习使用ROS的人。上面提到的两个新疆风采是一种“Hello World”在编程中。如果您完成了本教程并将其付诸实践,那么您只是迈出了ROS的第一步。它’是高级机器人技术的第一步。
本教程中有很多缺少的信息。如果您已经了解使用ROS的方法,那么效果很好。但是,如果您只是开始,那么遵循这些步骤并实际进行编译将非常困难。
我的发布者应该位于哪个目录?
我的订户应该位于哪个目录?
我的启动文件应该在哪个目录中?
发布者和订阅者是否需要位于不同的新疆风采中?
您在哪里运行启动命令?
我不’对ROS的了解不足以做出这些假设。