色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

利用micro_ros實現esp32與旭日x3派的通訊

地瓜機器人 ? 2022-07-20 14:24 ? 次閱讀

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

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

  • micro_ros可以理解為一個運行在嵌入式平臺的輕量級ros,其好處是建立了一套上位機平臺(主要運行ubuntu+ros)與下位機平臺(MCU)的通訊機制,包括串口、UDP、wifi等,省去了我們編寫通訊協議的煩惱。
  • 這套通訊機制最大的好處是可以將下位機平臺(MCU)當作ros中的一個Node,實現topic的發布、訂閱,以及service、action等等。可以說是無縫兼容ros。
  • 個人粗淺的理解,ros最大的方便就是提供了一個基于Node的分布式通訊機制。

本文所用安裝環境:

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

0. micro_ros與micro_ros_arduino的安裝

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

特別注意:

  • 2GB內存的旭日x3派開啟swap,否則micro_ros_agent的build過程容易內存不足;
  • 網絡環境務必能夠通暢無阻的訪問github,否則大概率失敗!

1. 下位機配置

1.1 arduino支持包安裝

我這里使用的下位機是M5stack Atom Lite,其核心是esp32,但我用arduino框架進行開發。

理論上,所有支持arduino開發的嵌入式平臺應該都可以。

注意:務必安裝自己嵌入式平臺對應的arduino支持包。

正確安裝M5stack支持包后,在開發板管理中應該出現M5 stack相關的信息

image-20220716210240849

1.2 下位機代碼

#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,對其進行簡單修改。
  • 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;

  • 修改發布的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

  • 定時器回調函數中對線速度和角速度進行處理
    • 線速度恒定,角速度變化

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燈的管腳號(非必須)

2. 上位機配置

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

微信圖片_20220717085646

為了顯示turtle的運動,旭日x3派需要連接hdmi或者遠程VNC,我使用的后者。

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

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

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

sudo chmod -R 777 /dev/ttyUSB0

  • 開啟micro_agent

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

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

  • 重新開啟一個終端,打開turtlesim_node

ros2 run turtlesim turtlesim_node

  • 此時可以看到turtle在運動了
image-20220717085058875

3. 其他

  • publisher示例代碼的話題發布頻率默認為1Hz,可以進行調整,10Hz沒問題。但是想要100Hz往上就不行了
  • 需要更高的話題發布頻率需要使用rclc_publisher_init_best_effort代替rclc_publisher_init_default
  • 但是best_effort的pub也需要best_effort的sub,所以當使用best_effort發布twist時,turtle不會運動,因為沒有使用best_effort的sub來接收。關于這個可以參考:https://docs.ros.org/en/rolling/Concepts/About-Quality-of-Service-Settings.html#qos-compatibilities

本文轉自地平線開發者社區

原作者:Tianci

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5090

    文章

    19176

    瀏覽量

    306895
  • AI
    AI
    +關注

    關注

    87

    文章

    31490

    瀏覽量

    269899
  • 人工智能
    +關注

    關注

    1794

    文章

    47642

    瀏覽量

    239650
