我想得到一些想法,你们中的一些人会如何解决这个问题.我有一个机器人,运行linux并使用网络摄像头(带有v4l2驱动程序)作为其传感器之一.我用gtkmm写了一个控制面板.服务器和客户端都是用C++编写的.服务器是机器人,客户端是"控制面板".图像分析发生在机器人上,我想将视频从摄像机流回控制面板有两个原因:A)有趣B)叠加图像分析结果
所以我的问题是,有什么好的方法可以将视频从网络摄像头传输到控制面板,以及优先使用机器人代码来处理它?我对编写自己的视频压缩方案并将其放入现有的网络端口感兴趣,我认为新的网络端口(专用于视频数据)是最好的.问题的第二部分是如何在gtkmm中显示视频?视频数据是异步到达的,我无法控制gtkmm中的main(),所以我觉得这很棘手.
我愿意使用像vlc,gstreamer或任何其他我不了解的通用压缩库这样的东西.
谢谢!
编辑:该机器人有一个1GHz的处理器,运行像Linux版本的桌面,但没有X11.
势场法是一种非常流行的机器人导航模拟.但是,有没有人在真实机器人上实施势场方法?在真实机器人中使用该方法的任何参考或任何声明?
如何在 3d 中计算通过 3 个点 A、B、C 的弧。从 A 到 C 通过 B(处理顺序)。
大多数机器人手臂都有这种移动命令。我需要模拟它并对它应用不同的速度动态,因此需要一个参数 0..1 将位置从 A 移动到 C。
编辑:
我所拥有的是圆弧的半径和中心,但是如果我知道开始和结束角度,我如何在 3d 中参数化圆?
编辑2:
越来越近。如果我在圆所在的平面上有两个单位长度的垂直向量 v1 和 v2,我可以进行如下参数化:x (t) = c + r * cos(t) * v1 + r * sin(t) * v2
所以我取v1 = ac,我现在只需要找到v2。有任何想法吗?
我计划通过集成3D深度传感器(如Kinect或Asus Xtion Pro)来提供预制机器人3D视觉.这是我能找到的唯一两个我想象的还有更多正在构建或已经存在的东西.
有没有人对我可以使用的硬件有任何建议,或者哪两个对于集成到ROS(机器人操作系统)的开源项目更好.
语境
我的任务是设计和构建一个微型四轴飞行器的速度 PID 控制器,而不是室内的苍蝇。四轴飞行器飞行的房间配备了基于摄像头的高精度室内跟踪系统,可为四轴飞行器提供速度和位置数据。由此产生的系统应该能够接受每个轴(x、y、z)的目标速度并以该速度驱动四轴飞行器。
四轴飞行器的控制输入是滚转/俯仰/偏航角和高度的推力百分比。
我的想法是为每个轴实现一个 PID 控制器,其中 SP 是该方向上的所需速度,测量值是跟踪系统提供的速度,输出值是滚转/俯仰/偏航角和推力百分比。
不幸的是,因为这是我第一次接触控制理论,我不确定我是否朝着正确的方向前进。
问题
我了解基本的 PID 控制器原理,但我仍然不清楚它如何仅通过对误差求和并乘以常数将速度(m/s)转换为滚转/俯仰/偏航(弧度)?是的,速度和滚转/俯仰成正比,所以这是否意味着乘以正确的常数会产生正确的结果?
对于垂直速度控制器的情况,如果速度设置为 0,四轴飞行器实际上应该只是保持其高度而不上升或下降。如何将其与 PID 控制器集成,以便在误差实际为 0 时推力值不为 0(应保持悬停,而不是下降)?我应该在输出中添加一个常数项吗?
系统实施后,调整 PID 增益参数的好方法是什么?手动试错?
系统开发的下一步是位置 PID 控制器的附加层,它将所需位置 (x,y,z) 作为设定点,测量位置由室内跟踪系统提供,输出为 x/y /z 速度。这是一个好方法吗?分离这些 PID 控制层的原因是该项目是促进可重用性的更大框架的一部分。仅使用单层 PID 控制器直接将位置坐标作为设定值并输出滚转/俯仰/偏航/推力值会更好吗?
我正在网上查找有关 Haskell 及其应用程序的信息。基本上我试图学习函数式编程语言,我发现 Haskell 在其中非常有名。我想知道的是,在机器人技术中是否可以使用 Haskel 来替代 c?我可以使用 Haskell 进行嵌入式系统编程并从传感器获取数据、移动电机、实现用于设计机器人及其行为的数学模型,并在可能的情况下应用机器学习算法吗?
我刚刚开始涉足这个领域,所以如果问题足够幼稚,请像回答任何新手一样回答。
更新:如果问题太宽泛,我想知道具体细节。在大多数情况下,人们是否将 haskell 编译到嵌入式硬件或使用 haskell 作为远程控制?哪一种使用 haskell 更容易上手?在硬件嵌入式编程中使用haskell的一般方式是什么?如果只是作为遥控器使用,如何使用haskell实现遗传算法和机器学习算法?我知道它太广泛了,但如果我的要求是这样的话,我只想知道一般用法。
我对最佳优先搜索算法有一些疑问。我拥有的伪代码如下: 最佳优先搜索伪代码
第一个问题:是否完整?我读过这不是因为它可以进入死胡同,但我不知道什么时候会发生,因为如果算法选择一个没有更多邻居的节点,它不会卡在其中,因为这个节点被删除从开放列表中,在下一次迭代中,开放列表的下一个节点被处理并继续搜索。
第二个疑问:它是最优的吗?我认为,如果它在搜索过程中访问更接近目标的节点,那么解决方案将是最短的,但事实并非如此,我不知道这样做的原因,因此,导致这种情况的原因算法不是最优的。
我使用的启发式方法是两点之间的直线距离。
谢谢你的帮助!!
robotics artificial-intelligence heuristics path-finding best-first-search
我有一个机器人 URDF,它使用“package://”指向网格文件。
<geometry>
<mesh filename="package://a1_rw/meshes/hip.dae" scale="1 1 1"/>
</geometry>
Run Code Online (Sandbox Code Playgroud)
我想使用 urdfpy 来解析这个 URDF。但是,它无法解释“package://”的含义。
import os
from urdfpy import URDF
a1_rw = {
"model": "a1",
"csvpath": "a1_rw/urdf/a1_rw.csv",
"urdfpath": "a1_rw/urdf/a1_rw.urdf"
}
model = a1_rw
curdir = os.getcwd()
path_parent = os.path.dirname(curdir)
print("path parent = ", path_parent)
model_path = model["urdfpath"]
robot = URDF.load(os.path.join(path_parent, model_path))
Run Code Online (Sandbox Code Playgroud)
这是错误消息:
$ python3.8 calc_parallax.py
path parent = /home/ben/Documents/git_workspace/a1_test
Traceback (most recent call last):
File "calc_parallax.py", line 18, in <module>
robot = URDF.load(os.path.join(path_parent, model_path))
File "/home/ben/.local/lib/python3.8/site-packages/urdfpy/urdf.py", line 3729, in load
return …Run Code Online (Sandbox Code Playgroud) 除了Arduino之外,还有哪些方法可以亲自学习硬件编程?是否有任何漂亮的工具包,既可以是预先组装好的机器人,也可以按照某种方式进行编程,或做某些事情,或类似的事情?
我正在尝试使用numpy数组创建一个计算机器人手臂末端效应器位置的函数,但是在代码运行时遇到错误.我有一个以角度作为参数传递的函数.
def FinalPosition(angle1, angle2, angle3, angle4, angle5, angle6):
Run Code Online (Sandbox Code Playgroud)
我的IDE突出显示了数组的最后两行:
T1 = np.array([np.cos(angle1), -np.sin(angle1)*np.cos(b1), np.sin(angle1)*np.sin(b1), a1*np.cos(angle1)],
[np.sin(angle1), np.cos(angle1)*np.cos(b1), -np.cos(angle1)*np.sin(b1), a1*np.sin(angle1)],
[0, np.sin(b1), np.cos(b1), d1],
[0, 0, 0, 1])
Run Code Online (Sandbox Code Playgroud)
而我得到的错误是:
.............................................in FinalPosition
[0, np.sin(b1), np.cos(b1), d1], [0, 0, 0, 1])
ValueError: only 2 non-keyword arguments accepted
Run Code Online (Sandbox Code Playgroud)
不确定问题是什么,有人可以解释一下吗?
编辑:最后两行的IDE高亮显示了这一点.
Expected type 'Optional[bool]', got 'List[Union[int | TypeVar('T'), Any]]' instead less... (Ctrl+F1 Alt+T)
Run Code Online (Sandbox Code Playgroud)
此检查检测函数调用表达式中的类型错误.由于动态调度和鸭子打字,这在有限但有用的情况下是可能的.函数参数的类型可以在文档字符串或Python 3函数注释中指定.