第九章策略梯度算法
理论讲解部分过于简单,可参考强化学习教程相关章节
terrain_analysis参数解读
1. terrain_analysis scanVoxelSize 点云下采样的分辨率 decayTime 点云衰减时间阈值,即点云数据在多长时间后会被视为过时并从地图中移除 noDecayDis 豁免点云衰减的距离阈值参数,保护车辆周围一定范围内的点云数据,即使这些数据的时间戳超过了 阈值也不会被移除 clearingDis 手动触发点云清除的距离阈值,允许用户或外部指令清除车辆周围指定范围内的所有点云数据 useSorting 决定是否使用排序分位数法来估计每个平面体素的地面高度。启用后抗噪声能力强,但计算量略大 quantileZ 地形高程估计的保守程度,决定了从排序后的点云高度数据中选择哪个分位数的值作为地面高度的估计。需要useSorting设为True才会发挥作用 considerDrop 它决定是否将点云相对于地面的高度差的 绝对值用于障碍物判断,设为True同时考虑高于地面 的障碍物和低于地面的凹陷,否则只关注高于地面的障碍物 limitGroundLift 是否限制地面高程估计的最大抬升幅度(相对于该体素内的最低点),避免因噪声或离群点导致的地...
local_planner参数解读
1. localPlanner中的参数 pathFolder 存放离线待选路径的位置 vehicleLength 机器人车体长度 vehicleWidth 机器人车体宽度 sensorOffsetX 传感器相对于车辆中心的 X 轴偏移量,右手坐标系 sensorOffsetY 传感器相对于车辆中心的 Y 轴偏移量 twoWayDrive 能否倒车行驶 laserVoxelSize 激光雷达点云的降采样体素网格大小 terrainVoxelSize 地形点云的降采样体素网格大小 useTerrainAnalysis 是否启用地形分析,决定了是使用原始激光雷达点云还是预处理后的地形点云进行障碍物检测和路径决策 checkObstacle 是否启用障碍物检测,决定了是使用原始激光雷达点云还是预处理后的地形点云进行障碍物检测和路径决策 checkRotObstacle 是否检测车辆旋转时车身与障碍物的碰撞风险 adjacentRange 路径规划时考虑障碍物的最大范围和路径搜索范围 obstacleHeightThre 障碍物高度阈值,当点云的intensity即地形...
TARE代码解读
本代码主只是用来做自主探索时的上层路径规划和重定位 exploration_path keypose_graph navigation_boundary_publisher rolling_grid tare_planner_node utils graph lidar_model planning_env rolling_occupancy_grid tare_visualizer viewpoint grid_world local_coverage_planner pointcloud_manager sensor_coverage_planner tsp_solver viewpoint_manager 1. exploration_path 实现探索路径的类 2. keypose_graph 3. navigation_boundary_publisher 在Matterport3D 仿真环境时,从src/tare_planner/data/boundary.ply文件读取探索边界信息并发送出去 输入为空 输出为/navigation_boundary 4. rol...
AEDE代码解读
本代码主只是用来做局部路径规划和小范围避障 1. joystick_drivers 包含不同手柄遥操作的各种代码,实车部署不需要,可以删去 2. loam_interface 用来桥接不同slam算法,通过修改loam_interface.launch可以使此项目适配各种slam算法。修改规则可参考State Estimation Setup Notes 输入为不同slam算法输出的stateEstimationTopic和registeredScanTopic 输出为/state_estimastion和/registered_scan话题名 3. sensor_scan_generation 将世界坐标系下的点云转换至传感器Lidar坐标系下,并以与扫描消息相同的频率和时间戳发布状态估计消息。这些信息会提供给上层规划模块使用 输入为/state_estimation和/registered_scan 输出为/state_estimation_at_scan(等同于/state_estimation)和/sensor_scan(世界坐标系下的点云转换至传感器Lidar坐标系下...
使用uv
1. uv安装 直接使用Python自带的pip安装,兼容性最佳 pip install uv 随后将pip安装的包导入到环境变量中,在.bashrc或者.zshrc中添加 export PATH="$HOME/.local/bin:$PATH" 使用source ~/.zshrc刷新 2. 基础用法 2.1 创建项目 首先设定python版本 uv python pin 3.13 uv init 2.2 添加依赖 添加numpy库 uv add numpy 添加指定版本的numpy库 uv add numpy>=2.0.2 2.3 移除依赖 移除numpy库 uv remove numpy 2.4 查看项目的依赖树 uv tree 2.5 创建虚拟环境 创建一个虚拟环境,并指定Python版本 uv venv my-name --python 3.11 2.6 激活虚拟环境 source .venv/bin/activate 2.7 退出虚拟环境 deactivate 2.8 在uv中使用pip uv pip install 3. 换源 uv换源包括两个方面一个是依赖包的源另一...
Linux创建新用户
1. 创建用户 1.1 法一:使用 adduser 命令创建新用户 在某些基于Debian的Linux发行版中,可以使用adduser命令,会提供交互式操作。 sudo adduser 新用户名 1.2 法二:使用 useradd 命令创建新用户 在 Linux 系统中,可以使用useradd这个通用命令来创建新用户 sudo useradd -m -s /bin/bash 新用户名 -d 指定用户的家目录 -s 指定用户的默认shell,可写为/bin/zsh -m 为新用户在 /home 目录下创建一个新的家目录 给新用户设置一个密码 sudo passwd 新用户名 2. 赋予root权限 2.1 法一:使用 adduser 命令 在某些基于Debian的Linux发行版中,可以使用adduser命令 sudo adduser newuser sudo 2.2 法二:修改/etc/sudoers文件 sudo vim /etc/sudoers 在文件中找到如下命令 ## Allow root to run any commands anywhere root AL...
符号说明
随机变量用大写字母表示如XXX 随机变量序列用小写字母表示如sss
第二章马尔可夫决策过程
在强化学习中,智能体与化境的交互过程可以通过马尔可夫决策过程来表示,马尔可夫决策过程是强化学习的基本框架 本章首先介绍马尔可夫过程(Markov process,MP)以及马尔科夫奖励过程(Markov reward process,MRP)。二者比较得到马尔科夫决策过程(Markov decision process,MDP)。其次介绍马尔科夫决策过程中的策略评估(policy evaluation)。最后介绍马尔科夫决策过程中的控制,分为策略迭代(policy iteration)和价值迭代(value iteration) 1. 马尔可夫过程 1.1 马尔可夫性质 马尔可夫性质(Markov property)是指未来状态的条件概率分布仅依赖于当前状态。假设X0,X1,⋯ ,XtX_0,X_1,\cdots,X_tX0,X1,⋯,Xt构成随机过程,如果具有马尔可夫性质则 p(Xt+1=xt+1∣X0:t=x0:t)=p(Xt+1=xt+1∣Xt=xt)p \left( X_{t+1}=x_{t+1} | X_{0:t}=x_{0:t} \right) = p \lef...
基于搜索的路径规划
算法流程 维护一个容器用来存储待访问的节点;维护一个数组用来标记已访问的节点;维护一个数组用来标记父节点 进行初始化 循环遍历容器: 按照预设规则弹出容器中的节点,将这个节点标记为已访问 如果弹出的节点是终点,则证明找出路径,根据父节点回溯整条路经,结束 扩展邻居节点,将未访问过且非障碍物的节点按着某种顺序放入容器中,记录父节点 结束 1. 广度优先与深度优先 1.1 广度优先(BFS) 广度优先算法使用的容器为队列(queue),遵循的规则是先进先出。 1.2 深度优先(DFS) 深度优先算法使用的容器为栈(stack),遵循的规则是先进后出。 1.3 二者对比 二者都只能用于各边代价相同的情况。 BFS能找到全局最优解,但是速度比较慢 DFS不一定能找到全局最优解,但是速度比较快 Djikstra算法需要维护一个容器用来记录每个节点的cost,当扩展节点未被扩展过则cost为inf,当这次扩展时cost小于记录的cost则更新,并添加到open_list里面 若是不判断cost,则每次扩展都会把扩展的节点添加进去,虽然最优队列会保证被访问的节点一定是...