ros学习之modbus-rtu读写饲服电机数据

首先你得找到电机的端口号和波特率 ,然后声明句柄
部分代码(只写了一个电机的代码,第二个同理)

 modbus_t *mb=NULL;uint16_t mbbuf[10];//存放数据,可以根据你读取的数据字节,调节数组。std::string connection_port = "";int main(int argc, char **argv)
{ROS_INFO("scaning available port");bool is_connected = false;if(!(mb=modbus_new_rtu("/dev/ttyUSB0",19200,'N',8,1))) //声明modbus的句柄{if(modbus_set_slave(mb,1)==-1)//设置从机位置{modbus_free(mb);}if(modbus_connect(mb)==-1){modbus_free(mb);}modbus_set_response_timeout(mb,0,200000);//设置超时时间int m_en = modbus_write_register(mb,0,1);//modbus使能if(modbus_read_registers(mb,0,15,mbbuf)==1)//读取该地址中的数据。{connection_port = "/dev/ttyUSB0";is_connected = true;    }}if(!is_connected) {ROS_ERROR_STREAM("control borad connection failed");return -1;}ROS_INFO_STREAM("available prot: " << connection_port);ros::Publisher car_data_pub = nh.advertise<my_msgs::car_data>("car_data", 10);ros::Subscriber car_control_sub=nh.subscribe("car_cmd",10,twistCallback);
}

上面进行了modbus的通讯,接下来对电机进行读取

while (ros::ok()) {memset(mbbuf,0,10*2);//置零if(modbus_read_registers(mb,0,15,mbbuf)==1){loop_rate.sleep();translate_mb_data();//数据传输car_data_pub.publish(my_data);//发布节点}ros::spinOnce();}modbus_close(mb);modbus_free(mb);return 0;
//此函数在主函数(main)中一直循环

读取代码:

 void translate_mb_data(void){double sp1=0;sp1=(short)mbbuf[0];//数据转换my_data.speed[1]=sp1/RDC;//右轮,RDC是减速比}

写入代码:

 void twistCallback(const my_msgs::car_cmd & mycmd)//自己定义的消息类型{double speed[2];speed[0]=mycmd.speed[0];speed[1]=mycmd.speed[1];int motor_speed_a=0,motor_speed_b=0;motor_speed_a=speed[0]*RDC;//转化成电机的转速motor_speed_b=speed[1]*RDC;usleep(1000*10);//寄存器来不及写入  进行时间延长int res = modbus_write_register(mb,20000,motor_speed_b);//右轮usleep(1000*10);int res1 = modbus_write_register(mb1,20000,motor_speed_a);//左轮}

好了,这样小车就可以行走了。(记得/dev/ttyUSB0权限)。

ros学习之modbus读写饲服电机数据相关推荐

  1. 【ROS学习笔记】(八)服务数据的定义与使用

    一.目的 Client每Request一次数据请求,Server发送一次数据.数据格式为个人信息,如姓名.性别等. 二.自定义服务数据 此步骤与话题消息的定义与使用过程类似 1. 定义srv文件 再l ...

  2. ROS 学习系列-- 四轮机器人线性速率、角速度和电机PWM线性关系的定量分析

    ROS中的机器人导航需要底层轮子驱动十分精确的对行进的速率和角速度进行控制.本文根据大量的实验数据进行图形化分析,找出线性速率.角速度和电机PWM线性关系,并得出计算公式. 1. ROS导航机器人驱动 ...

  3. ROS学习笔记(八): ROS通信架构

    ROS学习笔记(八): ROS通信架构 文章目录 01 Node & Master 1.1 Node 1.2 Master 1.3 启动master和node 1.4 rosrun和rosno ...

  4. 随想录(ros学习笔记)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] ros,全称robot operating system.说它是操作系统,其实也不全对,因为它实 ...

  5. ROS学习笔记基础2(基础知识和ROS架构)

    ROS学习笔记1(基础知识和ROS架构) 文章目录 ROS学习笔记1(基础知识和ROS架构) 1. 什么是ROS 2. ROS和其他机器人平台有什么不同 3. ROS架构组成 3.1 文件系统级别 3 ...

  6. 【ros学习】14.urdf、xacro机器人建模与rviz、gazebo仿真详解

    一.起因 学校的这学期课程是ros机器人开发实战,我们学习小组也要搞一个自己的机器人模型,我们组又叫葫芦组,所以我就做了个葫芦形状的机器人,虽说有点丑,本来想用maya建模再导入的,奈何不太懂maya ...

  7. ROS学习(六)机器人系统设计

    ROS学习(六) 机器人系统设计 机器人的定义与组成 机器人系统构建 URDF机器人建模 机器人系统设计 查看指针中的具体成员变量 show turtlesim/Pose 机器人的定义与组成 执行机构 ...

  8. ROS学习汇总(3D摄像头)

    1.ros-摄像头usb_cam以及rviz显示 https://developer.orbbec.com.cn/forum_plate_module_details.html?id=1461 2.R ...

  9. ROS学习手记 - 2.1: Create and Build ROS Package 生成包(Python)

    ROS学习手记 - 2.1: Create and Build ROS Package 生成包(Python) ROS学习手记 - 2.1: Create and Build ROS Package ...

最新文章

  1. Windows Server中的故障转移群集的实现机制
  2. RecyclerView IndexOutOfBoundException
  3. 【Laravel】只保留Auth::routes()的登录,关闭Auth::routes()的注册、重置密码、验证路由
  4. 设计模式原则篇:(1)单一职责原则--Single Responsibility Principle
  5. formal method 2月23日第八课的内容!schema calculus!
  6. 【数据表间关联关系】 一对多、多对一、一对一、多对多
  7. 航海家辛巴达的故事(一)
  8. 触目惊心,北邮计算机学院女神居然每天看这些公众号
  9. workbench表头可以是中文_超简单:Python 5步去中国式报表表头
  10. Dependency Walker使用说明
  11. 2019年下半年教师资格幼儿园《综合素质》真题与参考答案
  12. 十年老码农,现场教你写简历!
  13. python教你如何把自己的微信变成机器人
  14. 转:感想东莞,想想东莞为外来工做了什么?
  15. 学习excel的使用技巧复制一列文本成新列去重
  16. 与世界对话丨预康可瘦品牌发布暨全国招商会隆重举行
  17. Oracle 10g Scheduler 特性
  18. 蓝桥杯2016年JavaB组省赛(代码+解析)
  19. 盛世昊通:中国汽车产业正在往国际化,往高处走
  20. Oracle12c安装出现Failed to Create oracle Oracle Home User的解决方案

热门文章

  1. 用计算机弹追梦人,新学期!你好,计算机追梦人
  2. android平台体系结构的层次划分,Android复习
  3. BZOJ P4554 [Tjoi2016Heoi2016]游戏
  4. 使用STM32CuBeMX生成代码失败
  5. 【Web前端二级导航栏】
  6. idea community社区版 运行springboot项目
  7. OpenCV与VS的版本对应关系
  8. java 操作pdf_java操作pdf
  9. ERROR TestContextManager:234 - Caught exception while allowing TestExecutionListener [org.springfram
  10. c++ hough变换代码_FPGA时序结构的LBT变换控制器设计