直立车想节能——2020全国大学生智能车车竞赛经验记录之我想要直立(平衡小车串级pid调参经验)

2023-05-16

平衡车我相信很多电赛测控的入门的玩家都也玩过,很多朋友们也都听说过平衡小车之家这家淘宝店铺。而串级PID也是一个经典且牛批的方案而广为人知,所以在这样的比赛结束之后作为俩套方案都试过的我,谈一谈平衡小车之家的代码即并行的pid和串级pid的优缺点以及调参经验。

三环介绍

废话少说正题开始

我相信大家都应该很了解PID是什么,以及 P I D分别是干什么的,这里就不详细介绍了。反而我想谈一谈平衡小车的控制需要什么。

首先我觉得大家更为熟知的是角度环,速度环,和转向环。角度环是为了控制小车的一个直立,速度环是为了控制小车的速度,而方向环则是为了控制小车的转向。其实这三个环分别起到什么作用是非常好理解的。

角度环也叫直立环,就是机械中值的角度值为目标值,误差为目标值减去当前姿态传感器读到的角度即
误差角度 = 中值角度 - 当前角度

速度环,就是你设定速度为目标速度,如果想他站着不动,那么设定的目标速度就是0,误差就是编码器读到的车轮的值,如果是俩个车轮就将其加起来乘或不乘一个1/2(本质没区别)。
误差速度 = 设定速度 - (编码器左+编码器右)

转向环,转向环通过读取航向角的角速度来,其实本质上还是控制这个角速度为莫个值。比如你想小车走直线,那么你就需要设定值为0,误差值就是设定值减去角速度
误差转向 = 设定转向 - 航向角角速度

那么并行pid和串级pid有什么区别呢?

并行PID

如何做

并行的PID是将三个环分别独立计算,最后叠加起来最后输出到电机上面去即
电机PWM = 直立环 + 速度环
如果加上转向环就是

电机左PWM = 直立环 + 速度环 +(转向环/2)
电机左PWM = 直立环 + 速度环 - (转向环/2)

(加减得看你的极性)

为什么这样做

其实这三个环分别都很好理解,直立环控制直立,速度环控制你的速度,转向环控制你的转向。
至于为什么叠加起来就能直接赋值给电机好像是可以参考卓大大之前的那片文章,里面有对模型的详细介绍。

这样做有什么好处

其实并行pid最大的好处就是现象十分明显,为什么这么说呢?
直立环加上你就能看见小车能立起来了,速度环加上你就能看到小车停止或者按照指定的样子跑,转向环也是这样,你能看到小车转向很明显。明显带来的效果就是非常方便你调试PID你可以很清楚的看到现象,从而PID的参数整定就会十分顺利。由于参数调试十分简单这里就不详细介绍了,在很多淘宝店铺都提供了很多代码,包括b站也都有许多教程。

串级PID

因为串级pid有很多种串联的方法,我在这里仅介绍一下我的方法,和按照我的方法的效果,仅供参考

如何做

串级pid不同于上面的,会多出一个环叫做角速度环,而且串级pid会多出一些概念,如内环和外环。我的串级pid的构造为,角速度内环,速度外环,中间是角度环,叠加转向环。具体是怎么工作的呢?
速度环的输出结果作为角度环的设定值,角度环的输出结果作为角速度环的设定值,角速度环的输出结果累加上我们上面介绍的转向环作为我们的电机PWM的输出。

速度环——>角度环——>角速度——>输出 + 转向环 = PWM

为什么这样做

首先两点,多出了一个串起来和一个角速度环。

汉堡告诉我的是,串起来的目的是为了PID更快的收敛,但是我个人的感觉不止于此。我认为串级PID能给传感器很多信息分布不同的权重,并且让其有序,而不是简单粗暴的累加起来,就像煮大锅饭一样。

