STM32 使用microros与ROS2通信

这篇具有很好参考价值的文章主要介绍了STM32 使用microros与ROS2通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文主要介绍如何在STM32中使用microros与ROS2进行通信,在ROS1中标准的库是rosserial,在ROS2中则是microros,目前网上的资料也有一部分了,但是都没有提供完整可验证的demo,本文将根据提供的demo一步步给大家进行演示。

1、首先如果你用的不是STM32F4的话,则需要自己去生成micro_ros_stm32cubemx_utils库,博文demo使用的硬件是STM32F407芯片,提供的micro_ros_stm32cubemx_utils库也是F4的,工程目录如下图所示:

STM32 使用microros与ROS2通信

工程使用STM32CubeMX软件进行端口硬件等代码的初始化,大家在开发中可以对stattobotMicroros.ioc文件进行编辑,本文不对STM32CubeMX的使用进行讲解,大家可以自行百度学习。

2、micro_ros_stm32cubemx_utils使用提供了中断读写和DMA读写的接口,大家根据自己实际使用的端口对文件,dma_transports.c,it_transport.c

STM32 使用microros与ROS2通信

3、microros_tasks.c是microsros初始化和节点发布订阅的文件,

void starrobot_microros_init(void){
    MX_USART1_UART_Init();
    rmw_ret_t status = rmw_uros_set_custom_transport(
                            true,
                            (void *) &huart1,
                            cubemx_transport_open,
                            cubemx_transport_close,
                            cubemx_transport_write,
                            cubemx_transport_read);

    rcl_allocator_t freeRTOS_allocator = rcutils_get_zero_initialized_allocator();
    freeRTOS_allocator.allocate = microros_allocate;
    freeRTOS_allocator.deallocate = microros_deallocate;
    freeRTOS_allocator.reallocate = microros_reallocate;
    freeRTOS_allocator.zero_allocate =  microros_zero_allocate;

    if (!rcutils_set_default_allocator(&freeRTOS_allocator)) {
        printf("Error on default allocators (line %d)\n", __LINE__); 
        }
}

该函数主要是对硬件进行注册绑定,使用的硬件,打开、关闭、读写、函数与microros的接口进行绑定。

void run_starrobotSTM_node(void){   
    // initial configurations 
    starrobot_microros_init();
    init_starrobotSTM_node();
    create_starrobotSTM_publisher();
    create_starrobotSTM_subscriber();

    // timer for publisher
    rcl_timer_t timer_pub;
    RCCHECK(rclc_timer_init_default(
        &timer_pub,
        &support,
        RCL_MS_TO_NS(5),
        publisher_callback));

    // create executor
    executor = rclc_executor_get_zero_initialized_executor();
    RCCHECK(rclc_executor_init(&executor, &support.context, 2, &allocator));
    RCCHECK(rclc_executor_add_timer(&executor, &timer_pub));
    RCCHECK(rclc_executor_add_subscription(&executor, &subscriber, &sub_msg, &subscription_callback, ON_NEW_DATA));
    
    // spin node by executor 
    while(1){
        rcl_ret_t rc = rclc_executor_spin(&executor); //, RCL_MS_TO_NS(100)
        if (rc != RCL_RET_OK){
            break;
        }
    }
    // rclc_executor_fini(&executor);
}

该函数是整个节点的封装函数,包含了注册绑定硬件和创建发布、订阅节点。

大家下载demo包后,需要先在vscode中配置开发ARM的环境,然后make jflash进行编译下载即可;下载完成后打开ROS2端运行Agent 指令:<sudo docker run -it --rm -v /dev:/dev -v /dev/shm:/dev/shm --privileged --net=host microros/micro-ros-agent:$ROS_DISTRO serial --dev /dev/ttyUSB0 -v>,使用<ros2 node list> <ros2 topic list> <ros2 topic info /topic_name>查看发布的节点信息和数据。

相关demo代码下载地址:https://gitee.com/starRureole/starrobot_microros.git

如果大家有CSDN积分,想支持一下博主的,可以在CSDN上下载:https://download.csdn.net/download/qq_36349536/87500333

同时也欢迎大家进群一起交流学习:129923584

