机器人探索算法
我试图为机器人设计一种试图找到标志的算法(位于未知位置),该旗帜位于一个包含障碍的世界中.机器人的使命是捕获国旗并将其带到他的基地(这代表他的起跑位置).机器人在每个步骤中都只看到一个有限的社区(他不知道世界的前景),但他有一个无限的记忆可以存储已经访问过的细胞. 我正在寻找有关如何以有效方式执行此操作的任何建议.特别是第一部分;即到达国旗. 解决方案 一个简单的广度首次搜索/深度首次搜索将起作用,尽管缓慢.确保防止机器人多次检查具有相同正方形的路径,因为这将导致这些算法在标准情况下运行更长的时间,并且在无法达到标志的情况下无限期地运行. a*是一种更优雅的方法,尤其是如果您知道国旗相对于您自己的位置. wikipedia 按照往常,在解释这一点方面做得不错.使用的经典启发式是到达目的地的曼宁距离(假设没有障碍的动作次数). 这些算法对于返回旅行很有用 - 不是"查找标志"部分. 编辑: 这些方法涉及创建代表地图上正方形的对象,并创建"路径"或一系列正方形
2 2024-01-23
编程技术问答社区
逆向运动学的CCD算法的工作原理
可以说,我是一个机器人臂,在3D空间中的A,B,C,D点处有关节.令D为最终效应子(Bottommost Child),并且为最高的父母.令T为空间中任何地方的目标点.目的是使最终效应子以最小的旋转(父母)的最小旋转到达目标. . 我最初想到的: 1)通过角度TCD旋转臂C. 2)然后通过新角度旋转臂B. 3)然后按新的角度旋转臂A. ,但是最终效应器似乎在步骤2之后指向目标.我在做什么错,我该如何修复? 解决方案 在我开始使用一些更高级的方法之前,我会这样做(使用Simple ccd循环坐标下降): pe=desired_new_position; for (i=0;i
4 2024-01-22
编程技术问答社区
滚动、俯仰、偏航计算
如何计算与均匀转换矩阵相关的滚动,音高和偏航角? 我目前正在使用以下公式,但我不确定它们是否正确. pitch = atan2( -r20, sqrt(r21*r21+r22*r22) ); yaw = atan2( r10, r00 ); roll = atan2( r21, r22 ); r10表示第二行和第一列. 解决方案 仅当旋转顺序为:滚动,然后俯仰,然后偏航时,您的方程式才正确.对于记录,与Euler角的对应关系(相对于转换矩阵隐式给出的参考框架)如下: roll 是围绕 x轴(-180和180 ver); 之间的旋转 俯仰是 y轴的旋转(在-90和90度之间); yaw 是涉及 z轴的旋转(-180和180之间). 鉴于这些,第一个句子中提到的顺序卷,俯仰,偏航对应于矩阵乘积Rz Ry Rx获得的旋转矩阵(以此顺序).请注意,您的公式在弧度中给出了这些角度的值(乘以180,然后用Pi除以以获得程度的值).所有旋转均相对于轴逆
6 2024-01-08
编程技术问答社区
从2个Vector3D中获取3个欧拉角
如何从2个vector3d检索3个欧拉角? 谢谢 Cedre dim vector1 = new Vector3D(0, 0, 1); dim vector2 = new Vector3D(0.33, 0.45, 0.49); dim myEuler = GetEulerFrom2Vector(vector1,vector2); // ????? 我在直角坐标系中工作,我使用zyx euler juntertion 解决方案 我使用旋转矩阵: R11 R12 R13 R21 R22 R23 R31 R32 R33 r = rz ry rx if (R31 ±1) y1 = -sin-1(R31) y2 = pi + sin-1(R31) x1 = atan2 (R32/cos y1,R33/cos y1) x2 = atan2 (R32/cos y2,R33/cos y2) z1 = a
2 2024-01-06
编程技术问答社区
如何在Tkinter中将按键绑定到按钮上
我的高级项目涉及我可以控制WiFi的机器人.我正在使用Raspberry Pi和Tkinter窗口将命令发送到机器人.我有TKINTER窗口的粗略草稿,但是我想知道是否有一种将按钮按下箭头键的方法.这样,我可以使用箭头键来控制机器人,而不是单击每个按钮.这是我的代码,我必须添加什么? 代码: from Tkinter import * message = "" class App: def __init__(self, master): frame=Frame(master) frame.grid() status = Label(master, text=message) status.grid(row = 0, column = 0) self.leftButton = Button(frame, text="
8 2023-10-22
编程技术问答社区
按住 GUI 按钮-tkinter
我试图在Python做GUI来控制我的机器人汽车.我的问题是如何执行确定按钮的函数.我想在按下按钮并按住按钮时移动汽车,并在释放按钮时停止汽车. from Tkinter import * hold_down = False root = Tk() def button_hold(event): hold_down=true while hold_down== True: print('test statement') hold_down = root.bind('',stop_motor) def stop_motor(event): hold_down= False print('button released') button = Button(root, text ="forward") button.pack(si
4 2023-10-22
编程技术问答社区
使用 ngrok 链接进行模拟时遇到问题
我最近开始遇到用于仿真的NGrok链接的错误.我通常使用该函数:meshcat = StartMeshcat()用于模拟deepnote中的模型.但是最近我有时开始遇到安全错误,而其他时候它要求我注册并安装一些验证.我注册了Ngrok帐户,还安装了Authtoken,但仍然不起作用. 您能否让我知道我应该如何进行设置以使其有效?另外,您可以推荐一些替代方法(Ngrok除了)进行模拟,这也确实很有帮助. 非常感谢. 解决方案 我们实际上一直在与Ngrok的人们一起工作,以查看是否可以使它变得更容易. 但现在我恐怕您需要创建一个Ngrok帐户并将令牌设置为环境变量.
2 2023-09-04
编程技术问答社区
使 `ScrewJoint` 更符合机械手的要求
我正在进行模拟,其中包含: 螺栓,直立焊接到world 螺母,通过ScrewJoint连接到螺栓.螺母的质量设置为0.02 kg,惯性是对角线1.1e-9 *I.这是通过.sdf文件配置的. 一个IIWA操纵器,现在是一个点. 问题是螺母很难操纵,我找不到可以调整的参数,这可以使其更加栩栩如生.更具体: i测量力的能力,在水平面上切向螺母上施加,导致关节的拧紧运动,使螺母与螺栓连接在一起 我想在下部力量有更多的运动,到目前为止,我还没有实现这一目标 我对此的兴趣不是闲置的;我对更复杂的模拟感兴趣,当iiwa与同一关节接触时,这些模拟也会失败;我询问过这些此处和在这里.(都回答了部分).为了总结在这里:当操纵器握住螺母时,螺母以这样的方式与拧紧的螺丝搏斗,以至于schunk抓手被迫取消夹具,iiwa被抛开,但螺母仍然保持静止. 我附加了下面的两个简单实验,以更好地说明问题: 1.使用ExternallyAppliedSpatialForce向切向施加在水平面
2 2023-09-04
编程技术问答社区
如何确定互补式过滤器的参数α?
我知道互补过滤器具有LPF和HPF的功能.但是我认为我对背后校长的理解仍然不清楚. 我在数字信号处理方面很陌生,也许一些非常基本的解释会有所帮助. 说我有一个补充过滤器,如下所示: y = a * y + (1 - a) * x 然后我的参数a可以通过 计算 a = time_constant / (time_constant + sample_period), sample_period只是sampling_frequency的倒数. time_constant似乎是我自己的选择. 我的问题: 该计算背后的理论是什么? 我们如何正确选择time_constant? 注意:我也在 robotics ,因为那里的答案可能会略有不同. 解决方案 该计算背后的理论是什么? 对于人类可读的介绍,我建议: 我们如何正确选择time_constant? 直觉上,time_constant是信任高通和低通滤波器部分
2 2023-09-03
编程技术问答社区
整合陀螺仪和加速度计读数
可能的重复: combine gysoscope and agyerseper data 我已经在Kalman filters上阅读了许多论文,但是从数学论文到实际工作代码获得的公开访问示例似乎很少. 我有一个系统,该系统包含三轴加速度计和一个陀螺仪测量围绕加速度计轴之一的旋转.该系统旨在由人类持有,并且在大部分时间里,陀螺仪将测量重力矢量或靠近它的旋转. (在同一行业工作的人们可能会认识到我在说什么;)我意识到这是不受限制的. 陀螺仪似乎具有接近恒定的偏置,对于系统的每个实例,该偏差都略有不同.我将如何在系统倾斜时使用加速度计读数来使用加速度计读数来校准陀螺仪,以使陀螺轴不与重力共线,并且正在绕陀螺轴旋转?似乎应该有足够的信息来做到这一点,但是被告知没有,为什么也是一个答案:) 解决方案 其他解决方案 您似乎在这里有两个(或三个)单独的问题. 1.您真的不理解卡尔曼过滤器和/或它们背后的数学.这将使正确实施和使用一个. 2.您似乎不了解问题所涉及的
72 2023-09-03
编程技术问答社区
Qt调试错误。"在解析目标库列表时:格式不正确(无效标记)"
我正在调试使用QTCreator在QT/C ++开发的应用程序.我的应用程序使用QextSerialPort从串行端口读取,其中串行端口连接到犀牛标记IV Controller. int bytesRead; char buffer[BUFFER_SIZE]; if (_serialPort->bytesAvailable() > 0 && (bytesRead = _serialPort->read(buffer, BUFFER_SIZE)) > 0) { _comBuffer.append(buffer, bytesRead); buffer[bytesRead+1] = 0; // for debugging purposes qDebug(buffer); // for debugging purposes } 我对此有麻烦,因为我尝试阅读一些ASCII数据,但是我进入缓冲区的内容是一些奇怪的字符.例如,数字零('0'
24 2023-08-29
编程技术问答社区
如何在 Drake 工具箱中设置 IK 轨迹优化?
我读了多个资源,这些资源表明,Drake工具箱的非逆基金类别能够在两个时尚中解决IK:使用立方多项式轨迹的单发ik和IK轨迹优化. ( // Building a floating-base plant for Ik drake::multibody::MultibodyPlant plant{0.0005}; drake::multibody::Parser parser(&plant); std::string full_name = "model.urdf"; parser.AddModelFromFile(full_name); plant.Finalize(); drake::multibody::InverseKinematics ik(plant,true); // Constraints Eigen::Matrix q_ik_guess = Eigen::Matrix::Zero(); ik.ge
22 2023-08-21
编程技术问答社区
ROS: 发布主题无需 3 秒锁定
作为一个前提,我必须说我对Ros没有经验. 我正在尝试发布几条ROS消息,但是对于每次发布的发布,我都会收到"出版和锁存消息3.0秒",看起来它正在阻止3秒钟. 我将为您提供一个示例,说明我如何发布一条消息: rostopic pub -1 /heifu0/mavros/adsb/send mavros_msgs/ADSBVehicle "header: // then the rest of the message 我还尝试使用以下参数:-r 10,将消息频率设置为10Hz(确实确实如此),但仅用于第一个消息,即.它使每秒10次重新列出第一条消息. 基本上,我想在不锁定的情况下发布一条消息,如果可能的话,我可以一秒钟发布多个消息.我有一系列不断的消息来源,我需要尽可能快地发布它们. 解决方案 问题的一部分是rostopic CLI工具确实是要成为调试/测试的帮助者.它有您现在看到的某些局限性.不幸的是,即使是1次出版物,您也无法将其删除3秒钟的消息删
42 2023-08-21
编程技术问答社区
四旋翼飞行器距离 PID 控制器
我正在尝试使用PID控制器在水平行驶时在特定位置停止四轮驱动器,但是目前,它取决于最大速度.我尝试手动调整P,I和D的收益有限.从本质上讲,速度需要在飞行路径末端从麦克斯速提升到0. 我运行一个循环,该循环每秒钟执行每0.1秒. 四轮驱动器的螺距输入为m/s,我在每次迭代时重新计算到目标的距离. 一些伪代码 kP = 0.25 kI = 0.50 kD = 90 timeStep = 0.1 maxSpeed = 10 currentError = initialDistanceToLocation - currentDistanceToLocation derivativeError = (currentError - previousError) / timeStep previousError = currentError output = kP * currentError + kI * integralError + kD * derivativeError
74 2023-08-21
编程技术问答社区
使用 UiPath 的 Powershell
我正在用Uipath启动Powershell脚本.我需要从Uipath传达一个论点.首先,这是可能的,其次有人有一个例子吗?不确定在powershell脚本 中为此语法是什么 解决方案 是否可以将参数从Uipath传递到终端. 您的PowerShell脚本需要保存在TXT中 file.(pssampleParameters.txt) 代码示例(PSSampleParameters.txt): Param( [string]$computerName ) [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") [System.Windows.Forms.MessageBox]::Show($computerName) 添加"读取文本文件"活动,并在文件名上添加您的PowerShell脚本. 添加" Indoke Power Shell"活动,并确保将" C
42 2023-08-21
编程技术问答社区
平衡双轮机器人,使其不会向前/向后漂移
我正在尝试设计一个控制器,以平衡2轮机器人(约13公斤),并使其与外部力量保持强大(例如,如果有人踢它,它不应掉落,并且不会无限期地向前/向后漂移).我对大多数控制技术(LQR,滑动模式控制,PID等)的经验很有经验,但是我已经在网上看到大多数人使用LQR来平衡2轮机器人,因此我使用LQR. . 我的问题是,尽管我能够使机器人不掉落,但它迅速开始/向后无限期地开始,我也没有如何使其在地面上具有一定的位置.我想实现的是,当机器人被外部力量踢开时,它必须能够停止向前/向后移动,同时弥补平衡(不必在地面上占据地位,我只是希望机器人能够停止移动). 我可以从传感器访问的测量值是:两个车轮(x)上的位置,两个车轮的速度(x_dot),机器人的角度位置(theta),机器人的角速度(theta_dot). 从现在开始,我尝试了两种方法: 将所有参考信号设置为0,并尝试调整LQR增益.使用这种(简单)方法,我不确定增益K相对于X和Theta的系数是否应该具有相同的符号或相反的符号,因为例如,
6 2023-08-21
编程技术问答社区
如何将视觉 SLAM(ORB_SLAM2)与使用二维激光雷达和 IMU 检测到的障碍物进行融合,以获得机器人定位?
我想使用2D激光雷达和IMU将Visual Slam(ORB_SLAM2)与检测到的障碍物融合,以获得机器人定位(机器人的横向位置和标题).已经成功地使用了2D激光雷达检测到周围的障碍.因此,从我的代码中,我有障碍物的中心x,y和角度.在这里,障碍物检测代码.此外,scan_matching节点给出了2Dpose #include "../include/obstacle_detector.h" using namespace std; using namespace obstacle_detector; ObstacleDetector::ObstacleDetector() : nh_(""), nh_local_("~") { updateParams(); if (p_use_scan_) scan_sub_ = nh_.subscribe("/scan", 1, &ObstacleDetector::scanCallback, this); el
46 2023-08-21
编程技术问答社区
螺纹接头不旋转
机器人模拟包中的联系模型引起了一个问题,我尝试将IIWA操纵器定位为控制,以影响螺丝接头的身体. 我期望的是坚果向下发展.我看到的是末端效应在螺母上滑动,无法沿螺栓诱导螺母旋转. note: This is a continued investigation into 这个问题. 简化的实验是使用ExternallyAppliedSpatialForce,而不是操纵器. i在螺栓轴心中心的螺栓Z轴周围施加扭矩.扭矩的量为 1 nm .而且,这会产生所需的效果: 然后,我停止使用人工力量,然后再次尝试操纵,并结合ContactResultsToMeshcat的触点可视化: 我还打印了接触力量的幅度.力在50-200 n 的范围内. 但是螺母不会移动. 我的问题是,接下来要在哪里进行调查,当 1 nm 扭矩能够转动螺丝接头,而 200n 到目前为止,在观看了10次可视化重复后,我注意到在任何给定时刻,只有一根末端效应器的手指可以接触.因此,我认为,我
8 2023-08-21
编程技术问答社区
OpenScad-如何查找旋转-5 轴后的机械臂节点坐标
我发现了3个节点的坐标.我需要找到最后一个坐标,即水上彩色球体的坐标.这是我的代码.有人能帮我吗? 谢谢 启用动画在Moviment -fps:30步:300 模块 module spalla(){ translate([0,-50,0]) rotate([0,90,0]){ rotate([-90,0,0]){ cylinder(50,50,40,true,$fn=6); difference(){ union(){ translate([0,-20,50])cube([50,10,50],true); translate([0,20,50])cube([50,10,50],true); } trans
20 2023-08-12
编程技术问答社区
二维逆向运动学的实现
我试图在2D臂上实施反向运动学(由三个带有关节的棍子组成).我能够将最低臂旋转到所需的位置.现在,我有一些问题: 如何使上臂与第三个移动,从而使手臂的终点达到所需的点.我是否需要对两者使用旋转矩阵? 最低的手臂仅在一个方向上移动.我尝试了Google,他们说两个向量的交叉产品为手臂提供了方向,但这是3D.我使用两个2D矢量的2D和交叉产品给出标量.那么,我该如何确定其方向? plz的家伙将不胜感激. 预先感谢 vikram 解决方案 我会试一试,但是由于我的机器人学是过去二十年,请用一粒盐来服用. 我学到的方式,每个关节都是通过其自身旋转矩阵描述的,这些矩阵与当前位置和方向定义.然后,通过将旋转矩阵组合在一起来计算整个臂端点的坐标. 这完全实现了您要寻找的效果:您只能移动一个关节(更改其方向),并且所有其他关节都会自动遵循. 您将不会有太多机会在​​此处获取矩阵 - 实际上,如果您使用均匀的坐标,则所有联合计算(旋转和翻译)可以用矩阵乘法建模
34 2023-08-12
编程技术问答社区