在ROS中通过Arduino实现对4WD轮式机器人的简单控制

三种常见的移动底盘运动学模型分析 对四轮差速小车、麦克纳姆轮小车以及两轮差速小车运动学模型的学习总结。 阅读详情

本文涉及的内容都是针对四轮小车的,如果你的是两轮或者其他形式的小车,请参考其他文章。当然如果你感兴趣的话,本文也有一定的参考价值。另外,本文的内容仅供参考,如有错误,望各位不吝赐教。

目录

运动学分析

在用代码实现之前,我们最好先简单了解一下相关的原理。这种4WD轮式机器人准确的说是采用所谓”滑动控制“(Skid-steer Drive),这是一种类似于差速控制(Differential Drive)的运动方式。

NOTE:具体可以参考我的相关博文:机器人差速驱动方式(Differential Drive)和 机器人滑动转向驱动方式(Skid-steer Drive)。

参考阿克曼(Ackerman)转向几何学原理,即在汽车转向时4个轮胎都近似围绕一个中心点旋转以保证汽车的行驶稳定性,但是由于四轮差速转向小车没有转向机构,很难保证这一点,而且,小车转向时很容易和地面发生滑移。把汽车的形心作为质心,并且忽略路面情况变化等的影响,可得出四轮差速转向小车的运动学模型如下图所示。

小车运动学模型

在该图中 α1 、 α2 分别为前左轮和后左轮,前右轮和后右轮的转角; 2L 为左右轮距离; 2K 为前后轮轴距; v 和w分别为车子质心的线速度和角速度, V1 , V2 , V3 , V4 分别为各个轮中心的实际运动方向。
根据上图可以得出各速度的和转动角度的关系:

V1=w⋅R1=w⋅Ksinα1

V2=w⋅R2=w⋅Ksinα2

V3=V1=w⋅Ksinα1

V4=V2=w⋅Ksinα2

由公式 Vy=V⋅cosα 可得:

V1y=V1cosα1=w⋅Ktanα1=w(R−L)

V2y=V2cosα2=w⋅Ktanα2=w(R+L)

V3y=V3cosα1=w⋅Ktanα1=w(R−L)

V4y=V4cosα2=w⋅Ktanα2=w(R+L)

式中, R=vw 。
则电机的角速度为:
wn=Vny⋅ir,n=1,2,3,4

式中, i 为电动机的减速比,r为车轮的半径。电机的转速可以根据 n=w2π 得到。

计算车轮转速

在明白了转向原理之后,我们可以根据实际小车的尺寸算出我们要的数据。我使用的小车的各项参数如下:

  • 前后轮轴距 2K=168mm
  • 左右轮距离 2L=266mm
  • 车轮直径 r=130
  • 电动机减速比 1:30
    在这里我们需要各个轮子的转速,我们指定小车转向的角速度 w 为5rad/s,转向半径 R 为100mm。由上面的公式便可得出各个轮子的转速:
    n1=n3=18.3m/s

    n2=n4=116.1m/s

代码实现

首先我们要包含所需要的头文件:

#include <AFMotor.h>
#include <ros.h>
#include <geometry_msgs/Twist.h>

其中AFMotor.h驱动电动机驱动板(我所用的是L293D)的头文件,另外两个请参考ROS的wiki文档。

//setting each motor
AF_DCMotor rightFront(3);
AF_DCMotor leftFront(4);
AF_DCMotor leftBack(1);
AF_DCMotor rightBack(2);

设置每个电机在驱动板上对应的接口。

//x轴方向的速度
double lin_vel = 0.0;
//y轴方向的速度
double ang_vel = 0.0;
int cmd_ctrl = 0;
//注册ROS节点
ros::NodeHandle nh;
//回调函数
void motor_cb(const geometry_msgs::Twist& vel)
{
  lin_vel = vel.linear.x;
  ang_vel = vel.angular.z;
  cmd_ctrl = 1 * lin_vel + 3 * ang_vel;
}
//设置订阅的消息类型和发布的主题
ros::Subscriber<geometry_msgs::Twist> sub("/turtle1/cmd_vel", motor_cb);

这一部分的作用主要是订阅相关的控制消息。

