一、流程简介1.编写发布方实现2.编写订阅方实现3.编辑配置文件4.编译5.执行从终端进入Training_course文件夹下的srccd Training_course/src在src目录下创建接口文件。注意1.接口文件只能是C类型2.若不声明依赖类型则默认是C类型ros2 pkg create base_interfaces_demo打开VSCodecode ./在src下建立c功能包ros2 pkg create cpp01_topic --build-type ament_cmake --dependencies rclcpp std_msgs base_interfaces_demo --node-name dem01_taker_str在src下建立python功能包ros2 pkg create py01_topic --build-type ament_python --dependencies rclpy std_msgs base_interfaces_demo --node-name dem01_taker_str_pyC1.发布方实现编辑dem01_taker_str.cpp文件编辑完后可以运行一下并新开一个终端输入ros2 topic echo /chatter来看一下话题有没有发布成功2.订阅方实现在cpp01_topic的src目录下新建dem02_listener_str.cpp文件3.编辑配置文件:编写完dem02_listener_str文件后修改CMakeLists.txt文件修改内容如下1复制add_executable(dem01_taker_str src/dem01_taker_str.cpp)并将复制的内容修改为add_executable(dem02_listener_str src/dem02_listener_str.cpp)再重新粘贴回原add_executable(dem01_taker_str src/dem01_taker_str.cpp)下面2复制ament_target_dependencies(dem01_taker_strrclcppstd_msgsbase_interfaces_demo)并将复制内容修改为ament_target_dependencies(dem02_listener_strrclcppstd_msgsbase_interfaces_demo)再重新粘贴回原文下面3在install(TARGETS dem01_taker_strDESTINATION lib/${PROJECT_NAME})中的dem01_taker_str后面空格加入dem02_listener_strinstall即修改完后的内容为install(TARGETS dem01_taker_str dem02_listener_strDESTINATION lib/${PROJECT_NAME})保存4.编译colcon build --packages-select cpp01_topic配置环境变量. install/setup.bash5.执行先执行发布方再执行订阅方python1.发布方实现编辑dem01_taker_str_py.py文件2.订阅方实现在py01_topic的src目录下新建ddem02_listener_str_py.py文件3.编辑配置文件把setup.py文件夹下的dem01_taker_str_py py01_topic.dem01_taker_str_py:main复制一行修改为dem02_listener_str_py py01_topic.dem02_listener_str_py:main再粘贴到原文的下方即改后为entry_points{console_scripts: [dem01_taker_str_py py01_topic.dem01_taker_str_py:main,dem02_listener_str_py py01_topic.dem02_listener_str_py:main],4.编译colcon build --packages-select cpp01_topic配置环境变量. install/setup.bash5.执行先执行发布方再执行订阅方二、话题通信之自定义接口类型1.在base_interfaces_demo下新建一个文件夹命名为msg,在msg下新建一个Student.msg文件文件中写入自定义的类型2.修改配置文件打开package.xml添加编译依赖执行依赖声明当前包所属的功能包组,删除下面报错的test_depend编译和执行依赖可以在终端使用ros2 pkg list | grep -i rosidl命令查询rosidl依赖修改万后的内容如下!--编译依赖--build_dependrosidl_default_generators/build_depend!--执行依赖--exec_dependrosidl_default_runtime/exec_depend!--声明当前包所属的功能包组--member_of_grouprosidl_interface_packages/member_of_group打开CMakeLists.txt加一行查找的功能包即编译依赖find_package(rosidl_default_generators REQUIRED)用rosidl_generate_interfaces为接口文件生成源码“”中填写文件的路径修改后的内容如下find_package(rosidl_default_generators REQUIRED)#为接口文件生成源码rosidl_generate_interfaces( ${PROJECT_NAME}msg/Student.msg)配置完成后编译base_interfaces_demo包在终端输入colcon build --packages-select base_interfaces_demo刷新环境变量. install/setup.bash测试有没有编译成功ros2 interface show base_interfaces_demo如果编译成功了输出的内容应和Student.msg文件中的内容一致如果未输出成功可用检查包有没有被构建ros2 pkg list | grep base_interfaces_demo查看某文件所在的位置ros2 pkg prefix 包名检查文件是否存在ls -l ~/ros2_workspace/src/ws01_plumbing/src/base_interfaces_demo/msg/Student.msg查看文件内容cat ~/ros2_workspace/src/ws01_plumbing/src/base_interfaces_demo/msg/Student.msg注生成的python文件在lib/python3.12/base_interfaces_demo下面生成的cpp文件在include/detail下面三、话题通信之自定义消息C注意使用自定义消息时需要配置c_cpp_properties.json文件在文件中的includePath属性下面添加一行${workspaceFolder}/install/base_interfaces_demo/include/**1.在cpp01_topic文件的src下新建dem03_taker_stu和dem04_listener_stu并配置CMackList.txt文件配置内容如下add_executable(dem03_taker_stu src/dem03_taker_stu.cpp)add_executable(dem04_listener_stu src/dem04_listener_stu.cpp)ament_target_dependencies(dem03_taker_sturclcppstd_msgsbase_interfaces_demo)ament_target_dependencies(dem04_listener_sturclcppstd_msgsbase_interfaces_demo)install(TARGETS dem01_taker_str dem02_listener_str dem03_taker_stu dem04_listener_stuDESTINATION lib/${PROJECT_NAME})python注意使用自定义消息时需要配置settings.json文件在文件中的python.autoComplete.extraPaths和python.analysis.extraPaths属性下面添加一行/home/qiao/ros2_workspace/ws01_plumbing/install/base_interfaces_demo/lib/python3.12/site-packages配置后的内容如下{python.autoComplete.extraPaths: [/home/qiao/ros2_workspace/ws01_plumbing/install/base_interfaces_demo/lib/python3.12/site-packages],python.analysis.extraPaths: [/home/qiao/ros2_workspace/ws01_plumbing/install/base_interfaces_demo/lib/python3.12/site-packages]}1.在py01_topic文件的py01_topic下新建dem03_taker_stu和dem04_listener_stu并配置setup.py文件配置好后的内容如下entry_points{console_scripts: [dem01_taker_str_py py01_topic.dem01_taker_str_py:main,dem02_listener_str_py py01_topic.dem02_listener_str_py:main,dem03_taker_stu_py py01_topic.dem03_taker_stu_py:main,dem04_listener_stu_py py01_topic.dem04_listener_stu_py:main],