用GIMP等工具来进行地图的常规清理和编辑是一项费时费力的任务,为了解决这种情况,项目ros_map_editor提供一个强大而灵活的工具,使机器人领域的从业者和研究人员能够更轻松地编辑导航地图,以满足他们的特定碧求。
特点:
- 添加整行区域: 用户可以轻松地添加禁行区域,以确保机器人避开潜在危险区域
- 地图对齐:工具允许将导航地图与真实世界地图对齐,以便进行精确的导航
- 一般地图清理: 与传统工具相比,使用
ros map editor
进行地图清理更加高效
用GIMP等工具来进行地图的常规清理和编辑是一项费时费力的任务,为了解决这种情况,项目ros_map_editor提供一个强大而灵活的工具,使机器人领域的从业者和研究人员能够更轻松地编辑导航地图,以满足他们的特定碧求。
特点:
ros map editor
进行地图清理更加高效ubuntu 20.04 编译 opencv3.2 相关问题 1
ubuntu 20.04 编译 opencv3.2 相关问题 2
ubuntu 20.04 编译 opencv3.2 相关问题 3
编译OpenCV 3.2 出现 #include_next
ROS编译时报错Project ‘cv_bridge‘ specifies ‘/usr/include/opencv‘ as an include dir, which is not found
move_base.cpp
中用到的多线程:1
2
3
4
5boost::condition_variable_any planner_cond_;
boost::thread* planner_thread_;
boost::recursive_mutex planner_mutex_;
代价地图里有个锁mutex_t
,其实就是boost::recursive_mutex
,膨胀层里还用到了读写锁boost::shared_mutex* access_
move_base
里用的锁主要是boost::recursive_mutex planner_mutex_
,而且是和boost::unique_lock
, boost::recursive_mutex::scoped_lock
搭配使用。
使用到planner_mutex_
的函数有planThread
, executeCb
, executeCycle
(6次), resetState
。其他3个函数,每个都只使用了一次planner_mutex_
只有一次是在生成路径后,交互变量。其他全是和planThread
有关的,基本是对runPlanner
赋值,比如1
2
3
4
5boost::unique_lock<boost::recursive_mutex> lock(planner_mutex_);
planner_goal_ = goal;
runPlanner_ = true;
planner_cond_.notify_one();
lock.unlock();
经过我大量修改,move_base
在有导航任务时,如果ctrl+C退出,终端必定会出现下面的错误,虽然毫无影响,但是毕竟不优雅
这个错误是在有锁的情况下,仍然加锁。 也就是多调用了lock()
函数。
搜索move_base,发现只有7个lock()
。逐个查看,由于是退出时的报错,所以不可能是makePlan
的那个,很容易发现是planThread
函数最后的那个。加上判断即可解决1
2if( !lock.owns_lock() )
lock.lock();
对于其他使用lock()
的地方,最好也加上这个判断。
1 | [ WARN] [1709619594.875225471]: Control loop missed its desired rate of 300.00 Hz... the loop actually took 0.0087 seconds |
这个问题与时间同步和TF有关,在本地打开Rviz和SSH运行远程程序时,有很小概率出现此错误。