角速度环是我一开始最不能理解的一个东西,我队友也十分抗拒加上这个东西,可是我到最后才发现角速度环才是这个串级PID的灵魂。如果大家调试过直立环大家就会发现一个问题就是,如果直立环调的太软(p比较小)你会发现整个平衡小车会有点来回的低频振荡不能稳住,如果你的调的太硬(p比较大)你会发现整个车会在高频抖动,这种情况下一是容易烧电机驱动(来回转电流很大都是堵转电流,不要问我为什么知道容易烧,我板子经历了他这个年纪不改经历的惨痛),二是你会发现车非常抖,就包括你加上速度环之后,你的车在行进过程中十分抖动,这会非常耗电,对节能就不友好了,而且车子是不稳定的(太软车就容易倒,甚至一碰就倒)。你要调试到那种堪堪不抖动,而且车还不容易倒的状态下,这个pid的参数十分难调,而角速度环就能解决这个问题。我在调试之前问学长,角速度环的 目的是干什么的,他给我的解答是能排除扰动和干扰。我一开始一直认为排除的扰动可能是车在进行过程中装到旁边的路障,或者转向过大的时候带来的不稳定,可是我到最终发现其实角速度环能解决的一个很大问题的就是你直立环调的过硬的时候,所带来的高频抖动,角速度环能帮助你去掉这个高频抖动。所以从这一点来说,你的角速度环和速度环调的得较为适配,这样你的车很难倒下,而且车不会很抖。

这样做有什么好处

我在上一点上也大概说了串级pid的几点好处,首先你会直观的发现你的车非常非常非常稳,稳到什么地步呢,基本上你的电磁前瞻杆子你拍一下他能起来而且不会倒,我在侧面对着车踢一脚车也是不会倒的。其次你的加速会非常明显只要你的重心不要过分的往后,加速是很到位的。最后就是避免了高频抖动,避免了电机的堵转,也会进一步节能。

缺点也很明显

其实带来好处的同时就会带来缺点,缺点就是PID十分难调,因为你的pid是一环套一环,首先你出了问题,现象不容易看出来是哪个环的问题,主要是角速度环和角度环 ,然后就是怎么调整,而且中间某个环的参数没调好,后面的都不好使,这就带来了很多挑战和难题。

我该怎么调

在串级pid中,内环是直接输出的,对于这一点来说,外环粗调就ok,内环精调。对于我们这个模型来说,主调角度环副调角速度环,调参顺序是从内环到外环,最后调转向环。
首先调参角速度环,角速度环一般是pi控制,其实很多地方有用增量式也有用位置式,对于内环的角速度环,我们需要高频控制,大概每2ms运算一次,对于这样的运算我们可以选择增量式来减少我们的运算量,当然对于增量式不熟用位置式也是一样的。在调整这个参数的时候与以往不同,我们需要先调整i的参数,原因是陀螺仪的角速度跳动非常大,十分容易出现静差,我们需要加上i来消除那部分静差,调整的现象是加上i车就能大幅的低频来回晃,能勉强立住,立住的效果越好i的参数越好,i过大也会导致高频抖动。在调整完i的参数之后我们就需要调p的参数,其实加上p之后你会发现车就能勉强立住了,不会晃的很大,你需要增大p大概到车子会稍微抖动,还没要到高频抖动的感觉。效果就是小车基本上能立起来。
其次调角度环,角度环一般是pd控制,大概是10ms运算一次(串级pid 的级和级之间的运算时间是2-9倍之间),加上角度环的p之后你会发现小车基本上能稳稳的立住了,当然这是合适的p,但是区分这个的现象真的一点都不明显,我的方法是拍前瞻的杆子,看响应速度,力气越大 响应速度越快,说明效果越好,其实基本上车是会往前冲,来调整角度,你也可以看冲完之后小车稳定下来的pid收敛速度,来判断p的值是否合适。基本上p感觉调到差不多了的时候,可以加上d,d是提高车的响应速度,加上d之后你会发现小车向前冲的距离会不大,力气不大的时候,能看到小车立刻弹起来,这就是比较好的响应速度,d过大也会带来高频的抖动。加上合适pd之后你会发现小车基本是很稳定的立在地面上,除非特别暴力什么的,小车是不会倒的,哪怕是撞上什么物体,或者是碾过什么物体都不会倒。这个角度环得调的比较硬,这样你才能在加速的时候看起来效果比较好,不然你会看到小车在形式过车中,车身比较抖或者车容易倒,这是俩个极端。角度环是比较重要的一个环,需要我们耐心去调试。其实这也会面临一个问题,我大概调到什么样子才能到下一个环上面去调,这就得靠自己的尝试和感觉了,我个人觉得需要自己多调一调就会找到那个感觉,我调了三遍,第一遍调了大概五六个小时,第二遍调了大概2-3小时,第三遍一个小时就调完了,需要自己摸索找感觉。
最后速度环,速度环的调试其实比较粗糙了,感觉速度环的p就是小车的一个加速度,p越大加速度越大,甚至速度环不加i都是可以的。虽然速度环的i固然会积分导致一些问题出现,但是我们可以用多少次的一个清零尽可能的解决这个问题,如果不加i的话,感觉速度会不稳定,这就对你的直立环和角速度环提出了很大的考验,我看到的一个朋友就是没有加i,我看他加速的时候车屁股一直在点地,虽然规则是允许平衡车的第三点点地,但是这比如对我们的节能产生了很大的影响,节能的很重要的一个前提就是稳定的工作,以我们的电瓶车为例,频繁的加速减速你车的待电就不行。
转向环其实都是差不多的,但是有一点就是转向环需要和速度形成一定的联系,因为转向的多少是累加在我们角速度环的输出上,和并行那边是差不多的,如果你转向环是死的,你高速和低速状态下的转向环的值不一样,这就容易出问题。我看到人家的代码是 利用一个俩个的串级串到一起,是利用电磁的差比和作为当前值,设定值为0,进一个pid算出参数,当前的航向角的角速度为当前值,这个参数乘上速度作第二个pid的设定值,第一个pid还是一个动态pid,感觉挺巧妙的,由于时间关系没有尝试
在这里插入图片描述

