ROS之STM32来啦

mbed是ARM自己high的一个所谓IoT的平台, 甚至不惜做了一个巨难用的在线编译IDE, 蛋疼欲裂, 内个字体非常非常反人类, 唯一的解决办法是用chrome浏览器, 然后下一个叫mbedEditor++的插件, 修改编译器的代码字体, 不然你迟早要瞎.

OK, 进入正题, 我现在玩的ROS还是基于PC平台的, 如果要用PC来控制电机, 并收集电机的里程数据, 也就是说, 要将ROS跟模拟量之间连接起来, 有几个方案:

http://wiki.ros.org/rosserial:

用Aruino, 这个我玩过, 但是它的pwm只有255HZ, 这不是开玩笑么..

嵌入式Linux, 我只是用来驱动电机, 用嵌入式linux会不会太浪费了..

windows, 同上

mbed, 这个东西, 我在看那本印度哥们写的书的时候, 他就提到了mbed, 但是后来, 他自己做的机器人居然用的是下面这个:

tavic, 这个东西, 似乎是TI的一个launchpad board.

由于种种原因吧(其实是我只会搞STM32), 只能接受mbed的方案, 了解了一下大概概念, 意思是要用蛋疼的在线ide, 编译代码, 然后下载bin文件, 然后丢到指定的ST官方的开发板nucleo板子里面, 插usb就能跑啦.

首先, 去淘宝买一个F103/F40x的nucleo板子, 我只会F1,F0, 所以选择了F103RB, 大约100块包邮(其实挺黑的,成本他妈10块左右).

然后把一个helloworld代码, import到在线IDE:

https://developer.mbed.org/users/garyservin/code/ros_lib_indigo/

然后编译, 下载bin文件, 插了necleo的板子, bin文件拷进去, 重启, 就相当于烧录啦..

然后在ROS里面, 启动roscore, 再启动rosserial的节点:

$ rosrun rosserial_python serial_node.py /dev/ttyACM0

然后就用rostopic的命令echo一下chatter这个topic, 你就可以看到每秒钟输出的那句在STM32里面的hello world了.

其实我很想知道, 如果这玩意儿要移植, 从nucleo移植到自己的板子上, 应该接哪个口? 为啥我试了所有的口, 还都接了逻辑分析仪, 转不到包, 是不是这个通讯协议还得研究一下, 必须从ROS节点端发送点儿啥, 才能收到板子那边发过来的数据.

时间: 2024-07-30 22:12:30

ROS之STM32来啦的相关文章

ROS + STM32 + mbed

目前的进度是, 首先, 用mbed, 在stm32 f103RB nucleo板子上, 跑一个简单的publisher, 然后用usb连接到PC上的ROS. mbed的main.cpp: /* * rosserial Publisher Example * Prints "hello world!" */ /* * left_forward PC_0 * left_backward PC_3 * right_forward PC_2 * right_backward PC_1 * le

本科小白学ROS 和 SLAM(一):杂谈

本人最近才迷恋上ROS(Robot Operating System),准确的说应该是6月中旬,具体的记不清了(可能是年纪大了,容易健忘).对于一个电子DIY的狂热爱好者来说,我在校的梦想就是做一个属于自己的一个高大上的机器人.近几年机器学习,人工智能那是相当火啊,尤其是在央视春晚播了机器人之后,可以说中国的机器人产业是爆发式的增长(核心技术都是国外的,像芯片,算法之类的还是老外的). 先介绍一下自己的情况吧,本人现在已经大三了,主修的是自动化(在广东的一所二本工科学校).在刚上大学的时候,内心

ROS+mbed

试了一下, 用stm32F103RB nucleo的板子, 跑mbed, 跟ros的库, 发布一个std_msg/String, 为什么不直接发布里程? 因为经常报message比buffer大的错误. 没办法, 只好先用stm32通过串口, 发布有用的x, y, 跟yaw值, string格式, 然后ROS端起一个节点去解析string, 转成里程跟tf. stm32端: /* * rosserial Publisher Example * Prints "hello world!"

Ubuntu 系统下安装gcc-arm-none-eabi编译STM32工程

在使用rikirobot机器人做ROS下的导航实验是,粗心大意将底层控制板烧坏,买了个新的电路板重新开始.在编译商家各处的STM32源代码时,Ubunt下总是出现了/arm-none-eabi-gcc/bin/ld:cannot find -lstdc++的错误,这是一个链接错误,使用arm-none-eabi-gcc编译器时总是连接不到libstdc++.首先尝试使用网上给出的一种方法,原因认为是在64位系统下编译32位的工程需要把32位的库包含进来,使用如下命令 1 sudo apt-get

第四天:SLAM智能小车DIY乐趣-小车控制ROS驱动包开发

小车控制ROS驱动包开发 ####写在前面#### 对于做纯SLAM算法和应用功能开发的朋友来说,其实不需要搞明白小车的底层硬件原理和软件实现等繁琐的细节,只需要通过上层API调用来实现小车的控制等操作就可以了.因此,本文开始讲解用于提供上层API调用的ROS驱动包,本文主要内容: 1) 通信协议简介(stm32与ROS驱动包通信) 2) ROS接口(topic订阅与发布) 3) ROS驱动包程序解析 4) 基于航迹推演的里程计解算 ####正文#### 1.通信协议简介(stm32与ROS驱动

SLAM+语音机器人DIY系列:(四)差分底盘设计——2.stm32主控软件设计

摘要 运动底盘是移动机器人的重要组成部分,不像激光雷达.IMU.麦克风.音响.摄像头这些通用部件可以直接买到,很难买到通用的底盘.一方面是因为底盘的尺寸结构和参数是要与具体机器人匹配的:另一方面是因为底盘包含软硬件整套解决方案,是很多机器人公司的核心技术,一般不会随便公开.出于强烈的求知欲与学习热情,我想自己DIY一整套两轮差分底盘,并且将完整的设计过程公开出去供大家学习.说干就干,本章节主要内容: 1.stm32主控硬件设计 2.stm32主控软件设计 3.底盘通信协议 4.底盘ROS驱动开发

Linux下开发STM32板

Linux下开发STM32板 目录 Linux下开发STM32板 全流程 第一步:STM32Cube安装 第二步:依赖包安装 2.1 Oracle Java 8的安装与使用 2.2 libusb-1.0-0-dev安装 2.3 交叉编译器安装 2.x STM32CubeMX运行环境 2.End 第三步:stlink驱动安装 第四步:开始测试 4.1 STM32CubeMX生成代码 4.2 编译代码 4.3 烧写程序 4.3.1 ST-link固件升级 4.3.2 板子连接 4.3.3程序烧录 使

8个节点,每个节点上布置6个ROS,组装都用250,读出都用251,事例率为645.3Hz

组装都用250网段,读出都用251网段.除了黄色部分以外的节点都是cmm03节点. 平均事例率为:645.26Hz, ros所在节点的cpu idle 为17%.

关于STM32 __IO 的变量定义

这个_IO 是指静态 这个 _IO 是指静态 volatile uint32_t 是指32位的无符号整形变量uint32_t 是指32位的无符号整形变量: 搞stm32这么久了,经常看到stm32里面库文件里面有用"_IO"定义的变量,查过一下当时记住了,过段时间又给忘记了.所以才特意的写一个博文来记住. volatile volatile 类型是这样的,其数据确实可能在未知的情况下发生变化.比如,硬件设备的终端更改了它,现在硬件设备往往也有自己的私有内存地址,比如显存,他们一般是通过