连接 ROS 和 arduino

Log*_*gan 5 arduino ros

背景故事

\n\n

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

\n\n

我的愿景

\n\n

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

\n\n

我的问题

\n\n

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

\n\n

我应该听什么主题?我以正确的方式处理这件事吗?有没有更适合我的需求的套餐?请记住,我是 ros 新手,所以教程将不胜感激。

\n\n

我期待您的回复

\n\n

谢谢,洛根

\n

mik*_*ola 3

听起来不错的项目!我赞同查看教程的建议,但我认为在深入 Arduino + ROS 的世界之前,您应该花更多时间学习基本ROS 教程。

例如,我注意到你可能有一个误解。您的节点监听哪个主题并不重要,因为它只是一个可以通过启动节点时给定的参数轻松重新映射的名称。重要的是确保您正在侦听正确类型的消息 - 它们指定所有不同节点进行通信的接口。有很多选项,如果没有一个适合您的用例,您可以定义自己的选项。

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

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