91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

利用micro_ros實(shí)現(xiàn)esp32與旭日x3派的通訊

地瓜機(jī)器人 ? 2022-07-20 14:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

參考:https://github.com/micro-ROS/micro_ros_arduino

https://blog.csdn.net/ZhangRelay/article/details/101394537

  • micro_ros可以理解為一個(gè)運(yùn)行在嵌入式平臺(tái)的輕量級(jí)ros,其好處是建立了一套上位機(jī)平臺(tái)(主要運(yùn)行ubuntu+ros)與下位機(jī)平臺(tái)(MCU)的通訊機(jī)制,包括串口、UDP、wifi等,省去了我們編寫(xiě)通訊協(xié)議的煩惱。
  • 這套通訊機(jī)制最大的好處是可以將下位機(jī)平臺(tái)(MCU)當(dāng)作ros中的一個(gè)Node,實(shí)現(xiàn)topic的發(fā)布、訂閱,以及service、action等等??梢哉f(shuō)是無(wú)縫兼容ros。
  • 個(gè)人粗淺的理解,ros最大的方便就是提供了一個(gè)基于Node的分布式通訊機(jī)制。

本文所用安裝環(huán)境:

  • 上位機(jī):旭日x3派 (ros2 foxy+ubuntu 20.04)
  • 下位機(jī):M5stack Atom Lite(esp32 core)

0. micro_ros與micro_ros_arduino的安裝

參考我之前寫(xiě)的一篇記錄https://zhuanlan.zhihu.com/p/540924221

特別注意:

  • 2GB內(nèi)存的旭日x3派開(kāi)啟swap,否則micro_ros_agent的build過(guò)程容易內(nèi)存不足;
  • 網(wǎng)絡(luò)環(huán)境務(wù)必能夠通暢無(wú)阻的訪問(wèn)github,否則大概率失??!

1. 下位機(jī)配置

1.1 arduino支持包安裝

我這里使用的下位機(jī)是M5stack Atom Lite,其核心是esp32,但我用arduino框架進(jìn)行開(kāi)發(fā)。

理論上,所有支持arduino開(kāi)發(fā)的嵌入式平臺(tái)應(yīng)該都可以。

注意:務(wù)必安裝自己嵌入式平臺(tái)對(duì)應(yīng)的arduino支持包。

正確安裝M5stack支持包后,在開(kāi)發(fā)板管理中應(yīng)該出現(xiàn)M5 stack相關(guān)的信息。

image-20220716210240849

1.2 下位機(jī)代碼

#include ?#include #include #include #include #include ?#include //changed!?rcl_publisher_t publisher;geometry_msgs__msg__Twist msg; //changed!-->modify msg type rclc_executor_t executor;rclc_support_t support;rcl_allocator_t allocator;rcl_node_t node;rcl_timer_t timer;?#define LED_PIN 27 //changed!-->Modify M5 stack Atom Lite LED pin?#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)); static int cnt = 0; msg.linear.x = 0.2; //const linear.x msg.angular.z = 1.0 - 0.001*cnt; //variable angular.z cnt++; }}?void setup() { set_microros_transports();? 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_node", "", &support));? // create publisher RCCHECK(rclc_publisher_init_default( &publisher, &node, ROSIDL_GET_MSG_TYPE_SUPPORT(geometry_msgs, msg, Twist), "turtle1/cmd_vel")); //changed!-->modify topic name? // create timer, const unsigned int timer_timeout = 1000; RCCHECK(rclc_timer_init_default( &timer, &support, RCL_MS_TO_NS(timer_timeout), timer_callback));? // create executor RCCHECK(rclc_executor_init(&executor, &support.context, 1, &allocator)); RCCHECK(rclc_executor_add_timer(&executor, &timer));? // changed!-->msg initialization msg.linear.x=0; msg.linear.y=0; msg.linear.z=0; msg.angular.x=0; msg.angular.y=0; msg.angular.z=0;}?void loop() { delay(100); RCSOFTCHECK(rclc_executor_spin_some(&executor, RCL_MS_TO_NS(100)));}

