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

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

3天內不再提示

如何微控制器上新建MicroROS節點

CHANBAEK ? 來源:魚香ROS ? 作者:小魚 ? 2023-07-15 16:52 ? 次閱讀

你好,我是愛吃魚香ROS的小魚。上一節我們介紹了MicroROS和Agent的安裝,本節我們開始正式編寫代碼,接入ROS2。

硬件開發平臺

為方便學習,本教程配套的硬件是小魚自制的MicroROS學習板,同時該板可以作為下一章節搭建實體移動機器人的主控板以及后續制作機械臂的驅動板使用。

板載資源圖如下:

圖片

該主控板可以在小魚的店鋪直接購買,性價比接地氣,點擊左下角閱讀原文直達魚香小鋪。

一、新建工程添加依賴

1.1 新建工程

新建example10_hello_microros工程,這里需要更改下工程的位置,默認目錄是在文檔目錄下,小魚在測試時發現目錄定位上有bug,所以建議直接放到主目錄或其下目錄,小魚這里直接放到主目錄。

圖片

1.2 添加依賴

打開platform.ini,接著我們添加MicroROS的依賴。

[env:featheresp32]
platform = espressif32
board = featheresp32
framework = arduino
lib_deps = 
    https://gitee.com/ohhuo/micro_ros_platformio.git

這里使用的地址并不是MicroROS官方倉庫,而是小魚經過修改后的國內倉庫地址,里面放置了小魚編譯好后可以直接使用的microros靜態庫,并對倉庫中需要梯子的地址進行了替換。

二、編寫代碼-第一個節點

開始編寫代碼,因為Micro-ROS遵循RCLC-API,所以這里小魚通過一個最簡單的例程介紹如何新建一個節點。

#include < Arduino.h >
#include < micro_ros_platformio.h >


#include < rcl/rcl.h >
#include < rclc/rclc.h >
#include < rclc/executor.h >


rclc_executor_t executor;
rclc_support_t support;
rcl_allocator_t allocator;
rcl_node_t node;


void setup()
{
  Serial.begin(115200);
  // 設置通過串口進行MicroROS通信
  set_microros_serial_transports(Serial);
  // 延時一段時間,等待設置完成
  delay(2000);
  // 初始化內存分配器
  allocator = rcl_get_default_allocator();
  // 創建初始化選項
  rclc_support_init(&support, 0, NULL, &allocator);
  // 創建節點 hello_microros
  rclc_node_init_default(&node, "hello_microros", "", &support);
  // 創建執行器
  rclc_executor_init(&executor, &support.context, 1, &allocator);
}


void loop()
{
  delay(100);
  // 循環處理數據
  rclc_executor_spin_some(&executor, RCL_MS_TO_NS(100));
}

上面代碼并不復雜,小魚已經將注釋寫上,強烈建議你跟著代碼敲一遍,不要直接復制粘貼。

相比在上位機中開發ROS,這里多了幾步

設置通信協議,因為可以通過多種方式連接,所以需要進行提前設置

初始化內存分配器,在微控制器上資源受限,內存的管理要很細致

創建初始化選項,用于初始化rcl并創建一些需要用到的數據結構體

關于rclc的api小魚并沒有找到文檔,不過源碼的頭文件依然非常清晰,直接按著Ctrl點擊某個函數即可跳轉(不行的,重啟下Vscode)。

比如關于rclc_support_init 的源碼及參數介紹。

/**
 *  Initializes rcl and creates some support data structures.
 *  Initializes clock as RCL_STEADY_TIME.
 *  * < hr >
 * Attribute          | Adherence
 * ------------------ | -------------
 * Allocates Memory   | Yes (in RCL)
 * Thread-Safe        | No
 * Uses Atomics       | No
 * Lock-Free          | Yes
 *
 * param[inout] support a zero-initialized rclc_support_t
 * param[in] argc number of args of main
 * param[in] argv array of arguments of main
 * param[in] allocator allocator for allocating memory
 * return `RCL_RET_OK` if RCL was initialized successfully
 * return `RCL_RET_INVALID_ARGUMENT` if any null pointer as argument
 * return `RCL_RET_ERROR` in case of failure
 */
RCLC_PUBLIC
rcl_ret_t
rclc_support_init(
  rclc_support_t * support,
  int argc,
  char const * const * argv,
  rcl_allocator_t * allocator);

三、運行測試

連接開發板,編譯下載,如果遇到端口被占用,多半是你的microros_agent沒有關閉,Ctrl+C打斷運行再次嘗試。

圖片

接著打開Agent

圖片

然而并沒有什么反應,重新點擊一次RST即可看到有數據發送和接收過來了。

圖片

接著打開新的終端,輸入指令

ros2 node list
ros2 node info /hello_microros

圖片

