ROS常见问题及解决方法

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

解决方案

  1. 新开一终端:
pip uninstall em
pip install empy
source /opt/ros/kinetic/setup.bash
  1. 清除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. 找不到自定义消息的头文件

出现此错误时,有三种可能情况:

  1. 此.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>
  1. 此.h文件位于本包include内:
    解决方法是,在包含目录下包含include包:
include_directories(
	include
	${catkin_INCLUDE_DIRS} 
)
  1. 此.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多机协同,主从机设置

  1. 主机中在新开一终端
vim ~/.bashrc

在该文件末尾处添加以下指令,其中的IP为主机IP

export ROS_MASTER_URI=http://192.168.0.168:11311
export ROS_HOSTNAME=192.168.0.168
  1. 从机中新开一终端
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值