1.3 代碼解析

  • 代碼基于micro_ros_arduino的示例代碼micro-ros_publisher,對(duì)其進(jìn)行簡(jiǎn)單修改。
  • ros2中turtle接收的msg類型為twist,所以首先添加twist頭文件,并定義msg類型為twist

#include //changed!geometry_msgs__msg__Twist msg; //changed!-->modify msg type

  • 將msg中的變量初始化為0

// changed!-->msg initialization msg.linear.x=0; msg.linear.y=0; msg.linear.z=0; msg.angular.x=0; msg.angular.y=0; msg.angular.z=0;

  • 修改發(fā)布的topic的名字,修改為turtle1/cmd_vel。
    • 這一topic name要與ros2中turtlesim接收的topic name一致

// create publisher RCCHECK(rclc_publisher_init_default( &publisher, &node, ROSIDL_GET_MSG_TYPE_SUPPORT(geometry_msgs, msg, Twist), "turtle1/cmd_vel")); //changed!-->modify topic name

  • 定時(shí)器回調(diào)函數(shù)中對(duì)線速度和角速度進(jìn)行處理
    • 線速度恒定,角速度變化

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)); static int cnt = 0; msg.linear.x = 0.2; //const linear.x msg.angular.z = 1.0 - 0.001*cnt; //variable angular.z cnt++; }}

  • 修改LED燈的管腳號(hào)(非必須)

2. 上位機(jī)配置

將下位機(jī)代碼燒錄后,將下位機(jī)通過(guò)串口連接上位機(jī),這里我使用usb串口的方式連接。

微信圖片_20220717085646

為了顯示turtle的運(yùn)動(dòng),旭日x3派需要連接hdmi或者遠(yuǎn)程VNC,我使用的后者。

新建終端,source一下ros2,再source一下micro_ros。

source /opt/tros/setup.bash #或者 source /opt/ros/foxy/setup.bashcd /microros_ws/ #進(jìn)入micro_ros的工作空間source install/setup.bash #source一下,也可以將這些命令添加到 /.bashrc

  • 首先提升串口讀寫(xiě)權(quán)限(確保自己的串口是ttyUSB0,因硬件而異)

sudo chmod -R 777 /dev/ttyUSB0

  • 開(kāi)啟micro_agent

ros2 run micro_ros_agent micro_ros_agent serial --dev /dev/ttyUSB0

  • 按下下位機(jī)的復(fù)位鍵(特別注意,需要按下復(fù)位鍵)
image-20220717084958430

  • 重新開(kāi)啟一個(gè)終端,打開(kāi)turtlesim_node

ros2 run turtlesim turtlesim_node

  • 此時(shí)可以看到turtle在運(yùn)動(dòng)了
image-20220717085058875

3. 其他

  • publisher示例代碼的話題發(fā)布頻率默認(rèn)為1Hz,可以進(jìn)行調(diào)整,10Hz沒(méi)問(wèn)題。但是想要100Hz往上就不行了
  • 需要更高的話題發(fā)布頻率需要使用rclc_publisher_init_best_effort代替rclc_publisher_init_default
  • 但是best_effort的pub也需要best_effort的sub,所以當(dāng)使用best_effort發(fā)布twist時(shí),turtle不會(huì)運(yùn)動(dòng),因?yàn)闆](méi)有使用best_effort的sub來(lái)接收。關(guān)于這個(gè)可以參考:https://docs.ros.org/en/rolling/Concepts/About-Quality-of-Service-Settings.html#qos-compatibilities

本文轉(zhuǎn)自地平線開(kāi)發(fā)者社區(qū)

原作者:Tianci

