命令总结
rospack = ros+pack(age) : 提供ROS package相关的信息
rosstack = ros+stack : 提供stacks 相关的信息
roscd = ros+cd : changes directory to a ROS package or stack
rosls = ros+ls : lists files in a ROS package
roscp = ros+cp : copies files from/to a ROS package
rosmsg = ros+msg : provides information related to ROS message definitions
rossrv = ros+srv : provides information related to ROS service definitions
rosmake = ros+make : makes (compiles) a ROS package
使用rosed编辑ROS中的文件
rosed : 可以直接通过package名来获取到待编辑的文件而无需指定该文件的存储路径
rosed [package_name] [filename]
rosed roscpp Logger.msg
默认编辑器是vim,将其他编辑器设置为默认,用gedit编辑
export EDITOR='gedit'
创建ROS消息和ROS服务
消息msg: msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码
msg文件存放在package的msg目录下,实际上就是每行声明一个数据类型和变量名
可以使用的数据类型如下:
int8, int16, int32, int64 (plus uint*) float32, float64 string time, duration other msg files variable-length array[] and fixed-length array[C]
在ROS中有一个特殊的数据类型:Header,它含有时间戳和坐标系信息。
在msg文件的第一行经常可以看到Header header的声明.
下面是一个msg文件的样例,它使用了Header,string,和其他另外两个消息类型。
Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist
服务srv: 一个srv文件描述一项服务。它包含两个部分:请求和响应
srv文件存放在srv目录下,srv文件分为请求和响应两部分,由’—’分隔。下面是srv的一个样例
int64 A
int64 B
---
int64 Sum
使用msg
创建一个msg
在beginner_tutorials包里创建msg文件夹,定义新的消息
echo "int64 num" > msg/Num.msg
接下来,还有关键的一步:我们要确保msg文件被转换成为C++,Python和其他语言的源代码
查看package.xml, 确保它包含一下两条语句:没有的话加上
<build_depend>message_generation</build_depend>
错误 <run_depend>message_runtime</run_depend>
<exec_depend>message_runtime</exec_depend>
注意:在构建的时候,我们只需要”message_generation”。
然而,在运行的时候,我们只需要”message_runtime”。
打开CMakelist.txt
在CMakeLists.txt文件中,利用find_packag函数,增加对message_generation的依赖,这样就可以生成消息了
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
同样,你需要确保你设置了运行依赖:
catkin_package(
INCLUDE_DIRS include
LIBRARIES beginner_tutorials
CATKIN_DEPENDS roscpp rospy std_msgs **message_runtime**
DEPENDS system_lib
)
找到add_message_files,去掉#,把msg文件名写成自己的msg
add_message_files(
FILES
NUM.msg
# Message2.msg
)
手动添加.msg文件后,我们要确保CMake知道在什么时候重新配置我们的project,找到下面,去掉#
generate_messages(
DEPENDENCIES
std_msgs
)
这个例子是依赖std_msgs,不要添加roscpp,rospy
在package.xml中加入:
<build_depend>std_msgs</build_depend>
为下边这行代码去掉#:
# rosbuild_genmsg()
没找到??应该是rosbuild编译系统需要的,此处用catkin,不用加这句和下面的gensrv
创建好消息后,通过rosmsg show 看是否能识别消息
rosmsg show [message type]
rosmsg show beginner_tutorials/Num
提示找不到msg Num
原因:变量$ROS_PACKAGE_PATH里没有beginner_tutorials的路径 原来是在bashrc里面没有添加进去
解决
export ROS_PACKAGE_PATH=/home/ada/Code/rgbdslam_catkin_ws/src:/opt/ros/kinetic/share:/home/ada/kinect/catkin_ws/