arduino - 连接 ROS 和 arduino

标签 arduino ros

背景故事

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

我的愿景

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

我的问题

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

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

期待您的回复

谢谢,洛根

最佳答案

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

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

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

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

关于arduino - 连接 ROS 和 arduino,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34302162/

相关文章:

python - 使用 Carla 创建超车(硬编码)场景

python - ROS2: ImportError: 没有名为 genmsg 的模块

java - 如何使 java 应用程序与 ESP32 板通信?

c - 访问二维指针数组

java - 处理 IDE 无法直接从串行读取数据

python - 如何安装 'glob'模块?

c++ - 如何在ros2中从rosbag2读取数据

Android ADK 开发实践——什么是最佳实践?

c++ - 如何重复打印相同的值?

ip - 通过局域网 (LAN) 与 WSL2 上的 ROS 通信时出现问题