ROS stm32 CAN通信

文章目录

    • 运行环境:
    • 原理
    • 1.1 ros中的代码
      • 1)socketcan_bridge
      • 2)测试的ros-python包
      • 3)keil5中数据解析
      • 4)USB-CAN连接
      • 5)启动指令

运行环境:

ubuntu18.04.melodic
STM32:DJI Robomaster C板
ROS:18.04
硬件:USB-CAN(选支持Linux驱动的)
在这里插入图片描述

原理

1.1 ros中的代码

1)socketcan_bridge

http://wiki.ros.org/socketcan_bridge

主要利用socketcan_bridge_node节点,相当于ros和stm32桥梁作用

在这里插入图片描述

原理解释:
Subscribed Topics
sent_messages (can_msgs/Frame)
它可以监听话题为sent_messages,消息类型为can_msgs/Frame的数据原理解释:
Published Topics
received_messages (can_msgs/Frame)
将监听到的sent_messages话题,消息类型为can_msgs/Frame的数据发送到can总线上(以便stm32的can回调函数接收can数据)

2)测试的ros-python包

写一个python包。发布话题为sent_messages,消息类型为can_msgs/Frame的数据

注意标识符要和stm32的一样,这里都是设置成0x208msg.id = 0x208msg.dlc = 8  # 数据字段的大小,单位是字节msg.is_error = Falsemsg.is_rtr = Falsemsg.is_extended = False

再到stm32中的can回调函数解析这里的数据
data_to_send = [0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03]
如果要获取第一个数据,就data[0]这样,就可以得到0x01的值,也就算十进制的1, 我这里只是解析一位来控制电机转动

在这里插入图片描述
详细代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import rospy
from can_msgs.msg import Frame
import structdef send_can_frame():# 初始化 ROS 节点rospy.init_node('can_frame_sender', anonymous=True)# 创建一个发布者,发布 can_msgs/Frame 类型的消息到目标 ROS 话题pub = rospy.Publisher('/sent_messages', Frame, queue_size=10)# 设置循环速率,这里设为 10Hz,根据需求可以调整rate = rospy.Rate(10)while not rospy.is_shutdown():# 创建一个 can_msgs/Frame 类型的消息msg = Frame()# 设置 can::Frame 对象的属性,这里以设置标识符为 0x205 为例msg.id = 0x208msg.dlc = 8  # 数据字段的大小,单位是字节msg.is_error = Falsemsg.is_rtr = Falsemsg.is_extended = False# 只解析第一位# data_to_send = [0x04,0x03,0x03,0x03,0x03,0x03,0x03,0x03]data_to_send = [0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03]# 将要发送的数据赋值给 msg.datamsg.data = data_to_send# 发布消息到 ROS 话题pub.publish(msg)# 等待指定的循环速率rate.sleep()# 打印成功发布的提醒消息rospy.loginfo("Successfully published CAN frame with ID 0x208")if __name__ == '__main__':try:send_can_frame()except rospy.ROSInterruptException:pass

在这里插入图片描述

在这里插入图片描述

3)keil5中数据解析

rx_data[0]解析得是ros发布得数据 data_to_send = [0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x03],也就是得到十进制得0x01,代表数字1。

void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{// 定义CAN消息的头部和数据CAN_RxHeaderTypeDef rx_header;uint8_t rx_data[8];// 检查CAN总线实例是否为CAN1if (hcan->Instance == CAN1){// 获取CAN消息的头部信息和数据HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &rx_header, rx_data); // rx_data接收CAN总线上发送来的数据,不同的位代表不同的信息// 根据接收到的消息的标准帧ID执行相应的处理switch (rx_header.StdId) //如果接收的rx_header.StdId值等于0x205,则接收can发送过来的数据。可以设置ros发送的can标识符为为0x208 (ros如何发送信息到can中){case 0x205: // 如果标准帧ID为0x205{// 解析接收到的数据,并存储到相应的数据结构中motor_yaw_info.rotor_angle = ((rx_data[0] << 8) | rx_data[1]);motor_yaw_info.rotor_speed = ((rx_data[2] << 8) | rx_data[3]);motor_yaw_info.torque_current = ((rx_data[4] << 8) | rx_data[5]);motor_yaw_info.temp = rx_data[6];	break;}case 0x208: {// 处理接收到的 target_yaw_angle 数据uint8_t received_target_yaw_angle = rx_data[0];  // 假设 target_yaw_angle 在数据的第一个字节// 在这里添加处理 received_target_yaw_angle 的代码target_yaw_angle =  received_target_yaw_angle;break;}}}
}