可以看到,我們的第一個節點成功運行起來了。

四、總結

本節我們成功的在微控制器平臺上將MicroROS節點運行起來了,下一節我們開始正式進行ROS2通信的學習。

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

    關注

    48

    文章

    6868

    瀏覽量

    148313
  • Micro
    +關注

    關注

    2

    文章

    237

    瀏覽量

    34642
  • 學習板
    +關注

    關注

    0

    文章

    40

    瀏覽量

    12086
  • 機械臂
    +關注

    關注

    11

    文章

    481

    瀏覽量

    23985
  • ROS
    ROS
    +關注

    關注

    1

    文章

    273

    瀏覽量

    16758
收藏 人收藏

    評論

    相關推薦

    #硬聲創作季 微控制器原理:微控制器的典型結構

    微控制器mcu
    Mr_haohao
    發布于 :2022年11月02日 14:51:39

    電梯的基礎原理:微控制器

    微控制器
    jf_10480160
    發布于 :2022年12月14日 07:20:15

    什么是微控制器

      微控制器是將微型計算機的主要部分集成在一個芯片的單芯片微型計算機。微控制器誕生于20世紀70年代中期,經過20多年的發展,其成本越來越低,而性能越來越強大,這使其應用已經無處不在,遍及各個領域
    發表于 11-14 14:30

    FatFs在32位微控制器STM32的移植

    FatFs在32位微控制器STM32的移植
    發表于 03-24 15:18

    微控制器的發展怎么樣

    微控制器廣泛應用于各種小型電器,隨著技術的發展,其不但價格低廉,而且功能越來越強大。由于家用電器、手持式消費電子產品、手持式通信裝置和車用電子等領域的市場推動,微控制器的使用量越來越大而且表現出
    發表于 06-25 06:19

    如何在微控制器使用RTOS?

    你好,我正在學習如何在微控制器使用RTOS,所以我決定在Freertos演示中嘗試一個看起來簡單的PIC18F例子。該項目是在MPLAB中創建的,所以我不得不嘗試將該示例“端口”移植到MPLABX
    發表于 03-05 09:48

    STM32微控制器

    意法半導體(ST)是世界最大的半導體公司之一,是MCU微控制器的領先者。STM32微控制器是目前的主流產品。如STM32F0 系列產品基于超低功耗的 ARM Cortex-M0 處理
    發表于 07-23 10:11

    微控制器的作用與應用

    微控制器是將微型計算機的主要部分集成在一個芯片的單芯片微型計算機。微控制器誕生于20世紀70年代中期,經過20多年的發展,其成本越來越低,而性能越來越強大,這使其應用已經無處不在,遍及各個領域
    發表于 09-10 06:21

    微控制器MCU是什么

    的應用中。MCU微控制器與微處理的不同之處在于它在一個芯片內包含整個處理引擎的更多元素。它將大多數處理引擎組件集成到單個芯片可以減小尺寸和成本。這使得對數字控制甚至更多的設備和過程
    發表于 11-03 06:45

    微控制器MCU的相關資料推薦

    的應用中。MCU微控制器與微處理的不同之處在于它在一個芯片內包含整個處理引擎的更多元素。它將大多數處理引擎組件集成到單個芯片可以減小尺寸和成本。這使得對數字控制...
    發表于 11-11 09:09

    基于微控制器設計的行車燈控制器

    描述基于微控制器的行車燈控制器該項目通過連接在其輸出端的燈泡的閃爍模式提供了一些照明效果。在連接 CN2 到 CN9 之間最多可以連接 8 個燈泡,控制它們的交流電源應連接在連接
    發表于 08-15 07:10

    什么是微控制器MCU

    的應用中。微控制器基礎知識微控制器包括單個芯片的小型計算機系統的主要元件。它們包含內存,IO和CPU以及同一芯片。這大大減小了尺寸,使其成為小型嵌入式系統的理想選擇,但這意味著在性能和靈活性方面存在折衷
    發表于 10-29 10:56

    在K32L2B3微控制器運用SLCD控制器的方法

    在K32L2B3微控制器運用SLCD控制器
    發表于 12-08 06:16

    通過將小車接入MicroROS完成了一個遙控小車的開發

    /micro-ros-agent:$ROS_DISTRO udp4 --port 8888 -v6  接著我們使用ROS 2的鍵盤控制節點來進行控制測試  ros2 run
    發表于 03-27 16:48

    什么是微控制器?如何編程微控制器?

    微控制器進行編程或刻錄意味著“將程序從編譯器傳輸到微控制器的存儲器”。微控制器的程序通常是用C或匯編語言編寫的,最后編譯器會生成一個十六進制文件,其中包含機器語言指令(例如零和微控制器
    的頭像 發表于 08-21 15:40 ?9539次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>