Baize_ServoDriver_esp32(ROS+Arduino驱动舵机机械臂,通过串口或WiFi话题通信)(数字孪生:虚拟和现实同步)

2023-05-16

介绍

硬件平台

控制板:Baize_ServoDriver_esp32 

舵机机械臂:

通过Baize_ServoDriver_esp32这块舵机驱动板,我们来驱动我们的机器人。

首先,我们通过串口来订阅我们的自定义话题消息。

具体的话题消息以及定义方式,可以参照下面的仓库

https://github.com/Allen953/Leizhuo_UnderWaterHexapodRobot

然后我们就可以使用这个话题消息了,基于这个话题消息,我们用arduino来订阅这个消息,并显示在显示屏上,我发现当只显示一个joint_states数据时,屏幕的关节角度刷新速率正常,非常快,但是当角度多了之后,速度就变的很慢了,我猜是屏幕刷新速度跟不上,不过这个刷法好像也站不住脚,毕竟我用一个数字进行显示实验的时候,刷新速度是非常快的。所以还是比较疑惑。

代码 

1.订阅关节变量消息,并显示在显示屏上

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

#include <ros.h>
#include <std_msgs/String.h>
#include "Leizhuo_UnderWaterHexapodRobot/joint.h"


#include <SPI.h>
#include <TFT_eSPI.h>       // Hardware-specific library
TFT_eSPI TFT = TFT_eSPI();  // Invoke custom library


void chatterCallback(const std_msgs::String& msg) {
//  TFT.fillScreen(TFT_BLACK);
  TFT.setCursor(0, 30, 4);
  // Set the font colour to be white with a black background
  TFT.setTextColor(TFT_WHITE, TFT_BLACK);

  // We can now plot text on screen using the "print" class
  TFT.println(msg.data); 
}

int m = 0;

void chatterCallbackjoint(const Leizhuo_UnderWaterHexapodRobot::joint& hexapod_joint) {
  
  TFT.fillScreen(TFT_BLACK);
//  for(int i=0;i<2;i++)
//  {
//    for(int j=0;j<3;j++)
//    {
//      TFT.setCursor(j*70, i*20, 4);
//      // Set the font colour to be white with a black background
//      TFT.setTextColor(TFT_WHITE, TFT_BLACK);
//      // We can now plot text on screen using the "print" class
//      TFT.println(hexapod_joint.position[i*3+j]);
//    }
//  }
//      TFT.setCursor(0, 0, 4);
//      // Set the font colour to be white with a black background
//      TFT.setTextColor(TFT_WHITE, TFT_BLACK);
//      // We can now plot text on screen using the "print" class
//      TFT.println(hexapod_joint.position[0]);

      TFT.setCursor(80, 0, 4);
      // Set the font colour to be white with a black background
      TFT.setTextColor(TFT_WHITE, TFT_BLACK);
      // We can now plot text on screen using the "print" class
      TFT.println(hexapod_joint.position[1]);
}

ros::NodeHandle  nh;

std_msgs::String str_msg;
ros::Publisher chatter("gun", &str_msg);
ros::Subscriber<Leizhuo_UnderWaterHexapodRobot::joint> subjoint("/hexapod_joint", chatterCallbackjoint);
ros::Subscriber<std_msgs::String> sub("/chatter", chatterCallback);
char hello[13] = "gunnimade!";

void setup()
{
  nh.initNode();
  nh.advertise(chatter);
  nh.subscribe(sub);
  nh.subscribe(subjoint);
  
  TFT.init();
  TFT.setRotation(3);
  TFT.fillScreen(TFT_BLACK);
  TFT.initDMA();
    
  TFT.setCursor(0, 0, 4);
  // Set the font colour to be white with a black background
  TFT.setTextColor(TFT_WHITE, TFT_BLACK);

  // We can now plot text on screen using the "print" class
  TFT.println("Initialised default\n"); 
}

