ROS工作空间和软件包的创建和自定义消息在Qt中的使用

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的文件夹中去

猜你喜欢

转载自blog.csdn.net/qq_32651847/article/details/110469112
今日推荐