void setup() {
  nh.initNode();
  nh.subscribe(sub);
  // Turn on all 4 motors
  rightFront.setSpeed(200);
  rightFront.run(RELEASE);
  leftFront.setSpeed(200);
  leftFront.run(RELEASE);
  leftBack.setSpeed(200);
  leftBack.run(RELEASE);
  rightBack.setSpeed(200);
  rightBack.run(RELEASE);
}

初始化节点、车轮速度等。

void loop() {
  nh.spinOnce();

  switch (cmd_ctrl)
  {
   case 2: 
  {
    Serial.print("Go Forward!\n");
    //delay(1000);
    rightFront.setSpeed(116);
    leftFront.setSpeed(116);
    leftBack.setSpeed(116);
    rightBack.setSpeed(116);
    rightFront.run(FORWARD);
    leftFront.run(FORWARD);
    leftBack.run(FORWARD);
    rightBack.run(FORWARD);
    delay(1000);
    rightFront.run(RELEASE);
    leftFront.run(RELEASE);
    leftBack.run(RELEASE);
    rightBack.run(RELEASE);
    break;
  }
  case -2:
  {
    Serial.print("Go Backward!\n");
    //delay(1000);
    rightFront.setSpeed(116);
    leftFront.setSpeed(116);
    leftBack.setSpeed(116);
    rightBack.setSpeed(116);
    rightFront.run(BACKWARD);
    leftFront.run(BACKWARD);
    leftBack.run(BACKWARD);
    rightBack.run(BACKWARD);
    delay(1000);
    rightFront.run(RELEASE);
    rightBack.run(RELEASE);
    leftFront.run(RELEASE);
    leftBack.run(RELEASE);
    break;
  }
  case 6:
  {
    Serial.print("Turn Left!\n");
    //delay(1000);
    rightFront.setSpeed(116);
    rightFront.run(FORWARD);
    rightBack.setSpeed(116);
    rightBack.run(FORWARD);
    leftFront.setSpeed(18);
    leftFront.run(BACKWARD);
    leftBack.setSpeed(18);
    leftBack.run(BACKWARD);
    delay(1000);
    rightFront.run(RELEASE);
    rightBack.run(RELEASE);
    leftFront.run(RELEASE);
    leftBack.run(RELEASE);
    break;
  }
  case -6:
  {
    Serial.print("Turn Right!");
    //delay(1000);
    rightFront.setSpeed(18);
    rightFront.run(BACKWARD);
    rightBack.setSpeed(18);
    rightBack.run(BACKWARD);
    leftFront.setSpeed(116);
    leftFront.run(FORWARD);
    leftBack.setSpeed(116);
    leftBack.run(FORWARD);
    delay(1000);
    rightFront.run(RELEASE);
    rightBack.run(RELEASE);
    leftFront.run(RELEASE);
    leftBack.run(RELEASE);
    break;
  }
  default:
  {
    //delay(1000);
    rightFront.run(RELEASE);
    rightBack.run(RELEASE);
    leftFront.run(RELEASE);
    leftBack.run(RELEASE);
    delay(1000);    
    break;
  }
}
    rightFront.run(RELEASE);
    rightBack.run(RELEASE);
    leftFront.run(RELEASE);
    leftBack.run(RELEASE);
    cmd_ctrl = 0;
}

当接收到右转消息时,内轮速度设为18,外轮速度设置为116;左转同理。

硬件连接

将电机驱动板L293D和Arduino板的相应接口(数字一一对应)通过杜邦线连接起来,具体针脚连接方式如下:

如果只想使用直流/步进电机应该连接以下引脚:

  • 数字端口11:直流电机#1/步进#1(PWM)
  • 数字端口 3:直流电机#2/步进#1(PWM)
  • 数字端口 5:直流电机#3/步进#2(PWM)
  • 数字端口 6:直流电机#4/步进#2(PWM)

如果要控制直流/步进电机应该增加以下引脚:

  • 数字引脚4:DIR CLK触发
  • 数字引脚7:DIR EN指令的允许端EN
  • 数字引脚8:DIR SER
  • 数字引脚12:DIR ATCH中断连接

另外,GND、5V引脚必须也要连接,否则的话就无法稳定地控制直流电动机。

具体接线图如下所示:

circuit

