当前位置:网站首页>esp32 releases robot battery voltage to ros2 (micro-ros+CoCube)
esp32 releases robot battery voltage to ros2 (micro-ros+CoCube)
2022-08-04 01:32:00 【zhangrelay】

Sample program test portad数值:
#include "Arduino.h"
#include <ESP32AnalogRead.h>
ESP32AnalogRead adc;
void setup()
{
adc.attach(34);
Serial.begin(115200);
}
void loop()
{
delay(50);
Serial.println("Voltage = "+String(adc.readVoltage()));
}This is just a simple testadport voltage program,没有滤波,No numerical transformation is performed according to the actual situation.
34is the measurement voltage port.
初始化,adand serial port baud rate:
void setup()
{
adc.attach(34);
Serial.begin(115200);
}Cycle the voltage and output the serial port,时延50ms:
void loop()
{
delay(50);
Serial.println("Voltage = "+String(adc.readVoltage()));
}This is a simple voltage measurement program for a single-chip microcomputer.
Supplemental filtering and scaling are required.留作思考题.
效果如下图:

micro-rosAn example of publishing a message is as follows:
#include <micro_ros_arduino.h>
#include <stdio.h>
#include <rcl/rcl.h>
#include <rcl/error_handling.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>
#include <std_msgs/msg/int32.h>
#if !defined(ESP32) && !defined(TARGET_PORTENTA_H7_M7) && !defined(ARDUINO_NANO_RP2040_CONNECT)
#error This example is only avaible for Arduino Portenta, Arduino Nano RP2040 Connect and ESP32 Dev module
#endif
rcl_publisher_t publisher;
std_msgs__msg__Int32 msg;
rclc_support_t support;
rcl_allocator_t allocator;
rcl_node_t node;
#define LED_PIN 13
#define RCCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){error_loop();}}
#define RCSOFTCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){}}
void error_loop(){
while(1){
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
delay(100);
}
}
void timer_callback(rcl_timer_t * timer, int64_t last_call_time)
{
RCLC_UNUSED(last_call_time);
if (timer != NULL) {
RCSOFTCHECK(rcl_publish(&publisher, &msg, NULL));
msg.data++;
}
}
void setup() {
set_microros_wifi_transports("***", "***", "***", 8888);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);
delay(2000);
allocator = rcl_get_default_allocator();
//create init_options
RCCHECK(rclc_support_init(&support, 0, NULL, &allocator));
// create node
RCCHECK(rclc_node_init_default(&node, "micro_ros_arduino_wifi_node", "", &support));
// create publisher
RCCHECK(rclc_publisher_init_best_effort(
&publisher,
&node,
ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32),
"topic_name"));
msg.data = 0;
}
void loop() {
RCSOFTCHECK(rcl_publish(&publisher, &msg, NULL));
msg.data++;
}What code needs to be modified?
ROS1/2The data types in are as follows:
ROS Message Types
Bool
Byte
ByteMultiArray
Char
ColorRGBA
Duration
Empty
Float32
Float32MultiArray
Float64
Float64MultiArray
Header
Int16
Int16MultiArray
Int32
Int32MultiArray
Int64
Int64MultiArray
Int8
Int8MultiArray
MultiArrayDimension
MultiArrayLayout
String
Time
UInt16
UInt16MultiArray
UInt32
UInt32MultiArray
UInt64
UInt64MultiArray
UInt8
UInt8MultiArray
battery电池,Voltage situation:

高>4.1v为插入usb口,Low for battery power.

需要启动agent:

参考程序如下:
#include <micro_ros_arduino.h>
#include <stdio.h>
#include <rcl/rcl.h>
#include <rcl/error_handling.h>
#include <rclc/rclc.h>
#include <rclc/executor.h>
#include <std_msgs/msg/float32.h>
#if !defined(ESP32) && !defined(TARGET_PORTENTA_H7_M7) && !defined(ARDUINO_NANO_RP2040_CONNECT)
#error This example is only avaible for Arduino Portenta, Arduino Nano RP2040 Connect and ESP32 Dev module
#endif
#define BAT_DET 34
rcl_publisher_t publisher;
std_msgs__msg__Float32 msg;
rclc_support_t support;
rcl_allocator_t allocator;
rcl_node_t node;
#define LED_PIN 13
#define RCCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){error_loop();}}
#define RCSOFTCHECK(fn) { rcl_ret_t temp_rc = fn; if((temp_rc != RCL_RET_OK)){}}
void error_loop(){
while(1){
digitalWrite(LED_PIN, !digitalRead(LED_PIN));
delay(100);
}
}
void timer_callback(rcl_timer_t * timer, int64_t last_call_time)
{
RCLC_UNUSED(last_call_time);
if (timer != NULL) {
RCSOFTCHECK(rcl_publish(&publisher, &msg, NULL));
msg.data++;
}
}
void setup() {
set_microros_wifi_transports("***", "***", "***", 8888);
pinMode(BAT_DET, INPUT);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);
delay(2000);
allocator = rcl_get_default_allocator();
//create init_options
RCCHECK(rclc_support_init(&support, 0, NULL, &allocator));
// create node
RCCHECK(rclc_node_init_default(&node, "robot_battery_wifi_node", "", &support));
// create publisher
RCCHECK(rclc_publisher_init_best_effort(
&publisher,
&node,
ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Float32),
"robot_battery"));
msg.data = 0.66;
}
void loop() {
float battery = 4.21 * analogRead(BAT_DET) / 2435;
RCSOFTCHECK(rcl_publish(&publisher, &msg, NULL));
msg.data=battery;
delay(1000);
}边栏推荐
- 多线程 之 JUC 学习篇章一 创建多线程的步骤
- 多渠道打包
- 特征值与特征向量
- 一篇文章看懂JS闭包,从执行上下文角度解析有趣的闭包
- 贴纸拼词 —— 记忆化搜索 / 状压DP
- 一个项目的整体测试流程有哪几个阶段?测试方法有哪些?
- 网页三维虚拟展厅为接入元宇宙平台做基础
- typescript58-泛型类
- LeetCode third topic (the Longest Substring Without Repeating Characters) trilogy # 3: two optimization
- Tanabata festival coming, VR panoramic look god assists for you
猜你喜欢
随机推荐
nodejs installation and environment configuration
typescript55-泛型约束
MySQL回表指的是什么
Electronics manufacturing enterprise deployment WMS what are the benefits of warehouse management system
VR panorama shooting online exhibition hall, 3D panorama brings you an immersive experience
快速入门EasyX图形编程
Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
即席查询——Presto
一个项目的整体测试流程有哪几个阶段?测试方法有哪些?
Android interview questions and answer analysis of major factories in the first half of 2022 (continuously updated...)
typescript56 - generic interface
C # WPF equipment monitoring software (classic) - the next
工程制图名词解释-重点知识
【QT小记】QT中信号和槽的基本使用
typescript58-泛型类
螺旋矩阵_数组 | leecode刷题笔记
电子制造企业部署WMS仓储管理系统的好处是什么
【日志框架】
【虚拟化生态平台】虚拟化平台esxi挂载USB硬盘
Thinkphp commonly used techniques








