【基于ROS Melodic环境安装rosserial arduino】

news2024/11/18 1:47:57

【基于ROS Melodic环境安装rosserial arduino】

  • 1. 简介
  • 2. 安装
    • 2.1 Ubuntu下的Arduino IDE安装
    • 2.2 Ubuntu下rosserial arduino软件安装
    • 2.3 安装ros_lib到Arduino IDE开发环境
  • 3. 将ros_lib配置到 Arduino 环境库中
  • 4. 使用helloword
  • 5. 实验验证
  • 6.总结

1. 简介

  • 这个教程展示如何安装arduino IDE和使用rosserial
  • Arduino和Arduino IDE是进行硬件开发的非常好的辅助工具
  • rosserial_arduino包可让ROS和ArduinoIDE一起工作
  • rosserial提供的ROS通讯协议工作在Arduino的UART上,它让Arduino成为标准的ROS节-点,可以发布和订阅ROS消息,发布TF转换,获取ROS系统时间
  • 通过arduino ide将编写好的程序上传到arduino,ROS通过串口运行该arduino结点

在这里插入图片描述

ROS环境配置参考:【1. ubuntu18.04安装ROS Melodic】

2. 安装

Arduino 和 Arduino IDE 是快速轻松地对硬件进行编程的绝佳工具。使用rosserial_arduino包,您可以直接将ROS与Arduino IDE一起使用。rosserial提供了一个ROS通信协议,可以在Arduino的UART上运行。它允许你的Arduino成为一个成熟的ROS节点,可以直接发布和订阅ROS消息,发布TF转换,并获取ROS系统时间。

注意:如果您尚未安装 Arduino IDE,请从 Arduino 网站下载。最好将应用程序安装到应用程序 PATH、桌面或主文件夹上的文件夹中。安装后,启动应用程序以选择您的素描本位置。(参见arduino官方网站,sketchbook是存储程序或草图的标准位置)。完成后关闭 IDE。

我们的 ROS 绑定作为 Arduino 库实现。与所有Arduino库一样,ros_lib将其库实现放入素描本的库文件夹中。如果您的素描簿中还没有库文件夹,请创建一个。然后,您可以使用以下说明安装库。

为了在您自己的代码中使用 rosserial 库,您必须首先将

#include <ros.h>

在包含任何其他头文件之前,例如

#include <std_msgs/String.h>

否则,Arduino IDE将无法找到它们。

2.1 Ubuntu下的Arduino IDE安装

去官网下载最新arduino(1.8.19),Ubuntu18.04不支持安装2.0
https://www.arduino.cc/en/software

在这里插入图片描述

然后解压安装

cd arduino-1.8.19/
ll
sudo ./install.sh

在这里插入图片描述

解决方法是:插上你的arduino到电脑的USB上,在命令行里运行:

dmesg | tail# 初始化设备
ls -l  /dev/ttyUSB0#这个0就是上面检测到的
sudo usermod -a -G dialout name#这里的name是自己电脑用户的名字
 ls -ld /run/lock#锁定设备
sudo  chmod +rwx /run/lock# 添加🔓权限
sudo chmod 777 /dev/ttyUSB0# 添加端口权限

2.在ubuntu下,预置安装了一个叫brltty的程序与Arduino有冲突,卸载即可。这个东西是为盲人设计的,所以大可放心卸载,没有什么问题。卸载完重启电脑。

sudo apt-get remove brltty

打开Arduino

arduino

测试blink

/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  https://www.arduino.cc/en/Tutorial/BuiltInExamples/Blink
*/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

在这里插入图片描述在工具中绑定端口和开发板,点击上传妙传
开发板就会闪烁

2.2 Ubuntu下rosserial arduino软件安装

您可以通过运行以下命令为 Arduino 安装 rosserial :

sudo apt-get install ros-melodic-rosserial-arduino
sudo apt-get install ros-melodic-rosserial

在这里插入图片描述

2.3 安装ros_lib到Arduino IDE开发环境

上面的安装会得到ros_lib,它需要复制到Arduino的开发环境,以启用Arduino与ROS通讯。Rosserial自时髦版本以来就被猫化了,工作流程与Fuerte和早期版本略有不同。与其在要使用的每个包上运行库生成器,不如运行一次并为所有已安装的消息生成库。在下面的说明中,<arduino_ws> 表示您的 catkin 工作区。

conda deactivate
mkdir -p arduino_ws/src
cd ~/arduino_ws/src/
git clone https://github.com/ros-drivers/rosserial.git
cd arduino_ws
catkin_make
catkin_make install

在这里插入图片描述

这些命令从 github 存储库克隆 rosserial,生成通信所需的rosserial_msgs,并在 /devel/lib 目录中创建库文件。

注意:目前您必须运行catkin_make安装,否则ros_lib目录的某些部分将丢失。希望这将很快得到解决。

3. 将ros_lib配置到 Arduino 环境库中

前面的安装步骤创建了必要的库,现在下面的步骤将创建Arduino构建环境所需的ros_lib文件夹,以使Arduino程序能够与ROS交互。