END

调参很苦,熟能生巧,思考现象,方能直立
感觉踩了很多坑,也问了很多人,非常感谢这一路上许多学长耐心解答,我也希望我的文章能给别人带来一丝丝参考价值。节能直立挺好玩的,但是很可惜,在方向上走错了很多,只能怪我太菜了。愿大家都能做出三米神车,越来越牛批!

突然有些朋友问我要代码,其实我也没什么可以给的,pid都是一个样子,可以给大家看一下流程的样子(这是学长的代码)

void Balance_Control(void)
{
	if (Ang_Velocity_Flag)	// 直立角速度环	2ms
	{
		Ang_Velocity_Flag = 0;
		ICM_GetData(&GYRO,&ACC);
                //Data_Filter();//原始数据滤波
                Data_steepest(); 
                 IMU_update(0.008f,&(sensor.Gyro_deg), &(sensor.Acc_mmss),&imu_data); //匿名移植姿态解算
                icm_gyro_z = LPButterworth(icm_gyro_z, &Gyro_Butter, &Butter_20HZ_Parameter_Acce);//巴特沃斯30HZ滤波    Z轴和Y轴角速度都用原始数据,只经过滑动滤波和低通处理
                icm_gyro_y = LPButterworth(icm_gyro_y, &Gyro_Butter1, &Butter_30HZ_Parameter_Acce);
                //IMUupdate(GYRO.X*Gyro_Gr, GYRO.Y*Gyro_Gr, GYRO.Y*Gyro_Gr, ACC.X*AcceRatio, ACC.Y*AcceRatio, ACC.Z*AcceRatio);
                state = Long_street();
//                if (state)//障碍,长直道减速
//                {
//                  Speed_Set = 180;
//                }
//
//                else
//                {
//                  Speed_Set = 320;
//                
//                }
               //Middle_Err = LPButterworth(Middle_Err, &Middle_Err_Butter, &Butter_10HZ_Parameter_Acce); 
		Radius = -PlacePID_Control(&Turn_PID, Turn[Fre], Middle_Err, 0);//动态PID,动态范围0-0.04	,大误差时起作用,
                
		Theory_Duty += -PID_Increase(&Ang_gyro_PID, Ang_gyro, (int32)icm_gyro_y, (int32)(Tar_Ang_Vel.Y));										/* 角速度环作为最内环控制直立 */
		//abs +=PID_Increase(&Ang_gyro_PID, Ang_gyro, (int32)(GYRO_Real.Y*10), 0)*10;//(int32)(Tar_Ang_Vel.Y));	// 计算直立PWM
                //abs +=Theory_Duty;
                //Theory_Duty += Theory_Duty;
                //Theory_Duty = -Theory_Duty;
               //abs = abs * 10;
		Theory_Duty = LIMIT(Theory_Duty, -900, 900);
                //Direct_Parameter = -PID_Realize(&Turn_gyro_PID, Turn_gyro, (int32)(icm_gyro_z),0);
                Direct_Parameter = -PID_Realize(&Turn_gyro_PID, Turn_gyro, (int32)(icm_gyro_z),Radius*Speed_Min);	// 转向环左正右负
                Direct_Parameter = range_protect(Direct_Parameter, -800, 800);
		Direct_Parameter = Turn_Out_Filter(Direct_Parameter);//输出滤波
		
//		Direct_Parameter = Direct_Last*0.2 + Direct_Parameter * 0.8;	// 更新上次角速度环结果	
//                Direct_Last = Direct_Parameter;
		//Direct_Parameter = 0;
		MOTOR_Duty_Left  = Theory_Duty + Direct_Parameter;	// 左右电机根据转向系数调整差速
		MOTOR_Duty_Right = Theory_Duty - Direct_Parameter;	
		
		//get_angle();
               // Kalman_Filter(Mpu_date.roll, Mpu_date.groy);//卡尔曼滤波

                
               
	}
        if (AngleJS_Flag)
        {
          AngleJS_Flag = 0;
         
        }
	
	if (Angle_Flag)		// 直立角度环	10ms
	{
		Angle_Flag = 0;
		
		get_speed(&left_speed,&right_speed);// 获取当前速度
                //speed_measure(left_speed, right_speed);
		Speed_Now = (  left_speed-right_speed)/ 2;
                Distance = Speed_Now + Distance;
		Speed_Now = Speed_Now * 0.8 + Speed_Last * 0.2;
                Speed_Last = Speed_Now;
                //Long_Load();
                Tar_Ang_Vel.Y = -PID_Realize(&Angle_PID, Angle, (int32)(imu_data.pit*100), (int32)Target_Angle.Y);	
		Tar_Ang_Vel.Y = range_protect(Tar_Ang_Vel.Y, -1000, 1000);	// 注意正负号
 
                
                
	}
	if (Speed_Flag)		// 速度环	50ms
	{
		Speed_Flag = 0;
												/* 速度环加到角度环上串级控制 */
		Target_Angle.Y = -PID_Realize(&Speed_PID, Speed, Speed_Now, Tar_v+Speed_Set);	// 结果为放大1+00倍的目标角度
		Target_Angle.Y += Zero_Angle*100;	// 目标角度叠加在零点上
                //Target_Angle.Y = -Target_Angle.Y;
//                if (Middle_Err>=500 || Middle_Err<=-500)//一定程度上防止弯道减速
//                {
//                  Target_Angle.Y = 3500;
//                }
		Target_Angle.Y = range_protect((int32)Target_Angle.Y, 200, 3000);

		Speed_Min = Speed_Min * 0.1 + Speed_Now * 0.9;
		if (Speed_Min < 40)
		{
			Speed_Min = 40;
		}
                
                //oled_int16(84,0,Target_Angle.Y);
	}
        
}

