打印
[研电赛技术支持]

机器人操作系统ROS移植

[复制链接]
1253|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-4-8 09:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
软件使用的是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目录下(除软件生成的外均需复制)



-分别在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();
}




-代码说明
–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命令来获取。
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_47569031/article/details/129022630

使用特权

评论回复
沙发
烟雨蒙蒙520| | 2024-7-31 22:56 | 只看该作者
HAL_UART_TxCpltCallback: 确保在完成 UART 传输后正确调用 flush()。
HAL_UART_RxCpltCallback: 确保在 UART 接收完成后正确重置接收缓冲区(reset_rbuf())。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2028

主题

15903

帖子

13

粉丝