NOTE:当然如果你的Arduino上不连接其他传感器的话,你可以直接将L293D直接”骑“到Arduino板子上,即所有对应的引脚都连接起来,这种方法比较简单但是所有的引脚都被占用了。

测试你的代码

首先在你的Arduino编译并上传写好的代码,然后运行下面的命令以指定串口来连接Arduino板。
note:在运行节点之前别忘了启动节点管理器(roscore)。

rosrun rosserial_python serial_node.py /dev/ttyACM0

最后一个参数要根据你在Arduino IDE中选择的串口而定,这里我们使用的是ACM0。
接着运行:

rosrun turtlesim turtle_teleop_key

使用方向键你就可以自由地控制你的机器人了。

后记

本文只是介绍实现对差速轮式机器人的简单控制,无法实现精准的控制。如要更深入的学习请参考ROS的官方wiki。本文中的示例代码可以在这里下载。

参考资料

  1. 杨俊驹,林睿,等.轮式移动机器人运动控制系统研究与设计[J].苏州大学:现代电子技术,2016,39(2):23-27.
  2. ROS Wiki: rosserial_arduino Tutorials
  3. adafruit.com: Using DC Motors

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

移动机器人底盘-四轮差速模型(四轮独立) 对于底盘的前轮和后轮来说,其速度是同步的,那么在理想条件下,可以将底盘运动视为以ICR为圆心做圆周运动,对于四个轮子来说,圆周运动的角速度是一致的,圆周运动圆心ICR始终位于底盘几何中心COG的y轴延长线上,ICR与COG之间的距离。有关,整个底盘的速度位于速度瞬心COM处,用。四轮差速底盘设定左轮、右轮得速度分别为。圆周运动的角速度公式如式1所示。受约束,约束与圆周运动的角速度。合成,设四个轮子的速度分别为。,设左轮和右轮之间的轴距为。为圆周运动角速度,线速度为。,其均由预设目标速度。 阅读详情

相关推荐

企业级4WD移动机器人平台:从硬件选型到SDK设计的工程实践

在机器人开发领域,构建一个稳定可靠的移动底盘是算法验证和产品落地的关键基础。其核心原理在于通过电机驱动、编码器反馈和运动学模型实现精确的闭环控制。这项技术的价值在于将复杂的硬件交互抽象化,大幅提升研发效率,使开发者能专注于上层应用逻辑。典型的应用场景包括视觉导航算法测试、自动化流程执行以及柔性物流原型开发。本文以Intel Edison为核心控制器,详细阐述了如何设计一个集成了PID控制、里程计推算和网络通信SDK的四轮驱动平台,为快速构建企业级移动机器人解决方案提供了完整的参考实现。

weixin_30718391的博客 344

ROS仿真机器人学习笔记二:创建4轮小车模型及相关xraco文件修改

跟着上一节博主的教程,可以把ROS内的机器人仿真大概走一遍。不过大家最好还是在一个性能比较好的机器上运行,后来我把虚拟机拷贝到了台式机,运行起来顺畅多了。下面就准备根据自己的模型在走一遍。我自己的模型是一个四轮小车的模型,四个驱动轮。原来的模式是双驱动轮圆形的差速底盘。所以第一步就是来制作描述机器人模型的XACRO文件。提示:以下是本篇文章正文内容,下面案例可供参考例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

lunzilx的博客 4599

Arduino双轮驱动机器人小车:从硬件选型到PID控制进阶实战

在嵌入式开发与机器人入门领域,电机控制是核心基础技术之一,其原理是通过微控制器输出PWM信号,经驱动电路放大后精确调节直流电机的转速与转向。这项技术的工程价值在于将数字逻辑转化为物理运动,是构建智能移动平台的基石,广泛应用于教育机器人、智能小车及自动化设备中。本文以经典的Arduino Uno与L298N驱动模块组合为例,深入解析双轮差速运动平台的完整实现路径,涵盖电源隔离、运动校准等关键实践。通过引入PID控制算法,可进一步提升运动精度,实现从基础开环控制到闭环反馈的进阶。文中融入了对**电源干扰**问题

weixin_30814329的博客 444

【ROS Rikirobot基础-使用系列 第一章节】-如何配置Rikirobot的ROS网络,并进行远程控制小车移动

