当前位置:网站首页>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);
}
边栏推荐
- typescript58 - generic classes
- Slipper —— 虚点,最短路
- VR panorama shooting online exhibition hall, 3D panorama brings you an immersive experience
- 一个项目的整体测试流程有哪几个阶段?测试方法有哪些?
- Observability:你所需要知道的关于 Syslog 的一些知识
- 【无标题】
- 《The Google File System》新说
- Jmeter cross-platform operation CSV files
- initramfs详解----添加硬盘驱动并访问磁盘
- 工程制图复习题
猜你喜欢
随机推荐
thinkphp 常用技巧
nodejs+express realizes the access to the database mysql and displays the data on the page
initramfs详解----添加硬盘驱动并访问磁盘
typescript58-泛型类
pygame 中的transform模块
LeetCode third topic (the Longest Substring Without Repeating Characters) trilogy # 3: two optimization
互斥锁、读写锁、自旋锁,以及原子操作指令xaddl、cmpxchg的使用场景剖析
循环绕过问题
《Greenplum构建实时数据仓库实践》简介
C 学生管理系统 显示链表信息、删除链表
分析:Nomad Bridge黑客攻击的独特之处
WMS仓储管理系统能解决电子行业哪些仓库管理问题
typescript52 - simplify generic function calls
KunlunBase 1.0 发布了!
工程制图复习题(带答案)
typescript56-泛型接口
Please refer to dump files (if any exist) [date].dump, [date]-jvmRun[N].dump and [date].dumpstream.
Getting started with MATLAB 3D drawing command plot3
多线程 之 JUC 学习篇章一 创建多线程的步骤
JS 从零教你手写节流throttle