Loadsh 的_.every 和 _.some的使用方法

本文介绍了Loadsh插件中_.every和_.some的用法。_.every用于检查集合元素是否都返回真值,只要有一次假值遍历就停止并返回false;_.some功能相反,检查是否存在任意真值元素,有一次真值遍历就停止并返回true,还结合ES6中Map用法辅助理解。

loadsh这款插件用的人还是比较多的,好了话不多少,我遇到理解_.every的问题,下面开始吧

_.every
返回值 (boolean)
通过 predicate 检查集合中的元素是否都返回 真值,只要 predicate 返回一次假值,遍历就停止,并返回 false。

// 这个是里面进行遍历判断,是不是都为true, 因为null 的布尔值是false ,所以结果就是布尔值
_.every([true, 1, null, 'yes'], Boolean);
// => false

我们来看看下面这个例子吧

var users = [
  { 'user': 'barney', 'active': false },
  { 'user': 'fred',   'active': false }
];

// 这个意思的是判断users数组 是不是每一个都是 包含 { 'user': 'barney', 'active': false },显然第二个不是,所以返回了 false
_.every(users, { 'user': 'barney', 'active': false });
// => false

// 看下面这个 ['active', false] 第一次我也很懵逼,以为这个是数组,就完全没理解,结果他是key value 的形式 因为users中 都是 'active': false 所以结果返回了true
_.every(users, ['active', false]);   // => true

// 这个为什么是false 因为active 的value值 是false, 所以返回的就是 false了
_.every(users, 'active'); // => false

我们来讲讲 _.every(users, [‘active’, false]); // => true
为什么 会说([‘active’, false])是 key value的形式呢,请你看一下 下面ES6中Map的用法吧,是不是感觉豁然开朗了

const map = new Map([
  ['F', 'no'],
  ['T',  'yes'],
]);   // => Map(2) {"F" => "no", "T" => "yes"}

那么 与 _every 功能相反的用法是 _.some

通过 predicate 检查集合中的元素是否存在任意真值的元素,只要 predicate 返回一次真值,遍历就停止,并返回 true

// 因为字符串 "yes" 作为布尔值返回的是true,这里是 有一个返回值是真的,就返回true
_.some([null, 0, 'yes', false], Boolean);
// => true

var users = [
  { 'user': 'barney', 'active': true },
  { 'user': 'fred',   'active': false }
];

// 因为这里没有一个符合 { 'user': 'barney', 'active': false } 这个条件,所以返回了false
_.some(users, { 'user': 'barney', 'active': false });
// => false

// 这里是['active', false] 使用了key value 形式 {"active": false} 明显users 中有包含这个属性的 所以结果是 true
_.some(users, ['active', false]);
// => true

// 因为active 中的value值, 有返回true的  所以它的结果是 返回了true
_.some(users, 'active');
// => true

如果这篇文章 对你有用处,点个赞呗,谢谢

### 调整 Cartographer ROS 3D 建图参数以优化性能 在解决 `cartographer_node` 进程异常退出(`exit code -9`)的问题时,需要重点调整 `TRAJECTORY_BUILDER_3D` `POSE_GRAPH` 参数以优化 3D 建图性能。以下是详细的配置建议代码示例: #### 配置文件优化 ##### 1. `TRAJECTORY_BUILDER_3D` 参数调整 `TRAJECTORY_BUILDER_3D` 是负责轨迹构建的核心模块,其参数设置直接影响内存消耗计算复杂度。以下是一些关键参数的优化建议[^1]: - **子地图分辨率**:降低分辨率可以减少内存占用。例如,将 `submaps.resolution` 设置为 `0.05` 或更高值。 ```lua TRAJECTORY_BUILDER_3D.submaps.resolution = 0.05 ``` - **点云数据处理**:限制每次处理的点云数量,避免过载。例如,将 `num_point_clouds` 设置为 `1`。 ```lua options.num_point_clouds = 1 ``` - **传感器融合频率**:减少传感器数据的处理频率,降低计算负担。例如,将 `motion_filter.max_time_seconds` 设置为 `0.2`。 ```lua TRAJECTORY_BUILDER_3D.motion_filter.max_time_seconds = 0.2 ``` ##### 2. `POSE_GRAPH` 参数调整 `POSE_GRAPH` 模块负责全局优化闭环检测,其参数对性能影响显著。以下是一些优化建议[^2]: - **优化频率**:增加 `optimize_every_n_nodes` 的值,减少全局优化次数。 ```lua POSE_GRAPH.optimize_every_n_nodes = 50 ``` - **约束生成条件**:提高最小分数阈值,减少不必要的约束生成。 ```lua POSE_GRAPH.constraint_builder.min_score = 0.65 ``` - **回环检测距离**:增加 `max_distance` `max_angle` 的值,减少回环检测的计算量。 ```lua POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher.linear_x_y_search_window = 7 POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher.angular_search_window = math.rad(30) ``` #### 示例配置文件 以下是一个经过优化的 `backpack_3d.lua` 配置文件示例: ```lua include "map_builder.lua" include "trajectory_builder.lua" options = { map_builder = MAP_BUILDER, trajectory_builder = TRAJECTORY_BUILDER, map_frame = "map", tracking_frame = "base_link", published_frame = "base_link", odom_frame = "odom", provide_odom_frame = true, publish_frame_projected_to_2d = false, use_pose_extrapolator = true, use_odometry = true, num_laser_scans = 0, num_multi_echo_laser_scans = 0, num_subdivisions_per_laser_scan = 1, num_point_clouds = 1, } TRAJECTORY_BUILDER_3D.submaps.num_range_data = 120 TRAJECTORY_BUILDER_3D.submaps.resolution = 0.05 TRAJECTORY_BUILDER_3D.motion_filter.max_time_seconds = 0.2 POSE_GRAPH.optimize_every_n_nodes = 50 POSE_GRAPH.constraint_builder.min_score = 0.65 POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher.linear_x_y_search_window = 7 POSE_GRAPH.constraint_builder.fast_correlative_scan_matcher.angular_search_window = math.rad(30) ``` #### 日志分析与调试 为了进一步定位问题,可以通过启用详细日志输出来捕获错误信息。启动节点时添加 `--logtostderr` 参数: ```bash rosrun cartographer_ros cartographer_node _configuration_directory:=<path_to_config> _configuration_basename:=backpack_3d.lua --logtostderr ``` 重点检查是否出现与内存分配、线程冲突或配置解析相关的错误信息。 #### 系统资源监控 如果问题仍然存在,可能是系统资源不足导致的。可以通过以下命令监控内存使用情况: ```bash free -h ``` 若内存接近耗尽,可以尝试增加交换分区或减少其他程序的资源占用。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值