配置Rikirobot的ROS网络 用户拿到车后,自行组装完成后,要做的第一件事情就是配置Rikirobot小车的ROS网络,配置ROS网络的目的是我们通过远程来控制或者查看显示主控上ROS系统运行的数据,这样就不用让车上装个显示器,我们可以直接在远程操作。由于我们所有系列的ROS车型使用方法一样,这里我以两驱动车型为例,给大家做讲解。 一、使用前的准备 1.使用前,请先搞清楚几个概念。主...

风野萧萧 7482

从零搭建自动驾驶小车:树莓派+Arduino差速底盘与PID控制实战

移动机器人技术是自动驾驶、智能仓储等领域的核心基础,其自主移动能力依赖底盘运动控制与感知决策的协同。差速驱动模型和电机速度闭环是其中必备的底层环节,通过树莓派与Arduino协处理器架构,能以较低成本实现高实时性的控制方案。编码器反馈与PID控制算法能够有效修正轮速偏差,提升运动精度;超声波传感器则为近距离障碍检测提供数据,驱动避障状态机安全运行。这类桌面级轮式机器人常被用于教学实验、科研原型验证及智能物流算法初探。本文以一辆可实现基础Autopilot功能的自制小车为对象,详细解析从底盘选型、驱动控制到测

weixin_42715608的博客 321

ROS兼容地面机器人( 2WD,4 WD,阿克曼转向,Mecanum驱动器).zip

linorobot, ROS兼容地面机器人( 2WD,4 WD,阿克曼转向,Mecanum驱动器) linorobot Linorobot是一套开源on兼容机器人,目的是为学生。开发人员和研究人员提供低成本的平台。教程你可以阅读完整的教程如何在这里构建你的机器人 。多平台支持多种类型的机器人基础:2WD驱动器

避免盲目跟风:机器人开发技术选型与避障实战(Arduino与ROS 2)

技术选型是机器人开发中决定项目成败的关键环节。许多团队在硬件与框架选择上盲目追逐高性能方案,忽视任务边界、资源限制与扩展空间,导致算力不足或成本超支。“因地制宜”的工程本质,是在需求驱动下厘清任务目标、预算与团队技能,再决定传感器、计算平台和软件框架。从简单场景出发,利用Arduino与超声波传感器即可构建低成本避障小车,满足实时控制与教学验证;当任务升级为自主导航或多传感器融合,可迁移至ROS 2与激光雷达方案,实现灵活的避障节点开发。两种路线各有适用边界,理解“最小可行产品”与“安全边界”,能在低成本与

weixin_33787529的博客 303

arduino 电子差速算法

通过判断//成功实现粗略差速 int Dirmin=257; int Dirmax=387; int Accmin=160; int Accmax=885; const int xpin = A1; // x-axis const String XHEADER = "X: "; void setup() { // put your setup code here, to run once: Serial.begin(9600); pinMode(A1, INPUT);// 设置9号口为输出端口: pinMode(A0, INPUT);// 设置10号口为输出端口: pinMode(9, OUTPUT);// 设置9号口为输出端口: pinMode(10, OUTPUT);// 设置10号口为输出端口: } void loop() { int Dir=analogRead(xpin); //Serial.print(XHEADER + analogRead(xpin) ); //Serial.print(analogRead(A0) ); //8 Serial.println(); // put your main code here, to run repeatedly: int Acc=analogRead(A0); int Acc_2 = map(Acc, Accmin,Accmax, 0, 255); int Dir_2 = map(Dir, Dirmin, Dirmax, 0, 255); //Serial.print(Dir); //Serial.println(); if(Dir_2>=0&&Dir;_2136&&Dir;_2<=255) { analogWrite(9, Acc_2); analogWrite(10,Acc_2*(255-Dir_2)/120); } else if(Dir_2=120) { analogWrite(9, Acc_2); analogWrite(10,Acc_2); } delay(300); //延时300毫秒 }

OpenBot社区项目集锦:从坦克机器人到尤达宝宝创意实现

OpenBot是一个创新的开源机器人项目,它巧妙地将智能手机作为机器人的"大脑",打造出低成本、高性能的机器人平台。通过将智能手机的计算能力与简单的机器人身体相结合,OpenBot为机器人爱好者、教育工作者和研究人员提供了一个强大的实验平台。这个开源机器人项目支持多种控制方式和丰富的社区创意实现,从简单的轮式机器人到复杂的多地形车辆,展现了开源硬件与软件的无限可能性。 ## 🚀 OpenBot

