4974|5

655

帖子

30

TA的资源

版主

楼主
 

25“万里”树莓派小车——纳姆轮控制 [复制链接]

        前面实现了使用手机对小车4个电机的控制,但是要让小车运动起来还是比较复杂。

纳姆轮特点

纳姆轮小车可以平向移动、旋转,也可以两者结合,也就是小车可以X轴Y轴和旋转轴任意的组合控制,X轴和Y轴指的是体坐标。当不旋转的时候,体坐标和地坐标是重合的。

纳姆轮运动控制

纳姆轮小车轮子运动情况与小车的运动示意图如下图所示。

        例如四个轮子都向前滚动,小车则向前行走。小车运动方式可以分解为三种基本方式:直行,平移和旋转。都是通过四个轮子的转动实现的,因此,可以得到一个小车运动方式和轮子转动之间的映射关系。关系如下:

       式中,Uw1,Uw2,Uw3,Uw4分别表示的是1234象限的轮子转速,Uty表示小车垂直方向的速度,Uty表示水平方向的速度,w表示小车的角速度,a,b表示小车的轮子间的长宽。

APP控制代码编写

将控制代码在APP中进行编写,APP只需要输出4个轮子的控制量。在之前的手机遥控电机转动基础上,添加摇杆与拖动条的联动,摇杆用来控制垂直和水平方向运动,拖动条用来转向,主要代码示例如下。

void mecanumRun(float xSpeed, float ySpeed, float aSpeed)
    {
        float maxLinearSpeed=100;
        float speed1 = ySpeed - xSpeed + aSpeed;
        float speed2 = ySpeed + xSpeed - aSpeed;
        float speed3 = ySpeed - xSpeed - aSpeed;
        float speed4 = ySpeed + xSpeed + aSpeed;
        float max = speed1;
        if (max < speed2)   max = speed2;
        if (max < speed3)   max = speed3;
        if (max < speed4)   max = speed4;
        if (max > maxLinearSpeed)
        {
            speed1 = speed1 / max * maxLinearSpeed;
            speed2 = speed2 / max * maxLinearSpeed;
            speed3 = speed3 / max * maxLinearSpeed;
            speed4 = speed4 / max * maxLinearSpeed;
        }
        mSeekBar_Wheel_1.setProgress((int)(speed1+100));
        mSeekBar_Wheel_2.setProgress((int)(speed2+100));
        mSeekBar_Wheel_3.setProgress((int)(speed3+100));
        mSeekBar_Wheel_4.setProgress((int)(speed4+100));
    }

实现的效果如下。

这样通过控制摇杆,就能解耦出四个电机的转速,从而能够控制小车的运动。

问题

这样控制看起来是可以直接开跑了,但是实际上还是存在一些问题的,比如减速电机存在一个很大的控制死区,假设满控制值是100,在40以下都不会开始转动,但是一旦转动起来,减速到40控制值,电机则是转动的。

还有另一个问题,如何让树莓派一开机就运行程序。

源码

GitHub

Gitee

此帖出自创意市集论坛

最新回复

过来学习的,涨姿势了,长见识了,谢谢楼主分析、分享。   详情 回复 发表于 2022-4-14 15:02
点赞 关注(1)
个人签名QQ:252669569
 
 

回复
举报

1万

帖子

2853

TA的资源

管理员

来自 2楼
 

"万里"树莓派小车汇总贴:

lb8820265的“万里”树莓派小车开源分享 - DIY/开源硬件专区 - 电子工程世界-论坛 (eeworld.com.cn)

 

目录:

 

“万里”树莓派小车开张贴 

1“万里”树莓派小车——建立项目仓库

2“万里”树莓派小车——python学习(Thonny的使用)

3“万里”树莓派小车——python学习(定时任务)

4“万里”树莓派小车——C++学习(编译与运行,geany使用)

5“万里”树莓派小车——wiringPi学习(延时与线程模拟定时器)

6“万里”树莓派小车——wiringPi学习(PWM与外部中断模拟定时器)

7“万里”树莓派小车——RPi.GPIO学习(PWM与外部中断模拟定时器)

8“万里”树莓派小车——socket学习(本机通讯)

9“万里”树莓派小车——socket学习(TCP两机通讯)

10“万里”树莓派小车——socket学习(UDP两机通讯)

11“万里”树莓派小车——socket学习(Android发送)

12“万里”树莓派小车——socket学习(Android收发)

13“万里”树莓派小车——配件准备

14“万里”树莓派小车——电机驱动学习

15“万里”树莓派小车——光电编码器学习(正反转的判断)

16“万里”树莓派小车——光电编码器学习(转速的获取)

17“万里”树莓派小车——VSCode学习(编译和调试)

18“万里”树莓派小车——Makefile学习

19“万里”树莓派小车——VSCode学习(多C文件链接调试)

20“万里”树莓派小车——电机控制学习(控制速度)

21“万里”树莓派小车——电机控制学习(4轮速度控制)
22“万里”树莓派小车——手机遥控电机转动

23“万里”树莓派小车——无屏幕连接树莓派

24“万里”树莓派小车——树莓派64位系统bullseye跑分测试

25“万里”树莓派小车——纳姆轮控制

26“万里”树莓派小车——程序开机启动

27“万里”树莓派小车——固定和获取树莓派IP地址

28“万里”树莓派小车——小车组装

29“万里”树莓派小车——直行偏向问题与新控制模式

30.“万里”树莓派小车——第一阶段完成展示(从零开始介绍)

此帖出自创意市集论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
个人签名玩板看这里:
https://bbs.eeworld.com.cn/elecplay.html
EEWorld测评频道众多好板等你来玩,还可以来频道许愿树许愿说说你想要玩的板子,我们都在努力为大家实现!
 
 
 

回复

1万

帖子

25

TA的资源

版主

板凳
 

纳姆轮很好玩,值得多研究

此帖出自创意市集论坛
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

4
 

纳姆轮很好玩,值得多研究

此帖出自创意市集论坛
 
 
 

回复

5263

帖子

239

TA的资源

管理员

5
 

汇总(已更25篇):lb8820265的“万里”树莓派小车开源分享

此帖出自创意市集论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

20

帖子

0

TA的资源

一粒金砂(中级)

6
 

过来学习的,涨姿势了,长见识了,谢谢楼主分析、分享。

此帖出自创意市集论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表