void loop()
{
//    str_msg.data = hello;
//    chatter.publish( &str_msg );

    nh.spinOnce();
//    time_s = millis();  

  delay(10);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Baize_ServoDriver_esp32(ROS+Arduino驱动舵机机械臂,通过串口或WiFi话题通信)(数字孪生:虚拟和现实同步) 的相关文章

  • 使用 pySerial 等待 Arduino 自动重置

    我正在尝试在 Linux 上使用非常简单的代码 为了展示问题 从 Arduino 板上读取行 Python代码 arduino py import serial arduino serial Serial dev ttyACM0 with
  • Arduino Nano 上的 WiFi

    我无法找到的虚拟问题 我用来将 WiFi 802 11b g n 添加到 Raspberry Pi 的扩展板也可以在 Nano 上使用吗 换句话说 向 Arduino Nano 板添加 WiFi 有多容易 可行 Thanks Arduino
  • printf 的包装

    我在Arduino下编码 我想开发串行打印格式化功能 所以我尝试使用sprintf未知大小的缓冲区 基本上 我们可以避免谈论 Arduino 及其串行输出 并考虑将文本写入缓冲区 然后使用printf 我试过这个 include
  • Arduino I2S 正弦波

    我正在开发一个项目 我想通过组合不同的正弦波来生成 简单 声音 我使用的是 arduino mkrZero 因为它内置了 I2S 接口 并且似乎有足够的处理能力来满足我的需求 I have wired my system exactly l
  • ARDUINO 常数有什么用?以前是22,现在是100

    我正在使用热电偶并下载了 MAX6675 库 我想知道以下几行中 ARDUINO 常量的值是做什么用的 if ARDUINO gt 100 lcd write byte 0 else lcd print 0 BYTE endif lcd p
  • PySerial 从 Arduino 读取线路的延迟

    我正在使用带有基本 DigitalReadSerial 设置的 arduino uno 如下所述 http arduino cc en Tutorial DigitalReadSerial http arduino cc en Tutori
  • DCF77 解码器与噪声信号

    我几乎完成了我的开源 DCF77 解码器项目 当我注意到标准 Arduino DCF77 库在噪声信号上表现非常差时 这一切就开始了 特别是当天线靠近计算机或洗衣机正在运行时 我永远无法从解码器中获取时间 我的第一个方法是向输入信号添加 数
  • 经典蓝牙 (2.1) 设备可实现的最小数据包延迟是多少?

    我正在使用 RN42 http www microchip com wwwproducts en RN42 http www microchip com wwwproducts en RN42 蓝牙模块以 115200 波特率 UART S
  • Arduino从SD卡读取最后一行

    我对 Arduino 业务还很陌生 如何从 SD 卡读取最后一行 通过以下代码片段 我可以读取第一行 n 之前的所有字符 现在我想添加一个 向后 声明 或其他内容 到目前为止我的代码 include
  • C#读取Arduino

    我正在尝试制作一个从 Arduino 读取传出信号的应用程序 但我无法使其在 C 中工作Windows 窗体 http en wikipedia org wiki Windows Forms 仅在控制台中 我的 C Windows 窗体代码
  • Arduino 上的 Serial 和 Stream 有什么区别,Serial.write 是如何实现的?

    我很难理解串行和流这两个术语之间的区别 串行不是流的一种吗 我对作业有一些我不明白的问题 计算机通过使用 流或串行 读取 彼此发送的数据来确定每个字节的含义 Also Serial write 我也很困惑 它返回一个字节的数据 对吗 一个字
  • 在 Arduino 上将整数/小数转换为十六进制?

    如何将整数或小数变量转换为十六进制字符串 我可以做相反的事情 将十六进制转换为整数 但我无法找出其他方法 这是为了Serial print 数组中的十六进制值 查看 Arduino 字符串教程here http arduino cc en
  • 使用 Ardulink 命令 Arduino Uno

    我试图在我的 JAVA 应用程序中使用 Ardulink 库来命令我的 Arduino Uno 但没有成功 我不知道我错过了什么 这是我的代码 Link link Link getDefaultInstance boolean connec
  • 如何提高 PySerial 读取速度

    我目前正在构建一台使用 Arduino Mega2560 作为主控制器的机器 Arduino 通过串口连接 获取命令 执行它并每 1ms 吐出一堆测量数据 我有一个运行 Python 的 Raspberry Pi 为用户提供一个漂亮的 GU
  • ROS中spin和rate.sleep的区别

    我是 ROS 新手 正在尝试了解这个强大的工具 我很困惑spin and rate sleep功能 谁能帮助我了解这两个功能之间的区别以及何时使用每个功能 ros spin and ros spinOnce 负责处理通信事件 例如到达的消息
  • 从 iBeacon 接收 BLE 信号到 Bluno(arduino with BLE)

    我想从 iBeacon 到 Bluno 接收 rssi 信号和 UUID Arduino 板具有 BLE 对此有一些疑问 有没有从 BLE 到 BLE 接收 UUID 和 rssi 的解决方案 两个BLE设备可以互相通信吗 我想找一些网站来
  • Arduino串口数据解析

    我正在编写一个应用程序 通过蓝牙用我的 Android 手机控制我的机器人 一切都很顺利 数据得到回显和验证 但我在协议方面遇到了一些问题 特别是我希望我的机器人的轮子在我发送时转动一个命令 例如s 10 100 or s 30 10 数值
  • Arduino C++ 代码:可以使用虚函数和异常吗?

    跟进这条评论 https stackoverflow com questions 452139 writing firmware assembly or high level 452401从问题中编写固件 汇编还是高级 https stac
  • Arduino Nano 33 IoT 的软件序列号

    我计划从旧的 5V Arduino Nano 迁移到新的 Arduino Nano 33 IoT 我已经使用软件串行 SoftwareSerial h 为旧的 5V Arduino Nano 编写了一个功能代码 以便与 Sim800L 模块
  • Arduino 错误:未命名类型?

    我已经编写了一个库 但遇到错误未命名类型的问题 我已经尝试了一切 搜索了几个小时 但没有运气 库放置在arduino sketch文件夹的 libraries 文件夹中 请帮忙 我使用的是 OSX 但 Windows 上也出现同样的问题 这

随机推荐

  • ArcGIS Engine许可突然用不了了或者localhost没有有效的许可管理器

    ArcGIS Engine许可突然用不了了或者localhost没有有效的许可管理器 在Arc Engine安装包中再重新安装一次许可管理
  • ZeroMQ学习 (五)发布-订阅模式

    7 发布 订阅模式 发布者不用管是否有订阅者 xff0c 它只管不停的发布 xff0c 也不用接受客户端的请求 多订阅者可以尝试链接发布者 xff0c 来接受信息 xff0c 但是不能往发布者发送请求 发布者源码 xff1a span st
  • 树莓派3B+安装Ubuntu20.04

    ros2已经出到F版本了 xff0c 本来想下载一个尝鲜一下 xff0c 怒肝了两天终于把Ubuntu20 04装到树莓派里面了 但是 xff0c 忽然发现F版本的还未发行 xff0c 只是在网站上更新了安装方法 xff0c 安装包和公钥都
  • 【SpringBoot】SpringBoot+SpringSecurity+CAS实现单点登录

    文章目录 一 CAS的概述1 SSO2 CAS3 概念 二 CAS的流程三 CAS服务端部署1 下载地址2 源码打包3 部署运行4 java io FileNotFoundException etc cas thekeystore 系统找不
  • Google Scholar 谷歌学术文献检索技巧总结

    原文链接 xff1a https zhuanlan zhihu com p 24369927 身边有朋友想学如何使用谷歌学术 xff0c 为了更广泛的传播和重复查阅 xff0c 故将个人了解到的谷歌学术检索文献的技巧总结在此 当然 xff0
  • kubernetes flannel pod CrashLoopBackoff解决

    背景 某环境客户部署了一个kubernetes集群 xff0c 发现flannel的pod一直重启 xff0c 始终处于CrashLoopBackOff状态 排查 对于始终CrashLoopBackOff的pod xff0c 一般是应用本身
  • MapReduce之二次排序

    目录 应用场景 什么是二次排序 怎样实现二次排序 示例代码 应用场景 假如输入文件内容如下 xff1a a 1 z 3 b 2 a 100 a 3 b 1 要求经过MapReduce处理后 xff0c key升序排列 xff0c 相同key
  • DirectUI和无窗口用户界面

    http blog joycode com jiangsheng archive 2010 03 22 115921 joy DirectUI DirectUser是一个用户界面框架 xff08 http msdn microsoft co
  • 魔百盒CM201-1刷机教程

    家里有一块魔百盒CM201 1一直在家积灰 xff0c 由于看到网上教程可以刷各种系统 xff0c 所以想着玩来试试看 先刷一个电视版安卓系统看 盒子样子大概就是下面这样 xff1a 拿到手之后就迫不及待的将外壳拆掉了 xff0c 下面这样
  • RK3288刷机教程:安装Ubuntu 16.04

    网上有很多基于瑞芯微RK3288芯片的板子 xff0c 个人感觉配置都非常不错 xff01 然后就淘了两块玩玩 如下图所示 xff1a 然后可以看到 xff0c 各种接口也比较全乎 xff01 有HDMI和VGA视频输出接口 xff0c 两
  • No package ‘orocos-bfl‘ found

    目录 问题 xff1a 原因 xff1a 解决办法 xff1a 问题 xff1a 在编译ros工程的时候 xff0c 出现如下错误提示 xff1a No package 39 orocos bfl 39 found 如下图所示 xff1a
  • 卡尔曼滤波(Kalman filter)算法以及Arduino应用-mpu6050(导航贴)

    正在更新中 这篇文章要跟大家一起完全搞明白卡尔曼滤波 xff0c 连一个标点符号也不放过 xff0c 完完全全理解明白 如果你看不懂 xff0c 那说明我写的不好 本文是看了dr con博士的视频后做的 xff0c 建议可以去看看 如果哪里
  • pop_back()的用法及运行机制

    vector在c 43 43 中非常好用 xff0c 简单的说 xff0c vector是一个能够存放任意类型的动态数组 能够增加和压缩数据 一般使用push back 和pop back 函数将数据存放进容器末尾 如下例程 xff1a i
  • Gazebo为机器人添加传感器

    Gazebo Tutorials 在gazebo仿真中 xff0c 为了验证算法 xff0c 往往需要很多传感器输入作为控制输出量的输入数据 xff0c 因此 xff0c 需要学习添加各式各样的传感器并获取传感器数据 1 IMU传感器 2
  • the selected library block “Contact_forces_lib/3D/sphere to plane force“ no longer exists

    问题 在matlab的simulink里面进行simscape仿真的时候 xff0c 由于添加了接触力 xff0c 因此实现装了 Simscape Multibody Contact Forces Library 这个库 xff0c 装完之
  • matlab画圆(及其他常用图形)

    画图 1 matlab画圆 xff08 1 xff09 代码 xff1a x 61 y 61 r 61 1 for i 61 1 100 x i 61 r cos i 2 pi 100 y i 61 r sin i 2 pi 100 plo
  • CircuitPython入门贴

    前言 以前一直玩arduino的 xff0c 但是恼火于每次写完代码 xff0c 都要编译并烧录到MCU上 xff0c 刚开始的blink例程类的小代码还好 xff0c 起码十几秒钟就能烧录成功 xff0c 但是后来随着程序代码量的增加 x
  • Ready! Use 192.168.191.2 to access clientGuru Meditation Error: Core 1 panic‘ed (LoadProhibited).

    问题描述 在用esp32通过wifi和ros主机进行话题通信的过程中 xff0c 串口一直打印如下信息 xff1a Connecting to Zhitong Ready Use 192 168 191 2 to access client
  • Kolla环境部署命令

    注 xff1a 此博客皆为经验所得 xff0c 如有雷同 xff0c 纯属巧合 xff01 1 根据需要 xff0c 配置 etc kolla global yml xff0c 可选择需要部署的容器 xff1b 2 在 etc kolla
  • Baize_ServoDriver_esp32(ROS+Arduino驱动舵机机械臂,通过串口或WiFi话题通信)(数字孪生:虚拟和现实同步)

    介绍 硬件平台 控制板 xff1a Baize ServoDriver esp32 舵机机械臂 xff1a 通过Baize ServoDriver esp32这块舵机驱动板 xff0c 我们来驱动我们的机器人 首先 xff0c 我们通过串口