连接 ROS 和 arduino

interfacing ROS and arduino

背景故事

前几天我发现有人扔掉的电动轮椅。作为一名花费大量时间查看其他人在网上制作的作品的创客,我决定抢走它并尝试用它制作一个机器人。我还买了一个 Arduino mega、一个 Kinect 传感器和一个电机控制器来尝试控制电机并赋予它某种形式的视觉。

我的愿景

老实说,我不打算让这个机器人成为一个有趣且具有挑战性的项目。我目前的目标是让它 运行 SLAM 算法找出它在地图上的位置并导航到地图上的预定点。然而在这一点上,我会很高兴能够用键盘进行简单的遥控操作。

我的问题

过去一周我一直在研究 ros 以及如何让它与我的 Arduino 对话。我已经安装了 diff_drive_controller, Turtlebot, ros_control, ros_serial, ros_arduino_bridge,还有其他几个人试图找到可以告诉电机做什么的东西。到现在为止,我觉得我对 ros 的工作原理有了一个深入的了解。基本上有一系列节点,每个节点发布信息供其他节点查看和订阅他们想要阅读的信息。我现在想要的只是一个节点,它根据尝试导航或远程操作或类似的东西发布有关电机速度的数据。我认为 turtlebot 是我最好的选择,因为它是一个一体式堆栈,可以完成我想要它做的所有事情。唯一的问题是我没有创建 iRobot。但似乎拦截这些命令并让它们驱动我自己的机器人基地应该足够简单。但是我不确定要听哪个主题以及如何以不尝试连接到 iRobot 创建的方式 运行 海龟机器人。我可以只听 /cmd_vel_mux/input/teleop 主题,但我认为这会限制我只能进行远程操作,并且可能会导致将来很难转向自治。

我应该听什么话题?我这样做是对的吗?有没有更适合我需要的软件包?请记住,我是 ros 的新手,所以教程将不胜感激。

期待您的回复

谢谢,洛根

您可以找到如何连接 Arduino 和 ROS 的教程列表here.

听起来不错的项目!我支持看一下教程的建议,但我认为在深入了解 Arduino + ROS 的世界之前,您需要花更多时间学习基础知识 ROS tutorials

例如,我注意到您可能有一个误解。您的节点收听哪个主题并不重要,因为它只是一个名称,可以通过启动节点时给定的参数轻松重新映射。重要的是确保您正在收听正确的 type 消息 - 它们指定所有不同节点通信的接口。有 bunch of options,如果其中 none 适合您的用例,您可以定义自己的。

我怀疑对于低级的东西,比如你的电机驱动程序,你需要编写你自己的 ROS 节点。对于高级功能,例如 SLAM;有多种选择。您可以找到适合您从传感器获得的输入数据的一款。

最后一个建议是利用 ROS 的功能,将大问题分解为可管理的子任务。一次只做一件事——实现一个电机控制器,编写一个远程操作方法;注意在每个点指定合适的接口。这种方法的优点是,如果您在定义具有良好接口的单个​​组件时做出了明智的选择,那么如果您愿意,可以很容易地用另一个组件替换它们。