相关视频讲解链接:https://www.bilibili.com/video/BV1bD4y1g7V5/

博文使用的开发板购买链接:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-21142386790.2.c0086177uv5IlA&id=606445592295文章来源地址https://www.toymoban.com/news/detail-479533.html

到了这里,关于STM32 使用microros与ROS2通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ROS与STM32通信(二)-pyserial

    ROS与STM32通信一般分为两种, STM32上运行ros节点实现通信 使用普通的串口库进行通信,然后以话题方式发布 第一种方式具体实现过程可参考上篇文章ROS与STM32通信-rosserial,上述文章中的收发频率不一致情况,目前还没解决,所以本篇文章采用第二种方式来实现STM32与ROS通信,

    2024年02月12日
    浏览(27)
  • ROS与STM32通信(一)-rosserial

    STM32F103c8t6 OLED(I2C) USB2TTL Stlink 接线 OLED(GPIO模拟I2C) 硬件 引脚 OLEDSCL PA4 OLEDSDA PA5 USART1 硬件 引脚 作用 RX PA9 USART1_TX TX PA10 USART1_RX LED 硬件 引脚 LED0 PC13 LED1 PC15 STM32CubeMX Clion STM32CubeMX配置 SYS-Debug-Serial Wire RCC-HSE-Crystal/Ceramic Resonator PC15-OutPut ,Label为LED0 PC13-OutPut ,Label为LED1 TIM1-Clock

    2024年02月09日
    浏览(27)
  • ROS机器人制作(三)—— ROS上位机与stm32进行串口通信

    总代码在文末,需要完整的工程文件可以私聊(收一点点辛苦费) 首先创建一个功能包,用于发送和接收数据。 注意: 1.功能包依赖: roscpp std_msgs rosserial 2.当有两个c++文件进行编译时可以在功能包下的CMakeLists.txt文件中 第一部分是ROS上位机给stm32发送数据。第二部分是stm

    2024年02月15日
    浏览(37)
  • ros2与web通信实例

    最近需要进行ros2与web端进行通信操作,目标是ros2发送的消息web端能够显示在界面,并且前端能够发布数据,最终实例如下: 然而网上查的的资料如古月居的: 利用Websocket实现ROS与Web的交互 https://www.guyuehome.com/5386 包括ros官网上以及目前网上绝大部分资料都是ros1与web交互的

    2024年02月21日
    浏览(31)
  • ROS2从入门到精通1-2:详解ROS2服务通信机制与自定义服务

    本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。 🚀详情:《ROS2从入门到精通》 服务 是 ROS 图中节点之间的另一种通信方法。服务基于 服务器-客户端 模型,不同于话题的 发布者-订阅者

    2024年04月09日
    浏览(29)
  • 微信小程序和ros2进行通信

      ROS2做为一款优秀的机器人操作系统软件,其搭载了丰富的机器人平台,是目前机器人领域应用最多的软件。微信做为一个大型社交软件,应用非常广泛,其中的小程序直接通过扫二维码进行加载,使用起来非常方便快捷。为了让手机端能够对机器人进行操作,于是通过微

    2024年02月10日
    浏览(44)
  • 【ROS2机器人入门到实战】ROS2节点介绍

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn ROS2中每一个节点也是只负责一个单独的模块化的功能(比如一个

    2024年02月06日
    浏览(40)
  • 【ROS2机器人入门到实战】ROS2接口介绍

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 本节小鱼将会带你学习认识一个新的概念,叫做interface,即接口。

    2024年02月05日
    浏览(35)
  • K210 UART串口通信介绍与 STM32通信

    目录 K210-UART串口通信相关函数: 使用K210串口的时候需要映射引脚: K210与STM32串口通信  发送单字节: K210端 STM32端 发送数据包 K210端 STM32端  K210的UART模块支持全双工通信,可以同时进行数据的发送和接收。在K210上使用UART串口通信,你可以连接外部设备,如传感器、显示器

    2024年03月23日
    浏览(32)
  • 【ROS2机器人入门到实战】Cartographer介绍与安装

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn Cartographer是Google开源的一个可跨多个平台和传感器配置以2D和3D形

    2024年02月02日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包