集群机器人可以协作进行地图构建吗?
两个问题:每个机器人的定位;每个机器人和主节点通信。机器人1把扫描的点加到地图,机器人2把扫描的点加到地图,最后形成完整地图。
室内的两个车怎么进行准确定位呢?
环境不大的话,在天花板上贴二维码,两个机器人都去识别二维码。如果环境很大,初始建图时候,让两个机器人离得近一些,手工量出来二者的相对位置,建图时候在增量定位,这样也可以定位
同事的点云程序必须用PCL-1.8,而ROS默认的是1.7,结果有时出现了版本冲突。
安装了PCL-1.8后,重要的库文件libcostmap_2d.so
链接到了pcl-1.8,而不是默认的1.7。此时删除了pcl-1.8之后,再编译会报错:1
2
3
4CMake Error at /home/user/catkin_ws/devel/share/costmap_2d/cmake/costmap_2dConfig.cmake:113 (message):
Project 'costmap_2d' specifies '/usr/local/include/pcl-1.8' as an include
dir, which is not found. It does neither exist as an absolute directory
nor in '/home/user/catkin_ws/src/navigation/costmap_2d//usr/local/include/pcl-1.8'.
编译还会找pcl-1.8的路径,这是CMake caches
的问题,不是软链接之类的问题,它还会去找旧的路径,所以删除catkin_ws/build
下面的catkin_make.cache
, Makefile
, CMakeCache.txt
. 然后重新编译,这样libcostmap_2d.so
就不会再去链接1.8了
先安装库1
2
3sudo apt-get install ros-kinetic-sbpl
sudo apt-get install ros-kinetic-fake-localization
sudo apt-get install ros-kinetic-sbpl-lattice-planner
修改move_base_params.yaml
:1
2#base_global_planner: "global_planner/GlobalPlanner"
base_global_planner: SBPLLatticePlanner
我目前的机器人发布tag_detections
话题的频率只有0.6Hz,只能换另一台高配置的机器人,频率15Hz。如果机器人走得慢,不必很高。
landmark
的观测是 tracking frame,一般是imu
或者base_footprint
。这个在SensorBridge::HandleLandmarkMessage
里已经处理了。
如果关闭后端,landmark机制就无法触发了。
我直接修改apriltag_ros
的continuous_detector.cpp
中的imageCallback
,如果再写一个程序订阅再发布新话题,会增加网络损耗。相机检测到二维码时, 最好有一定的位移或旋转, 这样才能触发landmark机制,rviz里会用MarkerArray标出landmark的位置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40markers:
-
header:
seq: 0
stamp:
secs: 1611712040
nsecs: 13247643
frame_id: "map"
ns: "Landmarks"
id: 0
type: 2
action: 0
pose:
position:
x: 0.0142477289141
y: 0.140619658508
z: 0.337341305453
orientation:
x: 0.987908805705
y: 0.0191071294953
z: 0.015915594168
w: -0.153028765515
scale:
x: 0.2
y: 0.2
z: 0.2
color:
r: 0.207129895687
g: 0.115499980748
b: 0.769999980927
a: 1.0
lifetime:
secs: 0
nsecs: 0
frame_locked: False
points: []
colors: []
text: ''
mesh_resource: ''
mesh_use_embedded_materials: False
明明安装了库,也在CMake里指定了路径,但还是报这个错误
/etc/ld.so.conf
然后刷新Linux回到这个文件定义的路径里寻找库文件1
2
3sudo vim /etc/ld.so.conf
# 添加你的库文件路径
sudo ldconfig
LD_LIBRARY_PATH
1 | export LD_LIBRARY_PATH=/where/you/install/lib:$LD_LIBRARY_PATH |
1 | ln -s /where/you/install/lib/*.so /usr/lib |
~/.bashrc中
,导入export环境变量 LD_LIBRARY_PATH
/etc/ld.so.conf/
目录下,添加该文件的路径,首先命令行输入locate package,定位软件包的位置,然后找个.conf文件,将路径加进去之后,重新sudo ldconfig
运行时动态库的搜索路径的先后顺序是
LD_LIBRARY_PATH
指定的动态库搜索路径/etc/ld.so.conf
中指定的动态库搜索路径/lib
和/usr/lib
这个顺序是compile gcc时写在程序内的,通常软件源代码自带的动态库不会太多,而我们的/lib
和/usr/lib
只有root权限才可以修改,如果对环境变量LD_LIBRARY_PATH
进行操作就能解决问题,不要改/etc/ld.so.conf
,/lib
和/usr/lib