掌上单片机实验室 — RT - Thread+ROS2 浅尝(26)

        前面化解了Micro_ROS通讯问题,并在 RT-Thread Studio 环境下,使用Micro_ROS软件包中的例程,实现了STM32F411CE核心板和ROS2主机的通讯。之后还尝试修改例程 micro_ros_sub_twist.c ,实现了接收 turtle_teleop_key 所发出的 turtle1/cmd_vel 信息,很是兴奋,认为只需将由 msh 命令启动的例程纳入到我的程序中(msh本身是个独立线程,和我的程序运行无关),即可实现用 turtle_teleop_key操控小车了。

        计划第一步先将 micro_ros_sub_twist.c 示例程序略加修改后加入到我的程序中,作为一个线程(示例本身也是创建了一个线程),由我的程序启动,在收到ROS2主机信息的基础上,下一步实现在此线程中解析数据,并通过 RT-Thread的消息机制和其它线程交互,操控小车。

        本以为这是块“豆腐”,不用一天即可完成,没想到却“硌了牙”!整整花了一周时间才搞定。欲知详情,容我慢慢道来。

一、构思

        之前完成了前文所述的 ROS2 及 Micro_ROS 基本环境;这一步计划在原有的程序框架下,增加一个线程,专门负责和 ROS2 主机通讯,类似于原来程序中的命令接收线程。将收到的 ROS2 信息解析后,转发给相应线程,实现小车的操控。

        第一步想要实现的是订阅(subscribe)turtle_teleop_key 所发出的 turtle1/cmd_vel 主题,其数据格式为 twist,而 RT-Thread 软件包 Micro_ROS 中就有相应例程:micro_ros_sub_twist.c,略加修改后作为我的线程即可(从表面上看十分简单)。

        为减小不确定性,这一步都没有考虑使用收到的信息控制小车,只是将收到的内容输出即可,重点是能在我的程序框架下运行此例程,实现和 ROS2 主机交互。

二、实施

        新线程命名为:microRosThread。

        总不能直接拷贝例程吧,所以第一步先将变量名个性化:

        再按我原来的方式创建线程:

        将原来示例中的初始化部分放在线程的开始部分,和原程序中其它线程一样,先完成各自的初始化,之后进入while(1)循环:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入之梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值