gitblog_00600的博客 934

别再死记硬背了!用Amesim HCD库亲手搭建单向阀、锥阀、球阀模型(附详细参数设置)

本文详细介绍了如何使用Amesim HCD库从零构建单向阀、锥阀和球阀的仿真模型,帮助工程师摆脱死记硬背,掌握物理建模的核心技巧。通过实战案例和参数设置指南,读者将学会如何优化阀门动态响应、验证流量特性以及处理旋转运动等独特挑战,提升液压系统设计效率。

weixin_29248611的博客 499

三大主流交易接口实战指南:XTP、CTP与数字货币API的实盘接入解析

本文深入解析了量化交易系统实现实盘交易的关键环节,聚焦于三大主流交易接口的实战接入。详细介绍了证券领域的XTP、期货领域的CTP以及数字货币交易所API的核心特性、代码封装要点与风控实践,并提供了多市场接口整合的统一架构方案,为开发者打通量化交易的“最后一公里”提供了一份接地气的实战指南。

win55的博客 1373

从零打造后院火星车:机器人学与自主系统实践指南

机器人学是研究机器人设计、制造、控制和应用的交叉学科,其核心在于通过传感器、控制器和执行器构建能够感知环境、自主决策并执行任务的智能系统。其技术价值在于将理论算法(如SLAM、路径规划、PID控制)应用于物理实体,解决真实世界中的导航、避障和任务执行问题。在创客教育、STEM项目和业余机器人开发等应用场景中,构建一台具备基本自主能力的移动机器人(如火星车)是绝佳的实践平台。本文基于**ROS(机器人操作系统)** 和**传感器融合**等关键技术,详细阐述了如何利用树莓派、Arduino、激光雷达和IMU等开

weixin_29171087的博客 345

稳健自适应波束形成学习(2):自适应计算对角加载量方法——基于广义线性组合的鲁棒Capon波束形成

对于快拍数相对阵元数较小时,样本协方差矩阵不能很好对协方差矩阵进行估计。常规的对角加载量需要根据经验值或不断手动调整进行测试,没有一个明确的准则和推导。该篇介绍一种自适应计算对角加载量的方法,且能适应快拍数相对阵元数较小时的情况。均匀线阵阵元数:18;载波频率30MHz;通信信号来波方向0°、来波估计偏差0.5°;干扰来波方向30°;通信信号信噪比10dB;干扰信号信噪比60dB。也即在干扰角度生成66dB的零陷,通信信号受到16dB的衰减。

a1uajug的博客 824

ESP32+Arduino+树莓派三重架构的开源四足机器人开发平台

四足机器人是融合嵌入式控制、实时运动学与边缘AI的典型机电系统。其核心原理在于多级主控协同:微控制器保障舵机PWM硬实时,单板计算机支撑视觉与SLAM等高负载任务,而无线通信模块实现远程交互与OTA升级。这种分层架构显著提升了系统的实时性、可扩展性与工程鲁棒性,技术价值体现在降低机器人开发门槛、加速算法验证闭环、支持从教学实验到产品原型的平滑演进。典型应用场景包括高校机器人课程实践、STEM家庭项目、边缘AI行为建模及多机协同编队研究。本文以Petoi Bittle为实例,深入解析ESP32实时控制、Ard

weixin_34236869的博客 171

在Windows11下安装完Ubuntu20.04双系统后配置环境的过程

在Windows11下安装完Ubuntu20.04双系统后配置环境的过程 1.NVIDIA驱动检测及安装 2.Anaconda的安装 3.安装cuda、cudnn、pytorch 4.其他报错

aaaccc444的博客 2423

从零开始:MTK ISP调试中的ImagiqSimulator实战指南

本文详细介绍了MTK ISP调试中ImagiqSimulator的实战应用,从环境准备、参数加载到核心模块调整,提供全面的调试流程指南。重点讲解了DM模块参数优化技巧和常见问题解决方案,帮助工程师高效完成ISP调试工作,提升图像处理质量。

weixin_29168813的博客 480

robuster 系列产品底盘 ROS 驱动说明书