在以下步骤中,是Linux Arduino环境保存草图的目录。通常,这是主目录中称为素描簿或Arduino的目录。例如 cd ~/Arduino/libraries

conda deactivate
cd Arduino/libraries
rm -rf ros_lib
rosrun rosserial_arduino make_libraries.py .

在这里插入图片描述

注意:目前您可以直接在Arduino IDE中安装Arduino libaries。只需从 Sketch -> 包含库 -> 管理库“中的 IDE 菜单中打开库管理器。然后搜索“rosserial”。如果您需要处理Arduino草图,但又不想设置完整的ROS工作站,这将非常有用。而其需要在python2.7环境

4. 使用helloword

打开example>ros_lib>helloworld,创建一个helloword的话题
helloworld.ino

/*
 * rosserial Publisher Example
 * Prints "hello world!"
 */

#include <ros.h>
#include <std_msgs/String.h>

ros::NodeHandle  nh;

std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);

char hello[13] = "hello world!";

void setup()
{
  nh.initNode();
  nh.advertise(chatter);
}

void loop()
{
  str_msg.data = hello;
  chatter.publish( &str_msg );
  nh.spinOnce();
  delay(1000);
}

在这里插入图片描述使用arduino ide上传到arduino
在这里插入图片描述

5. 实验验证

运行roscore:

roscore

运行结点

开新终端运行结点(这里我的arduino串口为/dev/ttyUSB0):

conda deactivate
rosrun rosserial_python serial_node.py /dev/ttyUSB0

再开新终端,查看该话题消息:

rostopic echo /chatter

在这里插入图片描述

创建成功
消息通讯机制

rqt_graph

在这里插入图片描述

6.总结

首先配置了arduino匹配的ROS环境,通过arduino 将编写好的程序上传到Uno,ROS通过串口运行该arduino结点,打印hello word.非常感谢你的阅读,如果有任何问题请在下面流言!!!

本文学习了Arduino与ros通讯,我会作树莓派小车,后期会分享更多有趣的操作从而实现对外部世界进行感知,充分认识这个有机与无机的环境,科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。✨✨✨

参考文献:

  • rosserial arduino的安装及使用
  • Arduino IDE Setup
  • Ubuntu下Arduino中Serial port不能识别的问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/570227.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统初始化命令的备忘单,Linux运维工程师收藏!

在管理和维护Linux系统时&#xff0c;有一些常用的命令可以帮助您进行系统初始化和配置。这些命令涵盖了各种任务&#xff0c;包括系统设置、用户管理、软件安装和网络配置等。 本文将为您提供一个Linux系统初始化命令的备忘单&#xff0c;以便在需要时方便查阅和使用。 系统设…

chatgpt赋能python:Python动画制作指南:从入门到精通

Python动画制作指南&#xff1a;从入门到精通 Python作为一种易学易用的编程语言&#xff0c;在数据分析、机器学习等领域已经得到广泛应用。但是你知道吗&#xff1f;Python还可以用来制作动画&#xff01;本文将为你介绍如何用Python制作动画&#xff0c;从入门到精通&#…

chatgpt赋能python:Python写计算器:从入门到精通

Python写计算器&#xff1a;从入门到精通 简介 计算器无疑是计算机编程中最基本且实用的工具之一。Python 作为一门易于学习且功能强大的编程语言&#xff0c;能够轻松实现计算器的功能。在本文中&#xff0c;我们将介绍如何使用 Python 编写一个简单的计算器。 如何实现&am…

chatgpt赋能python:Python的封装:提高代码的可维护性和可复用性

Python的封装&#xff1a;提高代码的可维护性和可复用性 在软件开发领域中&#xff0c;封装是一种重要的概念。它被用于隐藏程序的实现细节&#xff0c;使得程序的功能变得更加易于使用和维护。在Python编程中&#xff0c;封装是一种被广泛使用的技术&#xff0c;可以帮助你提…

Linux 信号知识点总结

对于 Linux来说&#xff0c;实际信号是软中断&#xff0c;许多重要的程序都需要处理信号。信号&#xff0c;为 Linux提供了一种处理异步事件的方法。比如&#xff0c;终端用户输入了 ctrlc 来中断程序&#xff0c;会通过信号机制停止一个程序。信号概述 1.信号的名字和编号: 每…

JavaSE_day38(异常分类,自定义异常,File介绍,方法使用,相对路径与绝对路径概念以及注意的点)

1 A.java * 异常的分类&#xff1a; 运行时期异常:RuntimeException的子类就是运行时期异常&#xff0c;在编译时期可以自由选择处理或者不处理 编译时期异常:是Exception的子类&#xff0c;非RuntimeExcpetion的子类&#xff0c;在编译时期必须处理 public c…

注意力机制(一)SE模块(Squeeze-and-Excitation Networks)

Squeeze-and-Excitation Networks&#xff08;压缩和激励网络&#xff09; 论文地址&#xff1a;Squeeze-and-Excitation Networks 论文中文版&#xff1a;Squeeze-and-Excitation Networks_中文版 代码地址&#xff1a;GitHub - hujie-frank/SENet: Squeeze-and-Excitation Ne…