原鏈接:https://developer.horizon.ai/forumDetail/98129540173361336

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5200

    文章

    20478

    瀏覽量

    334504
  • AI
    AI
    +關(guān)注

    關(guān)注

    91

    文章

    39961

    瀏覽量

    301600
  • 人工智能
    +關(guān)注

    關(guān)注

    1818

    文章

    50123

    瀏覽量

    265617
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    ESP32/ESP8266開(kāi)發(fā)板單向一對(duì)多ESP-NOW無(wú)線通信

    通過(guò)ESP-NOW無(wú)線通信協(xié)議實(shí)現(xiàn)ESP32開(kāi)發(fā)板向多個(gè)ESP32/ESP 8266開(kāi)發(fā)板發(fā)送數(shù)據(jù)。
    的頭像 發(fā)表于 03-13 09:23 ?20次閱讀
    <b class='flag-5'>ESP32</b>/<b class='flag-5'>ESP</b>8266開(kāi)發(fā)板單向一對(duì)多<b class='flag-5'>ESP</b>-NOW無(wú)線通信

    ESP32-S3系列】WT9932S3-NANO開(kāi)發(fā)板上手指南

    WT9932S3-Nano采用了ESP32-S3R8為主芯片,兼容ArduinoNanoESP32,適用于物聯(lián)網(wǎng)或MicroPython等應(yīng)用,外形小巧,性能強(qiáng)大,適合嵌入到獨(dú)立項(xiàng)目中。特性采用
    的頭像 發(fā)表于 02-12 18:16 ?185次閱讀
    【<b class='flag-5'>ESP32-S3</b>系列】WT9932S<b class='flag-5'>3</b>-NANO開(kāi)發(fā)板上手指南

    ESP-Hi:基于ESP32-C3的開(kāi)源低成本AI機(jī)器狗技術(shù)解析與應(yīng)用展望

    ESP-Hi是基于ESP32-C3芯片的開(kāi)源AI機(jī)器狗項(xiàng)目,通過(guò)創(chuàng)新設(shè)計(jì)實(shí)現(xiàn)超低成本智能交互。項(xiàng)目利用芯片ADC與I2S接口實(shí)現(xiàn)語(yǔ)音功能,以
    的頭像 發(fā)表于 01-14 16:30 ?2192次閱讀
    <b class='flag-5'>ESP</b>-Hi:基于<b class='flag-5'>ESP32-C3</b>的開(kāi)源低成本AI機(jī)器狗技術(shù)解析與應(yīng)用展望

    ESP32藍(lán)牙驅(qū)動(dòng)MAX98357對(duì)音頻音樂(lè)播放

    本文介紹了MAX98357音頻模塊的基本特性,并利用ESP32的藍(lán)牙功能程序驅(qū)動(dòng)此模塊,最后用手機(jī)藍(lán)牙連接ESP32播放手機(jī)音樂(lè)
    的頭像 發(fā)表于 12-19 19:55 ?2749次閱讀
    <b class='flag-5'>ESP32</b>藍(lán)牙驅(qū)動(dòng)MAX98357對(duì)音頻音樂(lè)播放

    VSCode + ESP-IDF環(huán)境下給ESP32-S3項(xiàng)目添加頭文件

    VSCode + ESP-IDF環(huán)境下給ESP32-S3項(xiàng)目添加頭文件
    的頭像 發(fā)表于 11-28 07:27 ?2426次閱讀

    #ESP32S3野牛小智

    ESP32
    丙丁先生
    發(fā)布于 :2025年11月25日 08:34:06

    樂(lè)鑫科技ESP32-S3開(kāi)發(fā)板配單色LED,竟能玩出這么多花樣!代碼開(kāi)源,速來(lái)白嫖!

    從閃爍到呼吸,從流水到追逐,一文掌握所有LED特效技巧本文將帶領(lǐng)大家從零開(kāi)始,使用ESP32-S3開(kāi)發(fā)板實(shí)現(xiàn)多種單色LED效果控制。無(wú)論你是剛?cè)腴T(mén)的小白,還是有一定經(jīng)驗(yàn)的開(kāi)發(fā)者,都能輕松復(fù)刻這些炫酷
    的頭像 發(fā)表于 10-23 18:02 ?2241次閱讀
    樂(lè)鑫科技<b class='flag-5'>ESP32-S3</b>開(kāi)發(fā)板配單色LED,竟能玩出這么多花樣!代碼開(kāi)源,速來(lái)白嫖!

    如何使用menuconfig添加配置micro-ros軟件包?

    請(qǐng)問(wèn)有沒(méi)有最新的rtthread移植micro-ros移植使用教程,使用menuconfig添加配置micro-ros軟件包?
    發(fā)表于 09-25 06:37

    ESP32ESP-NOW通訊踩坑記

    1、背景前段時(shí)間看到樂(lè)鑫推出了一種很有意思的Wi-Fi通訊協(xié)議,它允許設(shè)備在無(wú)連接的時(shí)候進(jìn)行直接通訊。樂(lè)鑫對(duì)它的概述如下:“ESP-NOW是一種由樂(lè)鑫公司定義的無(wú)連接Wi-Fi通信協(xié)議。在ES
    的頭像 發(fā)表于 09-13 10:03 ?2575次閱讀
    <b class='flag-5'>ESP32</b>的<b class='flag-5'>ESP</b>-NOW<b class='flag-5'>通訊</b>踩坑記

    ESP32-S3的MicroPython開(kāi)發(fā)環(huán)境搭建

    本文通過(guò)搭建Thonny IDE開(kāi)發(fā)環(huán)境,了解了如何給ESP32-S3燒錄MircoPython固件和MircoPython應(yīng)用程序。
    的頭像 發(fā)表于 09-11 16:02 ?1676次閱讀
    <b class='flag-5'>ESP32-S3</b>的MicroPython開(kāi)發(fā)環(huán)境搭建

    樂(lè)鑫ESP32-S3專為AIoT設(shè)計(jì),強(qiáng)化邊緣AI應(yīng)用方向

    的向量指令(vectorinstructions)。AI開(kāi)發(fā)者們通過(guò)使用這些向量指令,可以實(shí)現(xiàn)高性能的圖像識(shí)別、語(yǔ)音喚醒和識(shí)別等應(yīng)用。 ? ESP32-S3是一款低功耗的MCU系統(tǒng)級(jí)芯片(SoC),支持
    的頭像 發(fā)表于 09-09 09:20 ?7497次閱讀
    樂(lè)鑫<b class='flag-5'>ESP32-S3</b>專為AIoT設(shè)計(jì),強(qiáng)化邊緣AI應(yīng)用方向

    奇瑞風(fēng)云X3系列雙車上市

    8月16日,奇瑞汽車旗下風(fēng)云品牌全新方盒子產(chǎn)品序列——風(fēng)云X3與風(fēng)云X3 PLUS正式宣告上市。風(fēng)云X3系列基于iCAR 03系列煥新升級(jí)而來(lái),在造型設(shè)計(jì)、動(dòng)力性能、智能科技、功能配置及工藝品質(zhì)等維度
    的頭像 發(fā)表于 08-19 11:48 ?1137次閱讀

    ESP32-運(yùn)行網(wǎng)頁(yè)服務(wù)器(Web Server)-實(shí)用篇

    在前一篇文章《ESP32-運(yùn)行網(wǎng)頁(yè)服務(wù)器(WebServer)-入門(mén)篇》,我們介紹了ESP32運(yùn)行網(wǎng)頁(yè)服務(wù)器(WebServer)的原理,然后我們基于ESP32實(shí)現(xiàn)了一個(gè)demo代碼;
    的頭像 發(fā)表于 07-28 18:05 ?3679次閱讀
    <b class='flag-5'>ESP32</b>-運(yùn)行網(wǎng)頁(yè)服務(wù)器(Web Server)-實(shí)用篇

    ESP32開(kāi)發(fā)板元件資料

    ESP32開(kāi)發(fā)板元件
    發(fā)表于 07-21 14:47 ?15次下載

    基于ESP32C3的智能小車設(shè)計(jì)

    你有沒(méi)有想過(guò),從零開(kāi)始親手制作一輛堅(jiān)固耐用的遙控越野車?今天,小編就帶你走進(jìn)一個(gè)融合機(jī)械、電子與物聯(lián)網(wǎng)的精彩DIY項(xiàng)目——一款由 Seeed Studio XIAO ESP32C3 強(qiáng)力驅(qū)動(dòng)的 3D打印4x4 RC漫游車!
    的頭像 發(fā)表于 06-04 11:11 ?2459次閱讀
    基于<b class='flag-5'>ESP32C3</b>的智能小車設(shè)計(jì)