文章目录
0.需要修改的内容
0.1 修改package.xml
因为需要message_generation生成C++或Python能使用的代码,所以向package.xml文件中添加如下两行:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
0.2 修改CMakeLists.txt
CMakeLists.txt中有四个地方需要修改
1.向find_package()中添加message_generation
find_package(catkin REQUIRED COMPONENTS
message_generation
rospy
std_msgs
)
2.向add_message_files()中添加xxx.msg
add_message_files(FILES
xxx.msg
)
3.去掉generate_messages()注释
generate_messages(DEPENDENCIES
std_msgs
)
4.向catkin_package()添加message_runtime
catkin_package(
CATKIN_DEPENDS
message_runtime
)
返回工作空间执行:catkin_make
1.如果是cpp,catkin_make之后会在路径workspace/devel/include/package_name/下生产xxx.h的头文件。程序中包含改头文件即可。
#include <package_name/xxx.h>
2.如果是py,catkin_make之后会产生一个与包名相同的msg文件,从中import需要的消息类型即可。
from package_name.msg import xxx
1.检查构建系统失败
CMake Error at /opt/ros/kinetic/share/catkin/cmake/catkin_package.cmake:196 (message):
catkin_package() the catkin package 'std_msgs' has been find_package()-ed
but is not listed as a build dependency in the package.xml
...
Invoking "make cmake_check_build_system" failed
问题描述:
在CMakeList.txt中find_package已经包含了std_msgs,但是在package.xml构建中没有列出来。
解决办法:
在package.xml中加入对应依赖即可
2.未知CMake命令
CMake Error at xxx/CMakeLists.txt:17 (add_service_files):
Unknown CMake command "add_service_files".
...
CMake Error at xxx/CMakeLists.txt:17 (add_message_files):
Unknown CMake command "add_message_files".
...
CMake Error at xxx/CMakeLists.txt:17 (add_action_files):
Unknown CMake command "add_action_files".
...
Invoking "make cmake_check_build_system" failed
解决办法:
在CMakeList.txt中find_package加入message_generation 。
find_package(catkin REQUIRED COMPONENTS
message_generation
roscpp
rospy
std_msgs
)
3.ROS配置C++11环境
在ROS中,当c++里面有的关键字识别不了时,可能是c++编译环境出问题了。比如auto等关键字。
错误现象:
1.error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.
2.error: ‘xxx’ has not been declared
sudo vim /opt/ros/kinetic/share/catkin/cmake/toplevel.cmake
导数第二行插入:
set(CMAKE_CXX_FLAGS “-std=c++11 ${CMAKE_CXX_FLAGS}”)
或者在CMakeLists.txt取消注释行(最简单的方法)
## Compile as C++11, supported in ROS Kinetic and newer
add_compile_options(-std=c++11)
ROS相关命令
1.刷新运行
source ~/.bashrc 刷新工作环境
roscore
rosrun package_name exe_file 开始某个可执行文件(节点)
2.查找
rospack find package_name 查找包名路径
// 查看正在运行的节点
rosnode list
//查看ROS正在发布的话题
rostopic list
// 查看正在发布的topic的具体内容
rostopic echo topic_name
3.显示
// 显示消息类型详细信息
rosmsg show msgname
// 查看正在发布的topic的具体内容
rostopic echo topic_name
// 查看带宽
rostopic bw topic_name
// 查看发布频率
rostopic hz topic_name
// 查看topic相关信息
rostopic info topic_name
4.保存rosbag
// 保存所有节点的内容
mkdir ~/bagfiles
cd ~/bagfiles
rosbag record -a // -a选项表示将当前发布的所有 topic 数据都录制保存到一个rosbag文件中
// 只记录某些感兴趣的 topic
rosbag record /topic_name1 /topic_name2 /topic_name3
// 名称修改(-O表直接命名 -o表命名后跟日期时间)
rosbag record -O filename.bag /topic_name1
5.回放rosbag
// 显示数据包中的信息
rosbag info filename.bag
//回放
rosbag play name.bag
//加速回放
rosbag play -r 2 name.bag
// 循环播放
rosbag play -l name.bag
// 指定话题播放
rosbag play name.bag --topic /topic1
// 查看正在发布的topic的具体内容
rostopic echo topic_name