当前位置:网站首页>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);
}边栏推荐
- 一个注解替换synchronized关键字:分布式场景下实现方法加锁
- 虚拟机CentOS7中无图形界面安装Oracle
- 特征值与特征向量
- typescript48-函数之间的类型兼容性
- typescript58 - generic classes
- 观察者模式
- How to find the cause of Fiori Launchpad routing errors by single-step debugging
- WMS仓储管理系统能解决电子行业哪些仓库管理问题
- Apache DolphinScheduler新一代分布式工作流任务调度平台实战-中
- esp32发布机器人电池电压到ros2(micro-ros+CoCube)
猜你喜欢
随机推荐
nodejs install multi-version version switching
字符串的排列
贴纸拼词 —— 记忆化搜索 / 状压DP
【store商城项目01】环境准备以及测试
Sticker Spelling - Memory Search / Shape Pressure DP
网页三维虚拟展厅为接入元宇宙平台做基础
Promise 解决阻塞式同步,将异步变为同步
优秀的测试/开发程序员,是怎样修炼的?步步为营地去执行......
【QT小记】QT中信号和槽的基本使用
【日志框架】
谁说程序员不懂浪漫,表白代码来啦~
nodejs installation and environment configuration
Apache DolphinScheduler新一代分布式工作流任务调度平台实战-中
nodejs安装及环境配置
有没有jdbc 链接优炫数据库文档及示例?
Apache DolphinScheduler actual combat task scheduling platform - a new generation of distributed workflow
电子组装行业对MES管理系统的需求分析
typescript55 - generic constraints
.NET Static Code Weaving - Rougamo Release 1.1.0
What warehouse management problems can WMS warehouse management system solve in the electronics industry?








