- 安装
依赖安装
sudo apt-get install -y \
cmake \
g++ \
git \
google-mock \
libboost-all-dev \
libcairo2-dev \
libeigen3-dev \
libgflags-dev \
libgoogle-glog-dev \
liblua5.2-dev \
libsuitesparse-dev \
ninja-build \
python-sphinx \
stow
注意使用前记得先初始化一下,即建立src文件夹,不然你下面的源码连接是放不进去的。
wstoolinit src
使用wstool获取源码链接
wstool merge -t srchttps://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall
如果获取失败可以配置一下代理export http_proxy=http://127.0.0.1:1088;export https_proxy=http://127.0.0.1:1088;
把ip地址和端口号改成代理软件的即可,如v2rayn。
类似于:
export https_proxy=http://192.168.0.130:1091
export http_proxy=http://192.168.0.130:1091
默认获取到的源码是1.0版本的,如果需要更换版本把src/.rosinstall文件里的版本好改为master即可,ceres-solver的版本可以不用改。使用最新版需要absl库
- git: {local-name: cartographer, uri: 'https://github.com/cartographer-project/cartographer.git', version: 'master'}
- git: {local-name: cartographer_ros, uri: 'https://github.com/cartographer-project/cartographer_ros.git', version: 'master'}
- git: {local-name: ceres-solver, uri: 'https://ceres-solver.googlesource.com/ceres-solver.git', version: '1.13.0'}
Could not find a package configuration file provided by "absl" with any of
the following names:
如安装最新版本,会提示以上错误。手动安装即可,注意要编译成动态库,官方教程编译的是静态库。
git clone https://github.com/abseil/abseil-cpp.git
mkdir build & cd build
cmake .. -DCMAKE_POSITION_INDEPENDENT_CODE:BOOL=ON
cmake .. -DBUILD_TESTING:BOOL=OFF
cmake .. -DCMAKE_BUILD_TYPE:STRING=Release
cmake .. -DCMAKE_CXX_STANDARD=11
make
sudo make install
如果使用zsh需要把cmake指令后面的;分号去掉
在上面的catkin_make_isolated --install --use-ninja 这一步时遇到一个build error
CMake Error at /home/xxx/catkin_ws/install_isolated/lib/cmake/Ceres/CeresConfig.cmake:88 (message):
Failed to find Ceres - Missing requested Ceres components:
[SparseLinearAlgebraLibrary] (components requested:
解决办法:
在/home/xxx/catkin_ws_cartographer/build_isolated/ceres-solver/install/CMakeCache.txt 里找到EIGENSPARSE:BOOL=OFF , 把OFF 改成ON
细致入门请参阅:
https://wenku.baidu.com/view/bf8ca1a0998fcc22bcd10dfd.html?sxts=1540872677307#
入门参考教程:
https://blog.csdn.net/YiKangJ/article/details/88845663【翻译的官方文档(局部)】
https://google-cartographer-ros.readthedocs.io/en/latest/compilation.html【官方文档】
相关操作入门代码:
检验bag包是否正常:
cartographer_rosbag_validate -bag_filename 【你bag包的名字】.bag
- 配置
⚠️car的launch文件会发布tf坐标转换,确保雷达的launch文件未发布tf,否则会起冲突,或者使用rosrun来运行雷达驱动包,tf一般需要在launch文件里读区urdf或xacro调用robot_state_publisher才能发布。
2.x 发布坐标话题
car默认输入tf坐标树,不过更新速度比较慢,可以修改node.cc发布定位信息
2.1 不使用惯性模块(without IMU)
2.2使用惯性模块
2.3使用Arduino 9 Axes Motion Shield 作为惯性模块
Arduino 9 Axes Motion Shield.pdf
这个模块使用的是bno055传感器,使用不同型号的Arduino板子需要短接不同的接口。
BOARD | INTERRUPT PIN | RESET PIN |
---|---|---|
Arduino Uno | D2 | D4 |
Arduino Leonardo | D7 | D4 |
Arduino Yun | D7 | D4 |
Arduino Ethernet | D2 | D4 |
Arduino Due | D2 | D4 |
---|---|---|
Arduino Mega | D2 | D4 |
git clone --recurse-submodules https://github.com/Vijfendertig/rosserial_adafruit_bno055.git
rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y
catkin_make -DARDUINO_SDK_PATH=/opt/arduino-1.8.8
source ./devel/setup.bash
arduino安装,arduino sdk path 可直接使用下面解压后的地址,无需安装Arduino IDE
wget https://downloads.arduino.cc/arduino-1.8.12-linux64.tar.xz
tar -xvf arduino-1.8.12-linux64.tar.xz
项目使用的是板子是micro,试了一下Uno 有问题,然后换了Leonardo可以正常工作。可能的原因是Micro和Leonardod都是使用USB CDC串口,而Uno不是,修改cmake文件的板子型号编译即可
vim src/rosserial_adafruit_bno055/firmware/CMakeLists.txt
catkin_make rosserial_adafruit_bno055_firmware_arduino_micro
BOARD | USB CDC NAME | SERIAL PINS | SERIAL1 PINS | SERIAL2 PINS | SERIAL3 PINS |
---|---|---|---|---|---|
Uno, Nano, Mini | 0(RX), 1(TX) | ||||
Mega | 0(RX), 1(TX) | 19(RX), 18(TX) | 16(RX), 17(TX) | 15(RX), 14(TX) | |
Leonardo, Micro, Yún | Serial | 0(RX), 1(TX) | |||
Uno WiFi Rev.2 | Connected to USB | 0(RX), 1(TX) | Connected to NINA | ||
MKR boards | Serial | 13(RX), 14(TX) | |||
Zero | SerialUSB (Native USB Port only) | Connected to Programming Port | 0(RX), 1(TX) | ||
Due | SerialUSB (Native USB Port only) | 0(RX), 1(TX) | 19(RX), 18(TX) | 16(RX), 17(TX) | 15(RX), 14(TX) |
101 | Serial | 0(RX), 1(TX) |
下载
确定好板子使用的是那个接口,一般为/dev/ttyACM0 或1,需要在Cmake文件里面修改
https://www.smslit.top/2015/12/04/usbttlInLinux-Arduino/参照此处修改usb权限
catkin_make rosserial_adafruit_bno055_firmware_arduino_micro-upload
可能需要按下重启才能下载。
rosrun rosserial_python serial_node.py /dev/ttyACM1
如果提示rosserial_python未找到,sudo apt-get install ros-kinetic-rosserial安装即可
rosrun rosserial_python serial_node.py /dev/ttyACM1
[INFO] [1596880509.743325]: ROS Serial Python Node
[INFO] [1596880509.748008]: Connecting to /dev/ttyACM1 at 57600 baud
[INFO] [1596880511.864722]: Note: publish buffer size is 384 bytes
[INFO] [1596880511.865006]: Setup publisher on bno055/imu [rosserial_adafruit_bno055/Imu]
[INFO] [1596880511.867442]: Setup publisher on bno055/calib_status [rosserial_adafruit_bno055/CalibrationStatus]
[INFO] [1596880511.870387]: Note: subscribe buffer size is 128 bytes
[INFO] [1596880511.870631]: Setup subscriber on /bno055/enable [std_msgs/Bool]
可以使用rostopic list查看是否有bno055开头的三个话题
给/bno055/enable话题发送布尔类型变量启用
rostopic pub /bno055/enable std_msgs/Bool "data: true"
再查看/bno055/imu 是否有数据输出
rostopic echo /bno055/imu
header:
seq: 1
stamp:
secs: 1596881041
nsecs: 964888006
frame_id: "bno055"
orientation:
x: -0.303344726562
y: 0.949096679688
z: 0.0794677734375
w: 0.0296630859375
angular_velocity:
x: 0.00444444455206
y: -0.00111111113802
z: 0.0
linear_acceleration:
x: 0.10000000149
y: 0.109999999404
z: -0.0799999982119
---
5.1 帮助
ros坐标系



3.1 纯定位
3.2 初始位姿设置
四元数换算网站https://quaternions.online
rosservice list
/cartographer_node/get_loggers
/cartographer_node/set_logger_level
/cartographer_occupancy_grid_node/get_loggers
/cartographer_occupancy_grid_node/set_logger_level
/finish_trajectory
/get_trajectory_states
/read_metrics
/robot_state_publisher/get_loggers
/robot_state_publisher/set_logger_level
/robot_state_publisher2/get_loggers
/robot_state_publisher2/set_logger_level
/rosout/get_loggers
/rosout/set_logger_level
/rviz/get_loggers
/rviz/reload_shaders
/rviz/set_logger_level
/sdkeli_ls1207de/get_loggers
/sdkeli_ls1207de/set_logger_level
/sdkeli_ls1207de/set_parameters
/start_trajectory
/submap_query
/trajectory_query
/write_state
最新版
rosservice call /finish_trajectory 3
status:
code: 0
message: "Finished trajectory 3."
➜ carg rosservice call /start_trajectory "configuration_directory: '/home/ls/carg/install_isolated/share/cartographer_ros/configuration_files'
configuration_basename: 'my_backpack_2d.lua'
use_initial_pose: true
initial_pose:
position: {x: 7.7, y: -3.0, z: 0.0}
orientation: {x: 0.0, y: 0.0, z: -0.707, w: 0.707}
relative_to_trajectory_id: 0"
status:
code: 0
message: "Success."
trajectory_id: 4
可使用tab键补全默认的参数,注意四元数需要精确到小数点后三位。
老版本,1.0
rosservice call /finish_trajectory 1
rosrun cartographer_ros cartographer_start_trajectory -configuration_basename=backpack_2d.lua -configuration_directory=/home/calyu/catkin_ws/install_isolated/share/cartographer_ros/configuration_files -initial_pose="{to_trajectory_id=0,relative_pose={translation={0.0,0.0,5},rotation={0.,0.,0.0}}}
rosservice call /get_trajectory_states
status:
code: 0
message: ''
trajectory_states:
header:
seq: 0
stamp:
secs: 1598013747
nsecs: 696791564
frame_id: ''
trajectory_id: [0, 1, 2, 3, 4]
trajectory_state: [2, 3, 3, 3, 0]
需要先关闭建图ID,然后在开启一个新的建图ID。可以通过python来设置上电启动的初始位姿。