1. undefined reference to `tf::TransformBroadcaster::TransformBroadcaster()’
问题描述:
CMakeFiles/imu_data.dir/src/imu_data.cpp.o: In function `main':
imu_data.cpp:(.text+0x2bc): undefined reference to `tf::TransformBroadcaster::TransformBroadcaster()'
imu_data.cpp:(.text+0x4c8): undefined reference to `tf::TransformBroadcaster::sendTransform(tf::StampedTransform const&)'
collect2: error: ld returned 1 exit status
imu_publish/CMakeFiles/imu_data.dir/build.make:113: recipe for target '/home/sikong/catkin_ws/devel/lib/imu_publish/imu_data' failed
make[2]: *** [/home/sikong/catkin_ws/devel/lib/imu_publish/imu_data] Error 1
CMakeFiles/Makefile2:669: recipe for target 'imu_publish/CMakeFiles/imu_data.dir/all' failed
make[1]: *** [imu_publish/CMakeFiles/imu_data.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j4 -l4" failed
解决方案:
在Cmakelist.txt和package.xml中添加TF依赖
2. [ERROR] [1426895120.908823306, 1422676721.758969255]: Lookup would require extrapolation into the past. Requested time 1422676720.347031633 but the earliest data is at time 1422676720.654202231, when looking up transform from frame [imu_link] to frame [base_link]
问题描述:
[ERROR] [1426895120.908823306, 1422676721.758969255]: Lookup would require extrapolation into the past. Requested time 1422676720.347031633 but the earliest data is at time 1422676720.654202231, when looking up transform from frame [imu_link] to frame [base_link]
解决方案:
时间戳的问题,需要将时间戳放到while大循环里面。
#include <ros/ros.h>
#include <tf/transform_broadcaster.h>
#include <sensor_msgs/Imu.h>
using namespace std;
int main(int argc,char **argv)
{
ros::init(argc,argv, "imu_data_node");
ros::NodeHandle nh;
//发布主题, 消息格式使用sensor_msg::Imu标准格式(topic名称,队列长度)
ros::Publisher IMU_read_pub = nh.advertise<sensor_msgs::Imu>("imu", 20);
sensor_msgs::Imu imu_data;
tf::TransformBroadcaster imu_broadcaster;
tf::Transform transform;
ros::Time current_time;
while(ros::ok())
{
current_time = ros::Time::now();
imu_data.header.stamp = current_time;
imu_data.header.frame_id = "imu_link";
transform.setOrigin(tf::Vector3(0.0, 0.0, 0.128));
transform.setRotation(tf::Quaternion(0, 0, 0, 1));
imu_broadcaster.sendTransform(tf::StampedTransform(transform, current_time, "base_link", "imu_link") );
//父坐标系 ,子坐标系
}
}
3.fatal error: opencv2/core/core.hpp: No such file or directory
解决方法:
在相应的Cmakelist.txt文件里添加opencv的头文件路径等
find_package(OpenCV 4.1.1 EXACT REQUIRED)
message( STATUS "OpenCV Include Dir: " ${OpenCV_INCLUDE_DIRS} )
include_directories(
${OpenCV_INCLUDE_DIRS}
)
4. Could NOT find SDL (missing: SDL_LIBRARY SDL_INCLUDE_DIR)
解决方法:
sudo apt-get install libsdl-dev
5. Could NOT find SDL_image (missing: SDL_IMAGE_LIBRARIES SDL_IMAGE_INCLUDE_DIRS)
解决方法:
sudo apt-get install libsdl-image1.2-dev
6. Warning: Invalid argument “/map” passed to canTransform argument target_frame in tf2 frame_ids cannot start with a ‘/’
问题描述:
Warning: Invalid argument "/map" passed to canTransform argument target_frame in tf2 frame_ids cannot start with a '/' like:
at line 134 in /tmp/binarydeb/ros-melodic-tf2-0.6.5/src/buffer_core.cpp
解决方案:
将global_costmap_params.yaml和local_costmap_params.yaml文件里相应的参数“/map”去掉“/” 。
7. 编译teb_local_planner程序包时编译出错
/home/sikong/catkin_ws/src/teb_local_planner/src/optimal_planner.cpp: In member function ‘boost::shared_ptr<g2o::SparseOptimizer> teb_local_planner::TebOptimalPlanner::initOptimizer()’:
/home/sikong/catkin_ws/src/teb_local_planner/src/optimal_planner.cpp:160:64: error: no matching function for call to ‘g2o::BlockSolver<g2o::BlockSolverTraits<-1, -1> >::BlockSolver(std::unique_ptr<g2o::LinearSolverCSparse<Eigen::Matrix<double, -1, -1> > >&)’
TEBBlockSolver* blockSolver = new TEBBlockSolver(linearSolver);
^
In file included from /opt/ros/melodic/include/g2o/core/block_solver.h:199:0,
from /home/sikong/catkin_ws/src/teb_local_planner/include/teb_local_planner/optimal_planner.h:55,
from /home/sikong/catkin_ws/src/teb_local_planner/src/optimal_planner.cpp:39:
/opt/ros/melodic/include/g2o/core/block_solver.hpp:40:1: note: candidate: g2o::BlockSolver<Traits>::BlockSolver(std::unique_ptr<typename Traits::LinearSolverType>) [with Traits = g2o::BlockSolverTraits<-1, -1>; typename Traits::LinearSolverType = g2o::LinearSolver<Eigen::Matrix<double, -1, -1> >]
BlockSolver<Traits>::BlockSolver(std::unique_ptr<LinearSolverType> linearSolver)
^~~~~~~~~~~~~~~~~~~
/opt/ros/melodic/include/g2o/core/block_solver.hpp:40:1: note: no known conversion for argument 1 from ‘std::unique_ptr<g2o::LinearSolverCSparse<Eigen::Matrix<double, -1, -1> > >’ to ‘std::unique_ptr<g2o::LinearSolver<Eigen::Matrix<double, -1, -1> >, std::default_delete<g2o::LinearSolver<Eigen::Matrix<double, -1, -1> > > >’
/home/sikong/catkin_ws/src/teb_local_planner/src/optimal_planner.cpp:161:100: error: no matching function for call to ‘g2o::OptimizationAlgorithmLevenberg::OptimizationAlgorithmLevenberg(teb_local_planner::TEBBlockSolver*&)’
g2o::OptimizationAlgorithmLevenberg* solver = new g2o::OptimizationAlgorithmLevenberg(blockSolver);
/home/sikong/catkin_ws/src/teb_local_planner/src/teb_local_planner_ros.cpp: In member function ‘virtual bool teb_local_planner::TebLocalPlannerROS::computeVelocityCommands(geometry_msgs::Twist&)’:
/home/sikong/catkin_ws/src/teb_local_planner/src/teb_local_planner_ros.cpp:229:40: error: no matching function for call to ‘costmap_2d::Costmap2DROS::getRobotPose(tf::Stamped<tf::Transform>&)’
costmap_ros_->getRobotPose(robot_pose);
^
In file included from /home/sikong/catkin_ws/src/navigation/nav_core/include/nav_core/base_local_planner.h:42:0,
from /home/sikong/catkin_ws/src/teb_local_planner/include/teb_local_planner/teb_local_planner_ros.h:45,
from /home/sikong/catkin_ws/src/teb_local_planner/src/teb_local_planner_ros.cpp:39:
/home/sikong/catkin_ws/src/navigation/costmap_2d/include/costmap_2d/costmap_2d_ros.h:125:8: note: candidate: bool costmap_2d::Costmap2DROS::getRobotPose(geometry_msgs::PoseStamped&) const
bool getRobotPose(geometry_msgs::PoseStamped& global_pose) const;
^~~~~~~~~~~~
/home/sikong/catkin_ws/src/navigation/costmap_2d/include/costmap_2d/costmap_2d_ros.h:125:8: note: no known conversion for argument 1 from ‘tf::Stamped<tf::Transform>’ to ‘geometry_msgs::PoseStamped& {aka geometry_msgs::PoseStamped_<std::allocator<void> >&}’
/home/sikong/catkin_ws/src/teb_local_planner/src/teb_local_planner_ros.cpp:234:40: error: no matching function for call to ‘base_local_planner::OdometryHelperRos::getRobotVel(tf::Stamped<tf::Transform>&)’
odom_helper_.getRobotVel(robot_vel_tf);
解决方案:
这个错误是由于git的源码分支版本和你使用的ROS版本不同导致的,如果你用的是melodic版本的ROS
方法1:
新开一个终端,输入
cd ~/catkin_ws/src/teb_local_planner
git checkout melodic-devel
方法2:
cd ~/catkin_ws/src
rm -rf teb_local_planner
git clone -b melodic-devel https://git
hub.com/rst-tu-dortmund/teb_local_planner.git
cd ..
catkin_make -DCATKIN_WHITELIST_PACKAGES="teb_local_planner"
8.在笔记本上开启rviz给机器人设定初始位姿和导航目标没反应。
解决方法:机器人跟笔记本时间不同步,同步笔记本跟机器人的系统时间。
系统时间的查看命令:date
9.ROS melodic 安装有问题
The following packages have unmet dependencies:
ros-melodic-desktop-full : Depends: ros-melodic-desktop but it is not going to be installed
Depends: ros-melodic-perception but it is not going to be installed
Depends: ros-melodic-simulators but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
解决方法:用sudo apt install ros-melodic-desktop
安装相关缺少的依赖直到不在报类似错误,我的运行下面的语句就不再报错了
sudo apt install libboost-graph-dev
10. ros发布消息值与代码里的值不一致
问题描述:
rostopic echo 后的消息:
---
steering_angle: 0.0
steering_angle_velocity: 1.59676389227e+19
speed: 1.61972191289e-27
acceleration: 1.26116861789e-44
jerk: 7.18332156973e+22
---
steering_angle: 0.0
steering_angle_velocity: 1.59676389227e+19
speed: 1.61167601716e-18
acceleration: 1.26116861789e-44
jerk: 7.18332156973e+22
---
steering_angle: 0.0
steering_angle_velocity: 1.59676389227e+19
speed: 1.59764534935e-09
acceleration: 1.26116861789e-44
jerk: 7.18332156973e+22
---
代码实际值:
ackermann speed :0.200000
speed :0.200000
keyboard value :77
ackermann speed :0.300000
keyboard value :77
ackermann speed :0.400000
keyboard value :77
ackermann speed :0.500000
speed :0.500000
speed :0.500000
keyboard value :77
ackermann speed :0.600000
speed :0.600000
speed :0.600000
speed :0.600000
speed :0.600000
speed :0.600000
speed :0.600000
speed :0.600000
speed :0.600000
speed :0.600000
解决方案:
查看消息定义与发布函数的消息类型是否为同一类型,不同类型会导致上述错误:
ackermann_msgs::AckermannDriveStamped ackermann_cmd_vel_;
pub_ = n_.advertise<ackermann_msgs::AckermannDriveStamped>("ackermann_cmd_vel", 10);
11. ModuleNotFoundError: No module named ‘em’
问题描述:编译程序时报错
[7%] Generating C++ code from ackermann_msgs/AckermannDrive.msg
Traceback (most recent call last):
File "/opt/ros/melodic/share/gencpp/cmake/../../../lib/gencpp/gen_cpp.py", line 43, in <module>
import genmsg.template_tools
File "/opt/ros/melodic/lib/python2.7/dist-packages/genmsg/template_tools.py", line 39, in <module>
import em
ModuleNotFoundError: No module named 'em'
ackermann_msgs/CMakeFiles/ackermann_msgs_generate_messages_cpp.dir/build.make:63: recipe for target '/home/zhangying/auto-driving_car/devel/include/ackermann_msgs/AckermannDrive.h' failed
make[2]: *** [/home/zhangying/auto-driving_car/devel/include/ackermann_msgs/AckermannDrive.h] Error 1
CMakeFiles/Makefile2:611: recipe for target 'ackermann_msgs/CMakeFiles/ackermann_msgs_generate_messages_cpp.dir/all' failed
make[1]: *** [ackermann_msgs/CMakeFiles/ackermann_msgs_generate_messages_cpp.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j1" failed
解决方案:
- 新开一终端:
pip uninstall em
pip install empy
source /opt/ros/kinetic/setup.bash
- 清除workspace空间,除了src
cd ~/catkin_ws
unlink src/CMakeLists.txt
rm -rf build
rm -rf devel
rm .catkin_workspace
cd ~/catkin_ws/src
catkin_init_workspace
cd ..
catkin_make
12. 找不到自定义消息的头文件
出现此错误时,有三种可能情况:
- 此.h文件是由自定义消息生成的,如robot_msgs/voltage.msg
则解决方法是cmakeList中添加:
add_executable(robot_control_node src/robot_control.cpp )
add_dependencies(robot_control_node robot_msgs_gencpp)
target_link_libraries(robot_control_node ${catkin_LIBRARIES})
其中:robot_control_node是所要生成的可执行文件,add_dependencies添加所需依赖。
请记得,在find_package中添加robot_msgs。
其次,请记得在package.xml中添加
<build_depend>robot_msgs</build_depend>
<run_depend>robot_msgs</run_depend>
- 此.h文件位于本包include内:
解决方法是,在包含目录下包含include包:
include_directories(
include
${catkin_INCLUDE_DIRS}
)
- 此.h文件位于别的包内,如robot_navigation:
则在find_package中添加此包名:
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
robot_navigation
)
其次,请记得在package.xml中添加
<build_depend>robot_navigation</build_depend>
<run_depend>robot_navigation</run_depend>
13.ROS多机协同,主从机设置
- 主机中在新开一终端
vim ~/.bashrc
在该文件末尾处添加以下指令,其中的IP为主机IP
export ROS_MASTER_URI=http://192.168.0.168:11311
export ROS_HOSTNAME=192.168.0.168
- 从机中新开一终端
vim ~/.bashrc
在该文件末尾处添加以下指令,其中ROS_MASTER_URI的IP为主机IP, ROS_HOSTNAME为从机IP
export ROS_MASTER_URI=http://192.168.0.168:11311
export ROS_HOSTNAME=192.168.0.162