以及位置式pid的代码

// 位置式动态PID控制
int32 PlacePID_Control(PID *sprt, float *PID, float NowPiont, float SetPoint)
{
	//定义为寄存器变量,只能用于整型和字符型变量,提高运算速度
	float iError;	//当前误差
	int  Actual;	//最后得出的实际输出值
	float Kp;		//动态P
	
	iError = SetPoint - NowPiont;	//计算当前误差
	sprt->SumError += iError*0.01;
	if (sprt->SumError >= PID[KT])
	{
		sprt->SumError = PID[KT];
	}
	else if (sprt->SumError <= PID[KT])
	{
		sprt->SumError = -PID[KT];
	}
	//二次函数是为了达到 误差越大  反应越快 回复力越大 其中 KI值是误差为0时的P 也就是直道上的P值
	Kp = 1.0 * (iError*iError) / PID[KP] + PID[KI];	//P值与差值成二次函数关系,此处P和I不是PID参数,而是动态PID参数,要注意!!!
	
	Actual = Kp * iError
		   + PID[KD] * ((0.8*iError + 0.2*sprt->LastError) - sprt->LastError);//不完全微分  
	sprt->LastError = iError;		//更新上次误差

	Actual = range_protect(Actual, -260, 260);

	return Actual;
}

仅供大家参考

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