chatgpt赋能python:Python内置:优化SEO的利器?

Python 内置&#xff1a;优化SEO的利器&#xff1f; Python是一种广泛使用的高级编程语言&#xff0c;拥有丰富的标准库和第三方库&#xff0c;能够适用于很多领域。其中&#xff0c;Python内置的一些功能&#xff0c;比如字符串操作和网络请求&#xff0c;可以帮助我们进行SE…

web前端综合案例——小兔鲜首页(html+css)

前言&#xff1a;我这里只使用了html和css&#xff0c;js没有使用 项目源代码&#xff1a;https://pan.baidu.com/s/1alnekYEu5F9XwHTW7dO5RA?pwdqjhd 页面效果&#xff1a; 项目准备阶段&#xff1a; 1.准备项目相应的图片素材&#xff0c;设计稿。 2.创建项目: 2.1 项目…

用反射设计通用的实例化对象方案

需求 对象的相关信息存储在javabean.properties文件中&#xff0c;通过读取properties文件中的信息&#xff0c;实例化对象&#xff0c;要求程序不能硬编码&#xff0c;即程序可以通用&#xff0c;针对不同的对象&#xff0c;都可以实例化。仅需修改配置文件&#xff0c;不需要…

网络基础初识

目录 网络发展 时代背景 计算机内部 协议 协议的创立 什么是协议&#xff1f; 网络协议 OSI七层模型 TCP/IP五层(或四层)模型 硬件方面 -- 补充 路由器 协议的分层 网络传输基本流程 1.协议报头 2.局域网 查询自己的MAC地址 局域网通信的原理 跨路由器传递数…

以太网协议详解

文章目录 前言一、MAC地址二、以太网协议1. 以太网数据格式2. MAC地址表 前言 假设有这样一张网络拓扑图&#xff1a; 在拓扑图中有A、B、C三台计算机&#xff0c;并且它们三个是通过中间的路由器连接的。这时候计算机A要向计算机C发送一条数据&#xff0c;那么数据是怎么样到…

nvm教程

介绍 这个东西&#xff0c;是nodejs官网有个链接里面有很多列表&#xff0c;这是其中一个 下载 https://github.com/coreybutler/nvm-windows/releases 安装 安装前&#xff0c;将.npmrc文件删除&#xff1b;文件位置&#xff1a; C:\Users{User}\AppData\Roaming\npm C:\…

chatgpt赋能python:Python单行for:如何简化你的代码

Python单行for&#xff1a;如何简化你的代码 在Python编程中&#xff0c;for循环是必不可少的一部分&#xff0c;它可以用于遍历列表、元组和字典等各种数据类型。而Python单行for则是一种更加简单、更加紧凑的语法形式&#xff0c;可以让你更加高效地遍历和处理数据。 什么是…

STL--mapset(手撕AVL树,红黑树)

1. 关联式容器 在初阶阶段&#xff0c;我们已经接触过STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、 forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面 存储的是元素本身。那什么是关…

Yolov5涨点神器:注意力机制---多头上下文集成(Context Aggregation)的广义构建模块,助力小目标检测,暴力涨点

1.数据集性能验证 在crack道路缺陷检测任务中,多头上下文集成(Context Aggregation)的广义构建模块实现暴力涨点mAP50从0.954提升至0.992 🏆🏆🏆🏆🏆🏆Yolov5/Yolov7魔术师🏆🏆🏆🏆🏆🏆 ✨✨✨魔改网络、复现前沿论文,组合优化创新 🚀🚀🚀…

内网渗透(八十三)之安装ADCS证书服务

安装ADCS证书服务 本编文章,我们来讲解安装ADCS证书服务,这里注意一下,因为证书服务特性(不能更改计算机名称、网络参数),因此在部署证书服务器时建议独立部署,ADCS证书服务不能和域控是同一台服务器,这里我用的一台加入域的Server2016搭建 1、以 Enterprise Admins …

chatgpt赋能python:Python内置变量的重要性及常用变量介绍

Python内置变量的重要性及常用变量介绍 Python是一种简单易学的脚本语言&#xff0c;其特点是直观、易读、代码简单且易维护。Python内置变量是开发人员在Python编程中必不可少的一部分&#xff0c;它们在程序中扮演着重要的角色。接下来我们来介绍一些常用的Python内置变量。…

chatgpt赋能python:Python的内部类:优雅的封装性与灵活的应用

Python的内部类&#xff1a;优雅的封装性与灵活的应用 Python的内部类是面向对象编程中强大的封装性工具&#xff0c;它在类的内部定义其他类来辅助实现某些功能&#xff0c;可以有效避免类命名冲突、提高代码灵活性等。本文将详细介绍Python内部类的特点及应用场景&#xff0…

chatgpt赋能python:Python单行判断:提高代码效率的利器

Python单行判断&#xff1a;提高代码效率的利器 在Python编程中&#xff0c;单行判断是常用的一种技巧。相比使用if语句&#xff0c;单行判断可以让代码更加简洁、优美&#xff0c;提高代码的效率和可读性。本文将介绍Python单行判断的用法及其优势&#xff0c;帮助读者更好地…