收藏 人收藏

    評論

    相關推薦

    原來ESP32竟可《一“芯”兩用》既做人體檢測傳感器也做Wi-Fi數據傳輸

    如何使用ESP32來做人體檢測傳感器,對我來說還是挺新鮮的事兒,對你來說是否有也一樣呢?接下來我會重點來展開說說如何通過ESP32實現,這里我用的的是ESP32C3模組;0、前言之前
    的頭像 發表于 12-18 18:12 ?1091次閱讀
    原來<b class='flag-5'>ESP32</b>竟可《一“芯”兩用》既做人體檢測傳感器也做Wi-Fi數據傳輸

    ESP32-S3-WROOM-1/ESP32-S3-WROOM-1U技術規格書

    電子發燒友網站提供《ESP32-S3-WROOM-1/ESP32-S3-WROOM-1U技術規格書.pdf》資料免費下載
    發表于 12-07 15:30 ?1次下載

    esp8266和esp32區別是什么

    以下是關于ESP8266和ESP32的主要區別: 處理器和架構 : ESP8266 :使用一個Tensilica L106 80MHz的處理器,屬于Xtensa架構。 ESP32 :使
    的頭像 發表于 08-19 18:16 ?5826次閱讀

    esp32用什么軟件編程

    ESP32是一款由樂鑫(Espressif)推出的低功耗、高性能的Wi-Fi和藍牙雙模微控制器,廣泛應用于物聯網、智能家居、智能穿戴等領域。要對ESP32進行編程,需要選擇合適的編程軟件和開發環境
    的頭像 發表于 08-19 17:24 ?4150次閱讀

    ESP32-WROOM-32E、ESP32-WROOM-32D、ESP32-WROOM-32U 有什么區別?ESP32-WROOM-32 后綴字母代表的意思是?

    ESP32-D0WD-V3,板載天線。 ESP32-WROOM-32E、ESP32-WROOM-32D、ESP32-WROOM-32U是樂鑫(Espressif Systems)推出
    的頭像 發表于 07-17 10:09 ?1.1w次閱讀
    <b class='flag-5'>ESP32</b>-WROOM-32E、<b class='flag-5'>ESP32</b>-WROOM-32D、<b class='flag-5'>ESP32</b>-WROOM-32U  有什么區別?<b class='flag-5'>ESP32</b>-WROOM-32 后綴字母代表的意思是?

    ESP32能取代STM32嗎?哪個更好?

    不能!首先二者不存在哪個更好的問題,因為這兩個芯片使用場景各不相同,在嵌入式系統領域,ESP32和STM32都是常見的單片機系列,它們各自具有一定的優勢和適用場景。本文主要探討ESP32是否能夠取代
    的頭像 發表于 07-06 08:04 ?1.4w次閱讀
    <b class='flag-5'>ESP32</b>能取代STM32嗎?哪個更好?

    請問ESP32S3 USB-OTG支持什么類型多大容量的Micro SD卡?

    ESP32-S3=USB-OTG支持什么類型多大容量的Micro SD卡?
    發表于 07-01 07:09

    esp32s3的啟動時間遠大于esp32,為什么?

    -ROM:esp32s3-20210327Build:Mar 27 2021rst:0x15 (USB_UART_CHIP_RESET),boot:0xb (SPI_FAST_FLASH_BOOT)Saved PC
    發表于 07-01 06:25

    請問esp32c3可以做藍牙mesh網關嗎?

    esp32c3可以做藍牙mesh網關嗎?我現在用2個esp32c3做藍牙mesh,另外一個esp32c3做網關,能互相通訊,這個是否可以實現
    發表于 06-13 07:13

    ESP32-C3的USB Serial/JTAG Controller能作為通訊串口使用嗎?

    我這邊使用的是ESP8685(我理解跟ESP32C3在這方面是一樣的). IDF是5.0版本. 我這邊期望是: 我平時調試log與燒錄通過默認的硬件串口實現. 與電腦上位機的通訊通過
    發表于 06-11 07:04

    分享6個實用的ESP32-S3物聯網項目:從智能設備到安全創新

    的實時安全攝像頭等。 項目一、MutantW V2 - DIY ESP32-S3 智能手表 硬件和軟件組件: 硬件清單 1x ESP32-
    的頭像 發表于 05-17 10:15 ?898次閱讀

    用悟空全志H3開發板做一個基于ROS系統的全向輪小車

    H3ROS系統的協同工作,我們能夠遠程操控小車,實時獲取行駛里程數據,并在復雜的環境中靈活導航。 在接下來的視頻中,我將詳細展示這款全向輪小車的詳細設計和性能表現,以及如何利用悟空
    發表于 05-06 11:15

    充電樁選型對比:ESP32-S3模組和ESP32-C3模組誰更合適

    隨著新能源電車的普及,全國各地和海外都開始加緊安裝充電樁,運城到2025年年底,實現充電樁城鎮居住小區全覆蓋,截至今年3月底,泉州市新增充電樁居民報裝1.68萬戶。啟明云端是國內領先的物聯網通訊產品
    的頭像 發表于 04-30 08:04 ?6935次閱讀
    充電樁選型對比:<b class='flag-5'>ESP32-S3</b>模組和<b class='flag-5'>ESP32-C3</b>模組誰更合適

    ESP32-H2-MINI-1x模組 低功耗兼容Matter

    貿澤電子即日起開售Espressif Systems的ESP32-H2-MINI-1x模組。ESP32-H2-MINI-1x模組是功能強大的通用低功耗藍牙和IEEE 802.15.4組合模組,經優化兼容Matter。
    的頭像 發表于 04-17 10:22 ?725次閱讀
    <b class='flag-5'>ESP32-H2-MINI-1x</b>模組 低功耗兼容Matter

    ESP32-S3技術參考手冊

    電子發燒友網站提供《ESP32-S3技術參考手冊.pdf》資料免費下載
    發表于 03-29 14:01 ?15次下載
    主站蜘蛛池模板: 亚洲精品久久久午夜福利电影网 | 妞干网手机免费视频 | 在线视频一区二区三区在线播放 | 国产午夜人做人免费视频中文 | 色影音先锋av资源网 | 午夜理论电影在线观看亚洲 | 青青草原影视 | 57PAO强力打造高清免费 | 亚洲免费视频网站 | 久久99精国产一区二区三区四区 | 精品含羞草免费视频观看 | wwwzzz日本| 亚洲人视频在线观看 | 97国产在线播放 | 欧美最猛12teevideos欧美 欧美最猛12teevideos | 女人麻豆国产香蕉久久精品 | 青柠在线观看免费完整版 | 97视频在线播放 | 人妻兽虐曲 | 97免费人妻在线观看 | 97蜜桃网123| 精品无码久久久久久久动漫 | acg全彩无遮挡口工漫画网址 | 在线视频免费观看 | 亚洲国产欧美日本大妈 | 午夜伦伦电影理论片大片 | 成人国产免费 | 伊人色综合久久大香 | 最近的中文字幕2019国语 | 久久永久影院免费 | 国产午夜AV无码无片久久96 | 色欲AV亚洲永久无码精品麻豆 | 国产做国产爱免费视频 | 国产成人教育视频在线观看 | 重口味av| 国产免费久久爱久久啪 | 免费撕开胸罩吮胸视频 | 变形金刚7免费观看完整 | 国产AV亚洲精品久久久久 | 日韩精品一区二区中文 | 免费国产久久啪在线 |