4)USB-CAN连接

# 安装gs_usb 内核模块
sudo modprobe gs_usb
# 插入USB-CAN后执行下面步骤:查看can设备
ifconfig -a# 设置波特率100M(can设备参数)-和stm32cubemx can配置的波特率一样
sudo ip link set can0 up type can bitrate 1000000捕捉can信号
candump can0 

在这里插入图片描述
在这里插入图片描述

5)启动指令

#启动socketcan_bridge_node.cpp节点
roscoreduduzai@duduzai:~/Downloads/ros_can_ws$ source ./devel/setup.bashduduzai@duduzai:~/Downloads/ros_can_ws$ rosrun socketcan_bridge socketcan_bridge_node
#启动python包
duduzai@duduzai:~/Downloads/target_yaw_angle_ws/src/target_yaw_angle/scripts$ chmod +x target_yaw_angle_pub.pyduduzai@duduzai:~/Downloads/target_yaw_angle_ws$ source ./devel/setup.bashduduzai@duduzai:~/Downloads/target_yaw_angle_ws$ rosrun target_yaw_angle target_yaw_angle_pub.py

⭐⭐⭐ 嘟嘟崽 ⭐⭐⭐
⭐⭐⭐ 祝你成功 ⭐⭐⭐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/194018.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 Amazon EKS 搭建开源向量数据库 Milvus

一、前言 生成式 AI&#xff08;Generative AI&#xff09;的火爆引发了广泛的关注&#xff0c;也彻底点燃了向量数据库&#xff08;Vector Database&#xff09;市场&#xff0c;众多的向量数据库产品开始真正出圈&#xff0c;走进大众的视野。 根据 IDC 的预测&#xff0c;…

入门后端开发得学什么?这份超详细的后端开发学习路线图值得推荐!

后端开发, 无疑是一个极为关键的领域&#xff0c;涉及到我们每日互联网生活的每个细节。每当你在网上浏览、搜索或进行购物等活动时&#xff0c;背后都有大量的后端技术作为支撑。而随着技术的日益进步&#xff0c;人们对于高效、稳定和安全的网络服务的需求也越来越高。 另一…

Docker-minio部署

1.创建目录 创建文件目录&#xff0c;用来存放配置和上传文件目录 &#xff08;1&#xff09;Minio 外部挂载的配置文件(/mydata/minio/config) &#xff08;2&#xff09;存储上传文件的目录(/mydata/minio/data) mkdir -p /home/minio/config mkdir -p /home/minio/data2.拉…

解决计算机丢失msvcr71.dll问题,总结5种解决方法分享

由于各种原因&#xff0c;计算机在使用的过程中可能会出现一些问题&#xff0c;其中之一就是丢失msvcr71.dll文件。这个问题可能会导致计算机无法正常运行某些程序或功能&#xff0c;给我们的生活和工作带来困扰。那么&#xff0c;当我们遇到这个问题时&#xff0c;应该如何解决…

微星迫击炮b660m使用intel arc a750/770显卡功耗优化方法

bios 优化: 1,开机后持续点击“delete”键直到进入微星bios。 2,点击右上角选择我们熟悉的中文。 3,点击Settings--->高级---> pcie/Pci子系统设置 4,Native PCIE Enable : Enabled Native Aspm:允许

2—10岁女童羽绒服,黑色长款也太好看了吧

冬天怎么能没有一件暖呼呼的羽绒服呢&#xff1f; 黑色长款羽绒服也赞了吧 大长款连帽&#xff0c;防风保暖设计 时尚与美观度都兼具呢&#xff01;好穿又耐穿&#xff01;

【EI会议征稿】第三届区块链、信息技术与智慧金融国际学术会议 (ICBIS2024)

第三届区块链、信息技术与智慧金融国际学术会议 (ICBIS2024) The 3rd International Academic Conference on Blockchain, Information Technology and Smart Finance 第三届区块链、信息技术与智慧金融国际学术会议 (ICBIS2024) 将于2024年2月23-25日在马来西亚举行。本次会…

【计算机网络笔记】DHCP协议

系列文章目录 什么是计算机网络&#xff1f; 什么是网络协议&#xff1f; 计算机网络的结构 数据交换之电路交换 数据交换之报文交换和分组交换 分组交换 vs 电路交换 计算机网络性能&#xff08;1&#xff09;——速率、带宽、延迟 计算机网络性能&#xff08;2&#xff09;…

关于400G光模块的常见问题解答

