稀疏稳定树规划器
sparse-rrt的Python项目详细描述
#sparse rrt planner的python绑定
此软件包基于sparse rrt项目https://bitbucket.org/pracsys/sparse-rrt/
此工作的主要目的是允许在python环境中运行sparse rrt planner。主要的贡献在于:原始包的
C++实验是从Python中执行的,在保持速度的同时,SVG可视化和统计
可控制的规划师系统可以完全用Python编写,而规划师则在C++中执行。这并不像它所说的那么慢——平均减速仅为系统传播的2-3x。规划师、公用事业和系统的
C++代码使用MODER C++ 11特性进行了大量的重构。Python绑定是使用PyBID11
C++实现的规划师、实用工具和系统,它们包含许多内存泄漏,从而防止多次运行计划。这在当前的实现中是固定的。
r/>
标准实验
在没有可视化的情况下运行标准预打包实验:
``python
来自稀疏rrt。实验导入运行标准实验
运行标准实验('sst汽车',可视化=false)
```
AR系统,用C++实现,打印输出统计。BR/>现在,统计的是迭代次数BR/>执行,节点的存储数量,以及在BR/>秒中的解长度。运行以下命令以获取它们的列表:
``python
from sparse_rrt.experiments import run_standard_experiment
for exp in available_standard_experiments():
print(exp)
````
visualization
可以在独立窗口中显示实现图像。本项目继承了基于原始C++代码库的SVG可视化。很少有方便的函数可以显示SVG图像、将其转换为RGB numpy数组或在窗口中显示它们。
可视化依赖项不包括在包依赖项中以便于安装。
以下是运行可视化可能需要安装的软件包:
-`pyside`或`cairosvg`-在python中呈现svg。` pyside的速度要快得多(安装时运行pip install pyside或pip install cairosvg)
-`pyside'或`python opencv`-打开窗口并显示numpy图像(`show_image`函数)。要安装opencv,可以按照https://www.learnopencv.com/install-opencv3-on-ubuntu/
-`svg write`-从python编写svg文件。只有在使用python编写的系统可视化时(安装run'pip install svgwrite`)
最简单的选项是只安装"pyside"。下面是如何使用可视化运行标准实验的方法。
``python
来自sparse-rrt。experiments import run-run-standard-experiment
run-standard-experiment('sst-car',visualization=true)
````
配置。配置示例可以在"实验"文件夹中找到。
您可以通过创建自己的配置来运行自定义实验。例如,下面将运行带有自定义目标点的点系统的RRT计划器:
``python
from sparse_rrt.experiment s.experiment_utils import run_config
point_config=dict(
system='point',
planner='rrt',
start_state=[9.,9.],
goal_state=[-9,9.],
目标半径=0.5,
随机种子=100,
积分步长=0.02,
最小时间步长=2,
最大时间步长=20,
个数运算量=300000,
显示类型='tree'
)
运行配置(点配置)
````
ath.
-`'nodes`:image windo显示树中每个节点的成本。较暗的节点表示成本较低(更好),而较浅的节点表示成本较高。
system_interface.issystem` interface。
要实现的主要功能是"propagate",负责系统动力学和碰撞检测。
有关详细文档,请参阅docstrings。提供了一个助手基类"sparse_rrt.systems.system_interface.basesystem",以便轻松创建最常见的系统。这里是2d中自由点的最简单示例:
``python
import numpy as np
from sparse\rrt.systems.system\u interface import basesystem
class free point(basesystem):
'
一个实现2d点的简单系统。它的控制包括速度和方向。
'
一个点的最小x,最大x=-10,10最小和最大x坐标
一个点的最小y,最大y=-10,10最小和最大y坐标
最小v,最大v=0,10。#最小和最大控制速度集成的开始状态
:param control:numpy数组,在集成过程中应用常量控件
:param num步骤:要集成的步骤数
:param integration步骤:集成的dt
:返回:系统的新状态
'
控制v=np.array([control[0]*np.cos(control[1]),控制[0]*np.sin(control[1]))
轨迹=开始状态+np.arange(步数)[:,无]*积分步数*控制v
状态=np.clip(轨迹[-1],[self.min-x,self.min-y],[self.max-x,self.max-y])
返回state
def visualize廑point(self,state):
'
将状态空间点投影到二维可视化平面
:参数state:状态点的numpy数组
:返回此状态点的可视化坐标的x,y
''
x=(state[0]-self.min_x)/(self.max_x-self.min_x)
y=(state[1]-self.min_y)/(self.max_y-self.min_y)
返回x,y
def get_u state_u bounds(self):
'
返回状态空间的界限
:返回(min,m)列表ax)状态空间中每个坐标的界限
'
返回[(self.min_x,self.max_x),
(self.min_y,self.max_y)]
def get_u control_x界限(self):
'
返回控制空间的界限
:返回:列表(min,max)控制空间中每个坐标的界限
'
返回[(self.min_v,self.max_v),
(self.min_theta,self.max_theta)]
def是圆形拓扑(self):
'
指示状态系统是否具有平面或圆形顶部logy
:return:每个坐标的布尔标志(平面拓扑为false)
'
return[false,false]
```
OM模拟完全从头开始:
`` python
从稀疏资源导入sst
system=freepoint()
目标半径=0.5,
随机种子=0,
sstδu近=0.4,
sstδu漏=0.2
)
==0:
solution=planner.get_solution()
打印("解决方案:%s,节点数:%s"%(planner.get_solution(),planner.get_nodes()))
```
此软件包基于sparse rrt项目https://bitbucket.org/pracsys/sparse-rrt/
此工作的主要目的是允许在python环境中运行sparse rrt planner。主要的贡献在于:原始包的
C++实验是从Python中执行的,在保持速度的同时,SVG可视化和统计
可控制的规划师系统可以完全用Python编写,而规划师则在C++中执行。这并不像它所说的那么慢——平均减速仅为系统传播的2-3x。规划师、公用事业和系统的
C++代码使用MODER C++ 11特性进行了大量的重构。Python绑定是使用PyBID11
C++实现的规划师、实用工具和系统,它们包含许多内存泄漏,从而防止多次运行计划。这在当前的实现中是固定的。
r/>
标准实验
在没有可视化的情况下运行标准预打包实验:
``python
来自稀疏rrt。实验导入运行标准实验
运行标准实验('sst汽车',可视化=false)
```
AR系统,用C++实现,打印输出统计。BR/>现在,统计的是迭代次数BR/>执行,节点的存储数量,以及在BR/>秒中的解长度。运行以下命令以获取它们的列表:
``python
from sparse_rrt.experiments import run_standard_experiment
for exp in available_standard_experiments():
print(exp)
````
visualization
可以在独立窗口中显示实现图像。本项目继承了基于原始C++代码库的SVG可视化。很少有方便的函数可以显示SVG图像、将其转换为RGB numpy数组或在窗口中显示它们。
可视化依赖项不包括在包依赖项中以便于安装。
以下是运行可视化可能需要安装的软件包:
-`pyside`或`cairosvg`-在python中呈现svg。` pyside的速度要快得多(安装时运行pip install pyside或pip install cairosvg)
-`pyside'或`python opencv`-打开窗口并显示numpy图像(`show_image`函数)。要安装opencv,可以按照https://www.learnopencv.com/install-opencv3-on-ubuntu/
-`svg write`-从python编写svg文件。只有在使用python编写的系统可视化时(安装run'pip install svgwrite`)
最简单的选项是只安装"pyside"。下面是如何使用可视化运行标准实验的方法。
``python
来自sparse-rrt。experiments import run-run-standard-experiment
run-standard-experiment('sst-car',visualization=true)
````
配置。配置示例可以在"实验"文件夹中找到。
您可以通过创建自己的配置来运行自定义实验。例如,下面将运行带有自定义目标点的点系统的RRT计划器:
``python
from sparse_rrt.experiment s.experiment_utils import run_config
point_config=dict(
system='point',
planner='rrt',
start_state=[9.,9.],
goal_state=[-9,9.],
目标半径=0.5,
随机种子=100,
积分步长=0.02,
最小时间步长=2,
最大时间步长=20,
个数运算量=300000,
显示类型='tree'
)
运行配置(点配置)
````
ath.
-`'nodes`:image windo显示树中每个节点的成本。较暗的节点表示成本较低(更好),而较浅的节点表示成本较高。
system_interface.issystem` interface。
要实现的主要功能是"propagate",负责系统动力学和碰撞检测。
有关详细文档,请参阅docstrings。提供了一个助手基类"sparse_rrt.systems.system_interface.basesystem",以便轻松创建最常见的系统。这里是2d中自由点的最简单示例:
``python
import numpy as np
from sparse\rrt.systems.system\u interface import basesystem
class free point(basesystem):
'
一个实现2d点的简单系统。它的控制包括速度和方向。
'
一个点的最小x,最大x=-10,10最小和最大x坐标
一个点的最小y,最大y=-10,10最小和最大y坐标
最小v,最大v=0,10。#最小和最大控制速度集成的开始状态
:param control:numpy数组,在集成过程中应用常量控件
:param num步骤:要集成的步骤数
:param integration步骤:集成的dt
:返回:系统的新状态
'
控制v=np.array([control[0]*np.cos(control[1]),控制[0]*np.sin(control[1]))
轨迹=开始状态+np.arange(步数)[:,无]*积分步数*控制v
状态=np.clip(轨迹[-1],[self.min-x,self.min-y],[self.max-x,self.max-y])
返回state
def visualize廑point(self,state):
'
将状态空间点投影到二维可视化平面
:参数state:状态点的numpy数组
:返回此状态点的可视化坐标的x,y
''
x=(state[0]-self.min_x)/(self.max_x-self.min_x)
y=(state[1]-self.min_y)/(self.max_y-self.min_y)
返回x,y
def get_u state_u bounds(self):
'
返回状态空间的界限
:返回(min,m)列表ax)状态空间中每个坐标的界限
'
返回[(self.min_x,self.max_x),
(self.min_y,self.max_y)]
def get_u control_x界限(self):
'
返回控制空间的界限
:返回:列表(min,max)控制空间中每个坐标的界限
'
返回[(self.min_v,self.max_v),
(self.min_theta,self.max_theta)]
def是圆形拓扑(self):
'
指示状态系统是否具有平面或圆形顶部logy
:return:每个坐标的布尔标志(平面拓扑为false)
'
return[false,false]
```
OM模拟完全从头开始:
`` python
从稀疏资源导入sst
system=freepoint()
目标半径=0.5,
随机种子=0,
sstδu近=0.4,
sstδu漏=0.2
)
==0:
solution=planner.get_solution()
打印("解决方案:%s,节点数:%s"%(planner.get_solution(),planner.get_nodes()))
```