东东_dxGGN2 · 2022年12月08日 · 江苏

【GD32F427开发板试用】机器人操作系统ROS移植

软件使用的是STM32CubeIDE,所以配置、代码均是在这个IDE中完成的,我会把工程直接传上来,所以写的就简洁一点,部分配置或者说明可在上篇文章中查看。

先说明下,ROS是ROS1,运行平台是Ubuntu18.04,Ubuntu上配合的程序是rosserial,目前只测试了ROS的topic,且没有除开发板之外的实物,有需求可以自己拓展。

配置芯片使用的是STM32F427VIT6,需要配置RCC、SYS、TIM2、TIM9、USART1。时钟由于芯片不一致,所以先配置的120MHz,后期在代码中再修改为240M,定时器是直接用240M来配的;串口波特率57600,需要配置中断、DMA、上拉;TIM9是用来输出PWM的,模仿脉冲,当然电机驱动器通信方式多样,我均没有实施条件。

按照上面说明的配置完成后,下面来配置ROS部分。

-将ROS相关的文件夹拷贝到inc目录下(除软件生成的外均需复制)
image.png

-分别在inc和src目录下新建mainpp.h和mainpp.cpp,新建setup()和loop()函数并放到main.c中的init和死循环中。

-增加其他程序,下面一个是代码,一个是图片。

#include <mainpp.h>
#include <ros.h>
#include <std_msgs/String.h>
#include <std_msgs/Int16.h>
void command_callback(const std_msgs::String &rxbuff);
ros::NodeHandle nh;
std_msgs::String GD32_to_pc_word;
std_msgs::Int16 biu_biu;

ros::Subscriber<std_msgs::String> cmd_sub("pc_to_GD32",     command_callback);
ros::Publisher GD32_to_pc("GD32_to_pc", &GD32_to_pc_word);
ros::Publisher biu("biu", &biu_biu);

void command_callback(const std_msgs::String &rxbuff) {
    GD32_to_pc_word = rxbuff;
    GD32_to_pc.publish(&GD32_to_pc_word);
}
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) {
    nh.getHardware()->flush();
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
    nh.getHardware()->reset_rbuf();
}
void setup(void) {
    nh.initNode();
    nh.advertise(GD32_to_pc);
    nh.subscribe(cmd_sub);
    nh.advertise(biu);
    biu_biu.data = 0;
}
void loop(void) {
    HAL_Delay(1000);
    if(biu_biu.data<1000){
        biu.publish(&biu_biu);
        biu_biu.data++;
    }else{
        biu_biu.data=0;
    }
    nh.spinOnce();
}

image.png

-代码说明
--setup部分是初始化部分,即初始化节点、收发话题名称。
--loop部分是发布话题名称为biu的话题,话题格式是int16,且自增。
--其他则是收发话题定义和回调函数。
--图中没有PWM输出部分,在上传的代码中有。

-Ubuntu终端输入
--启动rosserial节点
--订阅话题rostopic echo /biu 和rostopic echo /GD32_to_pc,订阅后可以看到有输出了。
--发布话题命令rostopic pub -1 /pc_to_GD32 data:”[value]” ,[value]为任意字符串,发布后能看到/GD32_to_pc话题有输出且PWM有输出。

上面就算成功了,代码到如下百度网盘获取。
链接:https://pan.baidu.com/s/1xRbTcigkuTRD6ARwSA9C6Q
提取码:1hrp
--来自百度网盘超级会员V5的分享

注意事项:
1、移植编译过程中会出现错误或警告,我这边解决了,如果使用其他软件,不保证完全能用。
2、不能通过串口调试助手查看单片机发出的数据。
3、如果需要使用自定义的话题格式,可以按照提供的头文件来写,其中MD5这个一串字符,需要在Ubuntu上新建同样的格式,到rosmaster注册后运行get MD5命令来获取。

文件名 大小 下载次数 操作
ROS_Serial_test.zip 1.25MB 0 下载
推荐阅读
关注数
10708
内容数
187
中国高性能通用微控制器领域的领跑者兆易创新GD系列芯片技术专栏。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息