直立车想节能——2020全国大学生智能车车竞赛经验记录之我想要直立(平衡小车串级pid调参经验) 的相关文章

  • sys.stderr.write(f“ERROR: {exc}”)

    https www cjavapy com article 1701
  • 为什么PBFT需要三阶段

    首先 xff0c 第一阶段是预提议 xff08 pre prepare xff09 xff0c 这一阶段的主要原因是使用领导可以降低通信复杂度 xff0c 但是我对其没了解 xff0c 就不瞎说了 接着是提议 xff08 prepare x
  • 文件的自定义包发送接收

    需求 对一个特定的文件进行分片发送 xff0c 构造数据包 xff0c 发送数据包 xff0c 接收数据包并提取有效数据 xff0c 对数据组合还原为原文件 设计 当前 xff0c 基于socket的网络编程已成为当今不可替代的编程方法 x
  • 阿里云服务器图形化界面

    https blog csdn net qq 43264202 article details 119578968
  • 安卓开放端口

    https blog csdn net weixin 39737831 article details 109965587
  • Ubuntu14.04 支持ESM

    https discourse ubuntu com t ubuntu advantage client 21788
  • 开启关闭ICMP

    echo request http www xoxxoo com index index article id 780 html redirect https blog csdn net weixin 39684454 article de
  • AD使用技巧

    AD快捷键 快捷键要处在英文模式的情况下才可以使用 xff1a AD测量快捷键 xff1a R AD对齐快捷键 xff1a A AD切换单位快捷键 xff1a Q AD改变栅格快捷键 xff1a G AD视图配置快捷键 xff1a L AD
  • 多传感器融合框架搭建

    架构 src include apps xff1a 节点文件 front end node cpp 前端节点data pretreat node cpp 数据预处理节点back end node cpp 后端节点loop closing n
  • 多传感器融合框架-ESKF

    架构 基本同图优化框架差不多 内容简述 数据预处理节点 订阅imu原始数据 xff0c gnss原始数据 xff0c 完成数据时间戳同步 点云畸变补偿发布如下消息 畸变补偿后的点云 synced cloudgnss里程计 synced gn
  • OpenCV笔记4.3

    C 43 43 读取目录下所有文件名称 1 包含头文件 96 span class token macro property span class token directive hash span span class token dir
  • 半小时内实现Esp32-Cam模型训练和图像识别

    Esp32 Cam图像识别 一 网页显示视频流1 Linux式例程2 MicroPython式例程步骤1 下载Thonny步骤2 烧录Esp32 Cam固件步骤3 运行相应代码 3 Arduino式例程步骤1 下载Arduino步骤2 安装
  • MANIFOLD 2-G开发 之 利用ROS话题编程实现UART1串口通讯

    目录 MANIFOLD 2 G开发笔记1 项目描述2 遇到的问题3 解决方案4 示例代码5 注意事项6 资源附件6 运行与调试 MANIFOLD 2 G开发笔记 本博客内容将记录MANIFOLD 2 G 开发过程中遇到的问题及解决方案 xf
  • ONOS源码笔记--机制

    app注册 private ApplicationId appId appId 61 coreService registerApplication 34 org onosproject fwd 34 注册应用 xff0c 一般在activ
  • git 本地分支与远程分支关联

    github上已经有master分支 和dev分支 在本地 git checkout b dev 新建并切换到本地dev分支 git pull origin dev 本地分支与远程分支相关联 github上没有dev分支 git check
  • 做设计师还是程序员?一张图你就明白!

    平时大家相安无事 xff0c 可一旦项目滑了水 栽了坑 二重奏就开始没完没了的唱起来了 请看下图 xff1a 你的桌子是有什么 小编反手一摸 xff0c 还好小编的头发还再 你头发呢 xff1f 相信这里有很多学习java的朋友 xff0c
  • 【ROS】动态链接库(.so文件)的生成和调用

    ROS 动态链接库 xff08 so文件 xff09 的生成和使用 引言 xff11 生成so文件 xff12 调用so文件 xff13 运行结果结语 引言 由于项目有涉及到源代码是否交付的选项 xff0c 想着如果不交付源代码 xff0c
  • 用TortoiseGit删除git仓库中的文件/文件夹

    用TortoiseGit删除git仓库中的文件 文件夹 点击删除后出现弹框 xff0c 点击删除 删除后会显示移除一个文件 xff1b 想要还原可以在当前文件夹中右键选择TortoiseGit gt 还原 xff08 revert xff0
  • 02-Jetson Xavier NX 训练自己的yolov4-tiny模型并利用TensorRT完成部署(Python API)

    记录原因 xff1a 因前面完成了yolov4 tiny源码的部署 xff0c 可以跑到50FPS 但那个跑的是别人的模型 xff0c 可以识别80类 xff0c 但是在特定的情况下比如识别螺丝螺帽 xff0c 只需要两种 xff0c 在训
  • RPLIDAR在ROS下快速上手教程

    本教程由 臭皮匠机器人 原创 转载请注明出处 收到一个RPLidar后 xff0c 干的第一件事应该是先让雷达跑起来 xff0c 边做边学是最高效的 之前写了一篇在windows底下的 RPLIDAR十分钟极速入门教程 xff0c 今天将教