最近在后台收到了很多用户咨询关于400G光模块的信息&#xff0c;那400G光模块作为当下主流的光模块类型&#xff0c;有哪些问题是备受关注的呢&#xff1f;下面来看看小易的详细解答&#xff01; 1、什么是400G QSFP-DD光模块&#xff1f; 答&#xff1a;400G光模块是指传输速…

三、Eureka注册中心

目录 一、作用及调用方式 二、搭建eureka注册中心 三、注册user-service和order-service 四、新增实例 五、服务拉取 六、总结 一、作用及调用方式 在服务提供者启动时&#xff0c;它会向eureka注册中心提供自己的信息&#xff0c;并每30秒进行一次刷新eureka注册中心保存…

bat随手记

目录 bat批处理常用命令查询有哪些reg命令&#xff0c;帮助信息——reg /?查询注册表信息——reg query /?切换到批处理文件目录——cd /d "%~dp0"永久设置环境变量——setx命令设置注册表内容——/v名称&#xff0c;/t类型&#xff0c;/d数据%cd%和%~dp0的区别/f没…

数据库测试的认知和分类详解

现在的软件系统&#xff0c;尤其是业务应用系统&#xff0c;后台都连接着一个数据库。数据库中存储了大量的数据&#xff0c;数据库的设计是否合理和完善&#xff0c;SQL语句编写是否正确、高效&#xff0c;都直接影响了一个软件系统的功能正确性和性能表现。今天跟大家分享一些…

metinfo 6.0.0 任意文件读取漏洞复现

metinfo 6.0.0 任意文件读取漏洞复现 漏洞环境 环境为mrtinfo 6.0.0 漏洞存在的位置 通过代码审计发现在源代码的/app/system/include/module/old_thumb.class.php这个位置有着任意读取文件漏洞 漏洞点:http://127.0.0.1/metinfo_6.0.0//include/thumb.php 漏洞复现 访…

efcore反向共工程,单元测试

1.安装efcore需要的nuget <PackageReference Include"Microsoft.EntityFrameworkCore" Version"6.0.24" /> <PackageReference Include"Microsoft.EntityFrameworkCore.SqlServer" Version"6.0.24" /> <PackageRefere…

Docker-compose 下载安装测试完成

源文件-http://t.csdnimg.cn/7NxHchttp://t.csdnimg.cn/7NxHc 1 docker-compose说明 Docker Compose 是Docker的组装工具&#xff0c;用于创建和调试多个Docker容器&#xff0c;并在同一个Docker主机上运行它们。Docker Compose基于YAML文件&#xff0c;描述多个容器之间的相…

香港科技大学广州|机器人与自主系统学域博士招生宣讲会—电子科技大学专场!!!(暨全额奖学金政策)

在机器人和自主系统领域实现全球卓越—机器人与自主系统学域 硬核科研实验室&#xff0c;浓厚创新产学研氛围&#xff01; 教授亲临现场&#xff0c;面对面答疑解惑助攻申请&#xff01; 一经录取&#xff0c;享全额奖学金1.5万/月&#xff01; &#x1f559;时间&#xff1a;…

【从删库到跑路】MySQL数据库 | 全局锁 | 表级锁 | 行级锁

文章目录 &#x1f339;简述&#x1f384;全局锁⭐数据备份&#x1f388;设置全局锁&#x1f388;对表进行备份&#x1f388;释放锁 &#x1f384;表级锁&#x1f6f8;表锁⭐读锁⭐写锁 &#x1f6f8;元数据锁&#x1f6f8;意向锁⭐意向共享锁⭐意向排他锁 &#x1f384;行级锁…

有大量虾皮买家号想防关联该怎么做?

Shopee平台规定一个买家只能拥有一个买家号&#xff0c;如果一台电脑或者一个手机同时登录好几个买家号&#xff0c;那么很有可能就会关联封号的。那么有大量虾皮买家号想防关联该怎么做&#xff1f; 如果想要运用大量的shopee买家号来操作&#xff0c;那么需要使用有防指纹技术…

Navicat Premium 16,无限重置试用14天

打开注册表编辑器 红箭头所指方向每个系统判别不一样 如何判别呢&#xff1f;一个个点开看底下是不是info&#xff0c;如果是那么把info文件夹删掉就可以了。

PMP项目管理考试的知识点概述

人 - 重点强调与有效领导项目团队相关的技能和活动。考试内容主要涵盖敏捷实践管理&#xff0c;考题占比较大。 过程 - 加强项目管理的技术领域&#xff1b;主要涵盖《PMBOK第6版》&#xff0c;考试试题占比约为50%。《PMBOK第6版》考试内容大约有90道题。 业务环境 - 突出项…