TC264—麦克纳姆轮轮式里程计笔记

脉冲和距离关系

每米编码器脉冲数ODOMETER_EST_PULSE_PER_METER,需要根据每转编码器脉冲数以及轮子的直径来确定,公式如下:
每米编码器脉冲数=每转编码器脉冲数/(π×轮子直径)=512/(Π*0.061m)=2,671.7
1脉冲=3.74e-4m=0.000374m
注:轮子直径单位为米

麦克纳姆轮:

O-长方形:轮子转动可以产生 yaw 轴转动力矩,而且转动力矩的力臂也比较长。是最常见的安装方式。
O-长方形:轮子转动可以产生 yaw 轴转动力矩,而且转动力矩的力臂也比较长。是最常见的安装方式。
先试图构建逆运动学模型,由于麦轮底盘的数学模型比较复杂,我们在此分四步进行:

①将底盘的运动分解为三个独立变量来描述;

②根据第一步的结果,计算出每个轮子轴心位置的速度;

③根据第二步的结果,计算出每个轮子与地面接触的辊子的速度;

④根据第三部的结果,计算出轮子的真实转速。
在这里插入图片描述
在这里插入图片描述
编码器、电机:左前:1 右前:2 右后:3 左后:4
合成路程:(前、右、顺时针为正方向、水平为X、竖直为Y)
Motor_1:X轴:Motor_1/1.414 Y轴:Motor_1/1.414
Motor_2:X轴:-Motor_2/1.414 Y轴:Motor_2/1.414
Motor_3:X轴:Motor_3/1.414 Y轴:Motor_3/1.414
Motor_4:X轴:-Motor_4/1.414 Y轴:Motor_4/1.414
注:轮y轴前进方向和轮子转动方向相同

X=(Motor_1-Motor_2+Motor_3-Motor_4)/1.414=((1+3)-(2+4))/1.414
Y=(Motor_1+Motor_2+Motor_3+Motor_4)/1.414=((1+3)+(2+4))/1.414

Motor_1+Motor_3=(X+Y)*0.707
Motor_2+Motor_4=(Y-X)*0.707
四个轮子转速相同,则
Motor_1==(X+Y)*0.3535
Motor_2==(Y-X)*0.3535
Motor_3==(X+Y)*0.3535
Motor_4==(Y-X)*0.3535

参考1:http://www.chenjianqu.com/show-27.html
2:http://www.cad2d3d.com/post-993.html

由于你没有提供更具体的信息,我不能提供完整的代码。但是,我可以提供一些基于 TC264 MCU 的磁力计校准的思路和步骤。 1. 配置 TC264 的 IO 口为 SPI 接口,读取磁力计芯片的数据。 2. 将读取到的磁力计数据进行校准,计算出偏移量和比例因子,使得磁力计数据更加准确。 3. 将计算出的偏移量和比例因子保存在 TC264 内部的存储器中,以便后续使用。 4. 在实际应用中,读取磁力计数据时,需要减去偏移量,并乘以比例因子,得到真实的磁场强度值。 下面是一个简单的磁力计校准代码示例: ```c #include "tc264.h" #define MAG_OFFSET_X 100.0f #define MAG_OFFSET_Y -50.0f #define MAG_OFFSET_Z 80.0f #define MAG_SCALE_X 1.2f #define MAG_SCALE_Y 1.1f #define MAG_SCALE_Z 0.9f void calibrate_mag(float *mx, float *my, float *mz) { // read raw magnetometer data from SPI interface float raw_x = spi_read_mag_x(); float raw_y = spi_read_mag_y(); float raw_z = spi_read_mag_z(); // apply calibration parameters to raw data *mx = (raw_x - MAG_OFFSET_X) * MAG_SCALE_X; *my = (raw_y - MAG_OFFSET_Y) * MAG_SCALE_Y; *mz = (raw_z - MAG_OFFSET_Z) * MAG_SCALE_Z; // save calibration parameters to internal memory flash_write_mag_calib_params(MAG_OFFSET_X, MAG_OFFSET_Y, MAG_OFFSET_Z, MAG_SCALE_X, MAG_SCALE_Y, MAG_SCALE_Z); } float spi_read_mag_x(void) { // TODO: implement SPI read function for magnetometer X-axis data } float spi_read_mag_y(void) { // TODO: implement SPI read function for magnetometer Y-axis data } float spi_read_mag_z(void) { // TODO: implement SPI read function for magnetometer Z-axis data } void flash_write_mag_calib_params(float off_x, float off_y, float off_z, float scale_x, float scale_y, float scale_z) { // TODO: implement flash write function to save calibration parameters } ``` 注意:上述代码只是一个示例,实际的实现可能需要根据具体的硬件平台和磁力计型号进行适当的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值