本人电子信息工程专业,致力于图像开发两年,因为现在导师要求做一个智能机器人,因此要从底层开始设计
也希望能给那些想要自己动手制作小车的朋友一点参考。
本文主要介绍ROS下使用rosserial和STM32(ST库)进行通信,移植网上各位大神的代码,实现自己想要的功能
- rosserial的详细介绍:http://wiki.ros.org/rosserial
- rosserial_client的介绍:http://wiki.ros.org/rosserial_client
- rosserial_client的教程程:http://wiki.ros.org/rosserial_client/Tutorials
- rosserial协议的介绍:http://wiki.ros.org/rosserial/Overview/Protocol
STM32工程中集成了ros_lib让STM32像arduino一样操作,让广大机友从写stm32解析器结点中解放出来。下面就来一一讲解:
一、工程目录
1是延时函数; 2是串口配置;3是定义写的数据类型;4是读的数据类型;5、6是ros_lib自带的无需修改;7则是把STM32串口和ros_lib结合起来的桥梁;
本文配置的串口是串口1波特率是57600,大家可以根据自己的实际需求来更改对应的串口即可,要保证配置好的串口是可以手发正常的;
下面看一下我写的配置:
当配置好这个了之后我们就可以开始主函数代码了:
引入自己写的头文件、F1的头文件和ROS的头文件
先定义一个nh、和我们要发布和订阅的主题名称。写法和我们在ubuntu上写ROS程序没有太大的差别
然后就是等待连接和进行订阅和发布:
然后我们在一个大循环中使用系统时钟进行主题的定时发布和订阅:
感觉使用这种方法的好处是不用一直去对串口数据进行处理,但是不好的就是速度没有直接使用串口那么快。
写好底盘的代码后我们在我们的Ubuntu(ROS系统)中使用:git clone https://github.com/ros-drivers/rosserial.git 下载rosserial的包然后使用catkin_make进行编译,编译完成后先运行roscore 然后再运行rosrun rosserial_python serial_node.py /dev/ttyUSB0
如果出现 "robot_Star Connected!"则说明连接成功。
附上我自己做的板子,支持大功率电机和电调两种控制,因为我自己的机子使用的是电调驱动的
工程代码下载:https://download.csdn.net/download/qq_36349536/10676733