实现基础:1、上位机、下位机通讯;2、ROS读取前轮转角传感器速度
上位机系统Ubuntu 20.04与下位机arduino UNO通讯_可见一班的博客-CSDN博客
读取拉线位移传感器(RS485协议)的ROS驱动包_可见一班的博客-CSDN博客
方案一:判断了旋转方向就向下位机发布指令,可以实现转向,但是会出现咯噔咯噔的卡顿现象,因为下位机接收到了指令频率太高了。
方案二:在上个方案的基础上增加判断条件,也就是电机工作状态量,用大小为2的队列实现。核心代码如下,需结合前两篇博客使用:
queue<int> q;
int windowSize = 2; // 滤波窗口大小(可以根据自己需要改)
//回调函数包括:
if(q.size()<2){
key_c.data = q.back();
key_publisher.publish(key_c);
ROS_INFO("First!");
}
else
{
int diff = q.back() - q.front();
if (diff != 0){
key_c.data = q.back();
key_publisher.publish(key_c);
ROS_INFO("state change!");
}
}
//主函数:
int main(int argc, char **argv)
{
ros::init(argc, argv, "steer_control");
ros::NodeHandle nh;
key_publisher = nh.advertise<std_msgs::UInt16>("key_command", 10);
laxian_sub = nh.subscribe("/steering_angle", 10, steer_callback);
ros::spin();
return 0;
}
参考:文章来源:https://www.toymoban.com/news/detail-543512.html
ROS里在回调函数里获取前后两帧(多帧)数据的差值_辉——书生意气的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-543512.html
到了这里,关于上位机(Ubuntu)与下位机(Arduino)通讯控制机器人前轮转角的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!