随机推荐

  • RPLIDAR的坐标系问题

    本教程由 臭皮匠机器人 原创 转载请注明出处 RPLIDAR自身的坐标系 RPLIDAR给出来的数据是角度和距离 xff0c 也就是极坐标系 转换成直角坐标系的话应该照转换公式计算 xff0c 假设r是距离 xff0c theta是角度 x
  • Makefile模板(取自vscode)

    文章目录 Makefile模板vscode插件 xff1a 单一目标编译多个目标 Makefile模板 vscode插件 xff1a 单一目标 最近在学习Makefile写法 xff0c 但是总觉得自己写的太烂了 xff0c 找到了vsco
  • 使用docker-compose配置mysql数据库并且配置用户密码

    下面要求环境 xff1a 一定要安装docker ce和docker compose才能进行下面步骤 linux找到你要放mysql的目录 创建一个docker compose yml 以下配置了外部数据卷 外部配置文件 外部初始化文件 x
  • 使用ONOS的REST API来下发流表

    1 启动ONOS后 xff0c 浏览器进入doc http 10 109 247 211 8181 onos v1 docs 2 找到Flow xff0c 并打开POST 3 可以直接在这个上面编辑flow stream里面模拟GET获得的
  • 形态学处理

    原文链接 xff1a https blog csdn net qq 40732350 article details 116718329 spm 61 1001 2014 3001 5506 形态学处理 0 前言1 腐蚀与膨胀1 1 结构元
  • leetcode用到的函数汇总

    reverse isalnum tolower
  • Keil MDK-ARM软件官网最新版本的下载方法

    我之前的几篇博客讲的都是关于Keil MDK5 ARM软件的一些配置方法 xff0c 但是我居然忘了说一下如何去下载这个软件了 xffe3 xffe3 xff5c xff5c xff0c 今天这篇博客就把这个小知识点补上 第一步 xff0c
  • 给Word文档中的公式自动编号的方法

    最近在做毕业设计 xff0c 然后需要翻译一篇英文文献 xff0c 我在翻译英文文献的时候 xff0c 需要对公式进行编号 xff0c 而且需要使编号显示在最右侧 xff0c 而公式居中 xff0c 像下图这样 xff1a 如果一个个手动添
  • PHP如何使用strrev()函数反转字符串?(代码示例)

    反转字符串是最基本的字符串操作之一 xff0c 在PHP中可以使用内置函数strrev 来实现字符串的反转 下面本篇文章就来带大家了解一下PHP strrev 函数怎么用 xff0c 希望对大家有所帮助 PHP strrev 函数 strr
  • 离线安装Linux包的方法--以imblearn为例

    包的 whl文件直接在https pypi org 上搜索下载就好 xff0c 注意要搜索全名scikit learn xff01 你搜sklearn是找不到合适的包的 如图 xff0c 选择第一个就好 xff1a 接着要匹配你的系统架构和
  • px4 EKF中Q、R阵设置的思考

    关于Q R的讨论 Q阵 xff0c 状态转移误差矩阵 xff0c 代表从Xt 1到Xt过程中 xff0c 状态转移和真实过程之间的误差 xff0c 具体其中变量可能是对状态转移有影响的变量 xff0c 比如在有一些场景下 xff0c 可能为
  • Ubuntu查看硬盘信息

    lsscsi包默认是不安装的 xff0c 可以使用以下命令安装lsscsi span class token function sudo span span class token function apt get span span cl
  • 在Python3环境中使用ROS的cv_bridge

    之前使用ROS的时候只用了C 43 43 xff0c 没有发现cv bridge这个坑 xff0c 最近增加了一个使用tensorflow2的节点 xff0c 为此使用Anaconda配置了一个只有Python3 7的环境 xff0c 运行
  • 解决mac安装完torch_geometric,import的时候报错的问题。

    问题描述 使用torch geometric官方的命令安装好了torch geometric xff0c 安装的过程非常丝滑流畅 xff0c 但是安装好了import的时候就报错OSerror 注意事项 不要用他生成的命令安装 xff1a
  • CXF内容总结

    CXF 61 XFire webservice框架 43 Celtrix ESB框架 http cxf apache org 内置jettyweb服务器 服务器端 xff1a 1 开发webservice接口 xff0c 要用 64 web
  • Could NOT find UV (missing: UV_LIBRARY UV_INCLUDE_DIR)

    cd var tmp git clone https github com libuv libuv git cd libuv autogen sh configure make make install 注 xff1a 下不来直接去网页下载
  • 【STM32】HAL库开发教程(四)—串口FIFO使用

    前言 不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 本文主要介绍STM32 HAL库开发中串口 FIFO的使用 一 开发步骤 1 Cubemx配置 在左侧引脚配置栏选择目标串口号在串口模式处配置串口模
  • 【STM32】串口数据帧接收与分析处理算法

    基于对串口FIFO的通信数据帧进行接收和分析处理 xff08 关于串口FIFO使用可以参见作者另一篇博文 xff09 算法流程 xff1a 串口中断函数接收数据到FIFO 根据通信协议GetInterUARTMessage 函数对数据帧进行
  • 【STM32】HAL库开发教程(三)—定时器使用

    前言 不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 本文主要介绍STM32 HAL库开发中定时器的使用 一 开发步骤 1 STM32CubeMX配置 在左侧引脚配置处勾选TIM2进行配置在TIM2模式
  • 直立车想节能——2020全国大学生智能车车竞赛经验记录之我想要直立(平衡小车串级pid调参经验)

    平衡车我相信很多电赛测控的入门的玩家都也玩过 xff0c 很多朋友们也都听说过平衡小车之家这家淘宝店铺 而串级PID也是一个经典且牛批的方案而广为人知 xff0c 所以在这样的比赛结束之后作为俩套方案都试过的我 xff0c 谈一谈平衡小车之