robuster 系列产品底盘 ROS 驱动。

Tan_Rock的博客 741

Python 爬虫实战:赛事分析平台构建与比赛数据抓取

在体育赛事日益丰富的今天,对比赛数据的收集与分析对于运动员、教练团队以及体育爱好者都具有重要意义。通过构建一个赛事分析平台,我们可以系统地抓取、整理和展示各类比赛数据,为用户提供全面的赛事洞察。本文将深入讲解如何利用 Python 爬虫技术实现这一平台的构建,涵盖从目标网站分析到数据可视化展示的全过程。

u014481728的博客 3179

配置Rikirobot的ROS网络,并进行远程控制小车移动

小车连接屏幕,开机后连接wifi,查看ip地址ifconfig我的地址为192.168.31.130修改配置文件最后几行在最后增加我的小车是2驱,其余对应更改“2wd(两驱动), 4wd(四驱动), mecanum(麦克纳母轮), omni(Omni全向轮), omni4wd(Omni全向四轮), tank(履带), ackermann(阿克曼(舵机转向))”

iii66yy的博客 1068

芯片原厂linux驱动开发的分享

大家好,我是XX,来自湖南XX学院,电子信息18级,也曾在创新基地控制组学习过两三年,毕业后就职于一家芯片原厂的解决方案部,担任驱动工程师的职位,算上实习期,我的工作时长已有两年。在此我想将这两年期间学习与积累到的一些经验输出出来,与大家一同分享。知识面有限,只能简单介绍一些驱动开发方向的一些经验,且由于经验尚浅,文中难免会有一些疏漏和错误之处,还请大家积极地批评指正。

嵌入式技术开发 846

数字电路逻辑与设计实验一 门电路逻辑功能及测试

(1)选二输入四异或门电路 74LS86,按图 1-8 接线,输入端 1、2、4、5 接逻辑开 关(S1~S4),输出端 A、B、Y 接电平显示发光二极管.用六反相器(非门)按图 1-11 接线,输入 80KHz 连续脉冲,用双踪示波器测输入, 输出相位差,计算每个门的平均传输延迟时间的 tpd 值。测试不同的输入组合:对门电路进行全面的测试,尝试不同的输入组合,包括各种可能的逻辑状态。检查门电路的输入:确认门电路的输入是否正确,并且输入信号的电平符合门电路的规格要求。确保输入信号的稳定性和准确性。

欢迎交流学习心得 2万+

Arduino 教程—控制小型直流电机的方向和速度

如何使用Arduino开发板和L293D电机驱动芯片控制小型直流电机的方向和速度。这个教学项目使用一个电位器来控制电机的速度 、使用一个按钮来控制电机的正反转。

duotuoluan3934的博客 3223

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

四轮小车差速原理

智能小车前进、后退、左转、右转、左转圈、右转圈等四轮差速原理

lj1109053360的专栏 3180

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Webots搭建的四轮差速小车在原地转向时 每90度出现停顿的解决方法

在用webots搭建四轮小车过程中会出现这个问题。 环境描述: 系统环境:WIN10 软件环境:Webots R2019a 模型描述: 使用Solid块和HingeJoint模块搭建四轮差速小车,如下图 编写控制器,通过电机速度控制方式控制轮子转动,带动小车行进 问题描述: 在原地转向过程中,经过很长时间小车才开始出现明显转动,并在转动90度时减速停止转动,再经过一段时间之后开始转向下一个90度,每90度一个减速停止。期间轮子一直转动,有转速。如下动图所示 解决方法: 地面需要添.

Anker_Evans的博客 7994

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

四轮驱动移动机器人4WD运动模型及应用分析

四轮驱动移动机器人4WD运动模型及应用分析 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当代机器人研究领域,四轮驱动移动机器人(4WD)以其稳定的运动性能和广泛的应用前景受到广泛关注。本项目详细介绍了四轮驱动移动机器人(4WD)的数学运动模型,为相关领域的研究者和工程师提供了宝贵的理论参考。文章通过对机器人运动特性的深度剖析,成功构建了适用于4WD移动机器人的运动...

gitblog_06717的博客 758
上一篇: windows系统下自定义图标
下一篇: ros_arduino_bridge功能包集的使用
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值