当前位置:网站首页>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);
}
边栏推荐
- 持续投入商品研发,叮咚买菜赢在了供应链投入上
- Slipper —— 虚点,最短路
- 谁说程序员不懂浪漫,表白代码来啦~
- HBuilderX的下载安装和创建/运行项目
- Electronics manufacturing enterprise deployment WMS what are the benefits of warehouse management system
- boot issue
- 【QT小记】QT中信号和槽的基本使用
- Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
- LDO investigation
- 虚拟机CentOS7中无图形界面安装Oracle
猜你喜欢
Quickly build a website with static files
静态文件快速建站
Vant3 - click on the corresponding name name to jump to the next page corresponding to the location of the name of the TAB bar
600MHz频段来了,它会是新的黄金频段吗?
typescript57-数组泛型接口
虚拟机CentOS7中无图形界面安装Oracle
网络带宽监控,带宽监控工具哪个好
typescript53 - generic constraints
LeetCode third topic (the Longest Substring Without Repeating Characters) trilogy # 3: two optimization
敏捷交付的工程效能治理
随机推荐
typescript50 - type specification between cross types and interfaces
boot issue
nodejs 安装多版本 版本切换
nodejs installation and environment configuration
特征值与特征向量
网络带宽监控,带宽监控工具哪个好
OpenCV如何实现Sobel边缘检测
Observability:你所需要知道的关于 Syslog 的一些知识
如何用C语言代码实现商品管理系统开发
多渠道打包
一个项目的整体测试流程有哪几个阶段?测试方法有哪些?
600MHz频段来了,它会是新的黄金频段吗?
GraphQL背后处理及执行过程是什么
typescript58 - generic classes
快速入门EasyX图形编程
Summary of GNSS Articles
虚拟机CentOS7中无图形界面安装Oracle
splice随机添加和删除的写法
JS 从零教你手写节流throttle
redis中常见的问题(缓存穿透,缓存雪崩,缓存击穿,redis淘汰策略)