资料整理供个人学习使用。
需要安装 navigation 包,才可以运行 move_base。
move_base 包默认算法:
move_base 需要设置六个部分的参数
<;launch>;
<;node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">;
<;rosparam file="$(find xxx)/param/costmap_common_params.yaml" command="load" ns="global_costmap" />;
<;rosparam file="$(find xxx)/param/costmap_common_params.yaml" command="load" ns="local_costmap" />;
<;rosparam file="$(find xxx)/param/local_costmap_params.yaml" command="load" />;
<;rosparam file="$(find xxx)/param/global_costmap_params.yaml" command="load" />;
<;rosparam file="$(find xxx)/param/base_local_planner_params.yaml" command="load" />;
<;rosparam file="$(find xxx)/param/base_global_planner_params.yaml" command="load" />;
<;rosparam file="$(find xxx)/param/move_base_params.yaml" command="load" />;
<;remap from="/cmd_vel" to="/cmd_vel"/>;
<;/node>;
<;/launch>;
move_base 自身的参数是为了控制其他模块,有着相应的关联性
注意:当全局路径规划无法到达目标点时,才会执行这个恢复模块
全局代价地图和局部代价地图都衍生于 costmap_2d 功能包,参数设置也是一样的,但是考虑到路径规划和避障的职能不同,可以采用不同的参数策略。
全局代价地图可以将膨胀半径设置更大,障碍物系数设置更高,从而使得路径规划中,能够得到远离障碍物的规划路径。
而在局部规划中,为了避免避障陷入困境,可以设置小一点的膨胀半径和障碍物系数,使得机器人能够绕过障碍物。
下面为设置代价地图的尺寸和精度参数
全局坐标到机器人底座的变换信息,可由AMCL等发布
代价地图包含多个地图层
公式如下 exp(-1.0 * cost_scaling_factor * (distance_from_obstacle - inscribed_radius)) * (costmap_2d::INSCRIBED_INFLATED_OBSTACLE - 1)
其中 costmap_2d::INSCRIBED_INFLATED_OBSTACLE=254 也就是说代价值最大为 253
参数设置与全局相似,只是参数的策略上可能会不同
局部规划器使用局部代价地图,实现在全局规划路径上的避障功能
速度参数配置
目标误差参数
前向仿真系数
轨迹评分参数
避免振荡参数
缺点:如果起点和终点之间存在障碍物,则最佳优先算法找到的很可能不是最短路径
f(n) 是节点 n 的综合优先级。当我们选择下一个要遍历的节点时,我们总会选取综合优先级最高(值最小)的节点。
启发函数:控制算法的速度和精确度
优点
缺点
优点
缺点
teb 在运动过程中会调整自己的位姿朝向,当到达目标点时,通常机器人的朝向也是目标朝向而不需要旋转。
dwa 则是先到达目标坐标点,然后原地旋转到目标朝向。
move_base 更换全局路径规划算法(A、Dijkstra、DWA)
A、Dijkstra属于全局路径规划、DWA属于局部路径规划。
move_base.launch 文件需要添加以下内容:
<;!--加载A star、Dijkstra算法-->;
<;param name="base_global_planner" value="global_planner/GlobalPlanner"/>;
<;param name="planner_frequency" value="1.0" />;
<;param name="planner_patience" value="5.0" />;
<;!--加载DWA算法-->;
<;param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />;
整体的 move_base.launch 文件内容如下(其中 xxx 内容需要修改为对应自己的包):
<;launch>;
<;!-- Arguments -->;
<;arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>;
<;arg name="cmd_vel_topic" default="/cmd_vel" />;
<;arg name="odom_topic" default="/odom" />;
<;arg name="move_forward_only" default="false"/>;
<;!-- move_base -->;
<;node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">;
<;!--加载A star算法-->;
<;param name="base_global_planner" value="global_planner/GlobalPlanner"/>;
<;param name="planner_frequency" value="1.0" />;
<;param name="planner_patience" value="5.0" />;
<;!--加载DWA算法-->;
<;param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />;
<;!---->;
<;rosparam file="$(find xxx)/param/costmap_common_params_$(arg model).yaml" command="load" ns="global_costmap" />;
<;rosparam file="$(find xxx)/param/costmap_common_params_$(arg model).yaml" command="load" ns="local_costmap" />;
<;rosparam file="$(find xxx)/param/local_costmap_params.yaml" command="load" />;
<;rosparam file="$(find xxx)/param/global_costmap_params.yaml" command="load" />;
<;rosparam file="$(find xxx)/param/move_base_params.yaml" command="load" />;
<;rosparam file="$(find xxx)/param/dwa_local_planner_params_$(arg model).yaml" command="load" />;
<;remap from="cmd_vel" to="$(arg cmd_vel_topic)"/>;
<;remap from="odom" to="$(arg odom_topic)"/>;
<;param name="DWAPlannerROS/min_vel_x" value="0.0" if="$(arg move_forward_only)" />;
<;/node>;
<;/launch>;
planner_core.cpp 文件是 navigation 包中的文件,其具体目录如下(对应自己的路径):
修改如下内容:
private_nh.param("use_dijkstra", use_dijkstra, false);
此句 true 为使用 dijkstra 算法,false 为使用 A star 算法。
ROS_INFO("use_dijkstra");
ROS_INFO("use_A_star");
此句可以在运行路径规划时,查看自己使用的是 dijkstra 还是 A star。
注意:修改完代码之后,需要删除 build 和 devel 文件,重新 catkin_make 编译。
原因:膨胀半径设置问题,需要自己设置,最简单方法是将膨胀半径设置为机器人外切圆。
问题:机器人在运行时会出现倒着走的现象。
解决:将 base_local_planner_params.yaml 中 holonomic_robot 参数改为 false;
holonomic_robot参数意义:代表是否是全向机器人。
参考:
通信工程专业毕业,7年开发经验
精通c/c++
精通golang
熟悉常见的脚本,js,lua,python,php
熟悉电路基础,嵌入式,单片机
服务端开发
嵌入式开发
>gin接口代码CURD生成工具
sql ddl to struct and markdown,将sql表自动化生成代码内对应的结构体和markdown表格格式,节省宝贵的时间。
qt .ui文件转css文件
duilib xml 自动生成绑定控件代码
协议调试器
基于lua虚拟机的的协议调试器软件 支持的协议有:
串口
tcp客户端/服务端
udp 组播/udp节点
tcp websocket 客户端/服务端
软件界面
使用例子: 通过脚本来获得接收到的数据并写入文件和展示在界面上
下载地址和源码
webrtc easy demo
webrtc c++ native 库 demo 实现功能:
基于QT
webrtc摄像头/桌面捕获功能
opengl渲染/多播放窗格管理
janus meeting room
下载地址和源码
wifi,蓝牙 - 无线开关
实现功能:
通过wifi/蓝牙实现远程开关电器或者其他电子设备
电路原理图:
实物图:
深度学习验证工具
虚拟示波器
硬件实物图:
实现原理
基本性能
采集频率: 取决于外部adc模块和ebaz4205矿板的以太网接口速率,最高可以达到100M/8 约为12.5MPS
上位机实现功能: 采集,显示波形,存储wave文件。
参数可运行时配置
上位机:
显示缓冲区大小可调
刷新率可调节
触发显示刷新可调节
又一个modbus调试工具
最近混迹物联网企业,发现目前缺少一个简易可用的modbus调试工具,本软件旨在为开发者提供一个简单modbus测试工具。
主打一个代码简单易修改。
特点:
1. 基于QT5
2. 基于libmodbus
3. 三方库完全跨平台,linux/windows。
开源plutosdr 板卡
1. 完全开源
2. 提高固件定制服务
3. 硬件售价450 手焊产量有线
测试数据
内部DDS回环测试
接收测试
外部发送500MHZ FM波形
matlab测试
2TRX版本
大部分plutosdr应用场景都是讲plutosdr板卡作为射频收发器来使用。
实际上plutosdr板卡本身运行linux 操作系统。是具有一定脱机运算的能力。
对于一些微型频谱检测,简单射频信号收发等应用完全可以将应用层直接实现在板卡上
相较于通过网卡或者USB口传输具有更稳定,带宽更高等优点。
本开源板卡由于了SD卡启动,较原版pluto支持了自定义启动应用的功能。
提供了应用层开发SDK(编译器,buildroot文件系统)。
通过usb连接电脑,经过RNDIS驱动可以近似为通过网卡连接
(支持固件的开发定制)。
二次开发例子
```
all:
arm-linux-gnueabihf-gcc -mfloat-abi=hard --sysroot=/root/v0.32_2trx/buildroot/output/staging -std=gnu99 -g -o pluto_stream ad9361-iiostream.c -lpthread -liio -lm -Wall -Wextra -lrt
clean:
rm pluto_stream
版面分析即分析出图片内的具体文件元素,如文档标题,文档内容,文档页码等,本工具基于cnstd模型