ROS的global_planner
abstract Welcome to my blog, enter password to read.
Read more
多台车使用gmapping联合建图

三台车使用RRT和gmapping联合建图

  • 集群机器人可以协作进行地图构建吗?
    两个问题:每个机器人的定位;每个机器人和主节点通信。机器人1把扫描的点加到地图,机器人2把扫描的点加到地图,最后形成完整地图。

  • 室内的两个车怎么进行准确定位呢?
    环境不大的话,在天花板上贴二维码,两个机器人都去识别二维码。如果环境很大,初始建图时候,让两个机器人离得近一些,手工量出来二者的相对位置,建图时候在增量定位,这样也可以定位


PCL1.7和1.8版本冲突问题

同事的点云程序必须用PCL-1.8,而ROS默认的是1.7,结果有时出现了版本冲突。

安装了PCL-1.8后,重要的库文件libcostmap_2d.so链接到了pcl-1.8,而不是默认的1.7。此时删除了pcl-1.8之后,再编译会报错:

1
2
3
4
CMake 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了


sbpl planner的配置

先安装库

1
2
3
sudo 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


ROS配置RRT全局算法
abstract Welcome to my blog, enter password to read.
Read more
多机器人的互相避障
abstract Welcome to my blog, enter password to read.
Read more
Stage仿真环境的配置
abstract Welcome to my blog, enter password to read.
Read more
landmark的使用 (二) AprilTag做landmark放入Cartographer

我目前的机器人发布tag_detections话题的频率只有0.6Hz,只能换另一台高配置的机器人,频率15Hz。如果机器人走得慢,不必很高。

landmark的观测是 tracking frame,一般是imu或者base_footprint。这个在SensorBridge::HandleLandmarkMessage里已经处理了。

如果关闭后端,landmark机制就无法触发了。


我直接修改apriltag_roscontinuous_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
40
markers: 
-
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

参考:
知乎-带Landmark的demo运行和测试
Cartographer——带Landmark的demo的运行和测试


找不到动态库.so--cannot open shared object file

明明安装了库,也在CMake里指定了路径,但还是报这个错误

  1. 修改/etc/ld.so.conf 然后刷新

Linux回到这个文件定义的路径里寻找库文件

1
2
3
sudo vim /etc/ld.so.conf
# 添加你的库文件路径
sudo ldconfig

  1. 修改环境变量LD_LIBRARY_PATH
1
2
export LD_LIBRARY_PATH=/where/you/install/lib:$LD_LIBRARY_PATH
sudo ldconfig
  1. 用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边
1
2
ln -s /where/you/install/lib/*.so /usr/lib
sudo ldconfig
  1. 强行将路径写进去
  2. 路径写进去不行的话,在~/.bashrc中,导入export环境变量 LD_LIBRARY_PATH
  3. /etc/ld.so.conf/目录下,添加该文件的路径,首先命令行输入locate package,定位软件包的位置,然后找个.conf文件,将路径加进去之后,重新sudo ldconfig

运行时动态库的搜索路径的先后顺序是

  1. 编译目标代码时指定的动态库搜索路径
  2. 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
  3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径
  4. 默认的动态库搜索路径/lib/usr/lib

这个顺序是compile gcc时写在程序内的,通常软件源代码自带的动态库不会太多,而我们的/lib/usr/lib只有root权限才可以修改,如果对环境变量LD_LIBRARY_PATH进行操作就能解决问题,不要改/etc/ld.so.conf/lib/usr/lib


公司机器人开机程序启动失败的情况
abstract Welcome to my blog, enter password to read.
Read more