ROS工作空间和软件包的创建
1、创建工作区目录结构
mkdir -p ~/catkin_ws/src
2、初始化工作区命令(在src目录下进行)
catkin_init_workspace
3、创建软件包的命令(依然在src目录下进行)
catkin_create_pkg ros_test_pkg roscpp std_msgs
//创建软件包的命令 软件包名 创建软件包时的依赖(python-rospy)
自定义消息的实例
1、首先创建一个 ros 的工作空间
mkdir -p ~/catkin_ws/src
2、在src目录下进行工作空间的初始化
catkin_init_workspace
3、创建一个功能包,起相应的名字就可以,因为msg文件夹可以在每个功能包里面存在
catkin_create_pkg ros_test_pkg roscpp std_msgs
//创建软件包的命令 软件包名 创建软件包时的依赖(python-rospy)##
4、之后在该功能包下会出现include、src、CMakeLists.txt、package.xml文件,然后创建一个文件夹msg,里面专门存放自定义的.msg文件(在上一级建立的功能包的src的同级目录下进行)
mkdir msg
5、在msg文件夹下创建自定义消息的.msg文件(这里命名为Person.msg)
6、例如在这个Person.msg文件夹里面写入自定义的一个消息
string name
int32 age
float64 weight
7、修改package.xml文件
<!-- build 依赖。下面两句任选其1均可,也可以都写上 -->
<build_depend>message_generation</build_depend>
<build_export_depend>message_generation</build_export_depend>
<!-- 执行依赖,必须加上以下这句:-->
<exec_depend>message_runtime</exec_depend>
8、更改CMakeList.txt文件
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
## Generate messages in the 'msg' folder
add_message_files(
FILES
Person.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES beginner_tutorials
# CATKIN_DEPENDS roscpp rospy std_msgs
# DEPENDS system_lib
CATKIN_DEPENDS message_runtime
)
改动这三个地方就可以了
9、最后进行整个工作空间的编译(这个编译出了一些问题,记住一定要在工作空间下进行才不会报错)
catkin_make
10、最后在工作空间下会生成两个文件夹build和devel,devel的include下会生成Person.h的文件
自定义消息在qt中的实际使用
1、首先在创建的project文件夹下创建一个文件夹命名为my_msg(这个文件夹的命名是随意的),然后将上面生成的Person.h文件放到这个文件夹下。
2、然后在.pro文件中的那个include那一项上加上
./my_msg \
3、然后在发布的主程序里面就可以用这个自定义的消息类型了
这个使用注意下面两条就可以了
第一、 这个使用这个数据类型来定义数据的时候命名空间::结构体类型名字 变量名称
对于本次的自定义数据类型,功能包的名字叫做number_count,那个文件的名称叫做Person.h
所以这里定义了一个变量number_count :: Person msgs(这个就和上面的对应着)
下面这个定义就类似那种。
ros::Publisher pub_number = node_handle.advertise<number_count::Person>("/num_count",10);
第二、如果说自定义的消息类型想要嵌套另外一个自定义消息的话,
首先在msg文件夹下建立另外一个msg文件,比如建立一个people.msg,然后里面写上:
Person wulei
string names
float64 weights
int32 ages
//这样就相当于直接引用了Person.msg文件里面定义的东西
//之后进行catkin_make就可以了
然后在devel/number_count 文件夹下会生成一个people.h的文件,这个文件是包含了person.h的文件,然后将这个文件拷贝到qt的project的那个文件夹下(my_msg这个是自己建立的文件夹)
然后就和之前一样的可以调用了。
ps:如果这里报错了(基本上都是路径的错误),记得把路径修改到现在的project的文件夹中去