【四足】第一篇:msg功能包创建

本文档详细介绍了如何在ROS2环境中创建一个新的msg功能包,并解决在同一包内msg无法调用的问题。步骤包括创建工作空间、创建msg功能包、编辑相关文件、编译与运行,以及C++中如何调用msg。此外,还提供了错误提示和解决办法,以及文件内容和CMakeLists.txt、package.xml的示例。
摘要由CSDN通过智能技术生成

另外创建一个msg功能包的原因是在同一个功能包下msg会无法调用,出现error:The package “lys_pkg” must not “build_depend” on a package with the same name as this package,即不能有相同名字的包,所以要另外创建一个名为"test_msgs"的功能包,再在lys_pkg功能包里调用

一、创建工作空间

创建文件夹

mkdir -p ~/lys_ws/src
cd ~/lys_ws
colcon build

二、创建功能包

1、创建功能包

cd ~/lys_ws/src
ros2 pkg create --build-type ament_cmake test_msgs

2、复制文件
msg
在这里插入图片描述

3、修改文件

注意事项:
xxx.msg:文件名要以大写字母 开头且不能有下划线和数字;
float32 t:变量定义为小写字母,不能用大写字母
msg文件中不应有=的赋值操作

Motormsg.msg

int8 id
int8 mode
float32 t
float32 w
float32 pos
float32 p
float32 d

MotorBackmsg.msg

int8 id
float32 t
float32 w
float32 pos

IMU.msg

float32 roll
float32 pitch
float32 yaw

CMakeLists.txt
*注意自己的文件路径

cd ~/lys_ws/src/test_msgs
sudo gedit CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(test_msgs)

# Default to C99
if(NOT CMAKE_C_STANDARD)
  set(CMAKE_C_STANDARD 99)
endif()

# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
  set(CMAKE_CXX_STANDARD 14)
endif()

if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  add_compile_options(-Wall -Wextra -Wpedantic)
endif()

# find dependencies
find_package(ament_cmake REQUIRED)
find_package(builtin_interfaces REQUIRED)
find_package(geometry_msgs REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(std_msgs REQUIRED)


set(msg_files
"msg/IMU.msg"
"msg/Motormsg.msg"
"msg/MotorBackmsg.msg"
)
rosidl_generate_interfaces(${PROJECT_NAME} ${msg_files} DEPENDENCIES builtin_interfaces geometry_msgs std_msgs ADD_LINTER_TESTS)

ament_export_dependencies(rosidl_default_generators)
ament_export_dependencies(rosidl_default_runtime)
ament_export_include_directories(include)

# uncomment the following section in order to fill in
# further dependencies manually.
# find_package(<dependency> REQUIRED)

if(BUILD_TESTING)
  find_package(ament_lint_auto REQUIRED)
  # the following line skips the linter which checks for copyrights
  # uncomment the line when a copyright and license is not present in all source files
  #set(ament_cmake_copyright_FOUND TRUE)
  # the following line skips cpplint (only works in a git repo)
  # uncomment the line when this package is not in a git repo
  #set(ament_cmake_cpplint_FOUND TRUE)
  ament_lint_auto_find_test_dependencies()
endif()

ament_package()

package.xml

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>test_msgs</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="hahalim@todo.todo">hahalim</maintainer>
  <license>TODO: License declaration</license>

  <buildtool_depend>ament_cmake</buildtool_depend>
<build_depend>rosidl_default_generators</build_depend>

<exec_depend>rosidl_default_runtime</exec_depend>

<member_of_group>rosidl_interface_packages</member_of_group>


  <test_depend>ament_lint_auto</test_depend>
  <test_depend>ament_lint_common</test_depend>

  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>


三、 编译和运行

cd ~/lys_ws
colcon build --packages-select test_msg
source install/setup.bash

查看消息类型

ros2 interface show test_msgs/msg/Motormsg
ros2 interface show test_msgs/msg/MotorBackmsg
ros2 interface show test_msgs/msg/IMU

附:C++调用msg方法
在CMakeLists.txt里面添加

find_package(test_msgs REQUIRED)	 # test_msgs根据你的功能包名称修改
ament_target_dependencies(${PROJECT_NAME}_node std_msgs rclcpp test_msgs)  	# test_msgs根据你的功能包名称修改

在package.xml里面添加

<depend>test_msgs</depend>		# test_msgs根据你的功能包名称修改

在源文件中包含
特别注意,这里的格式,消息文件是驼峰风格的命名方式,也就是通过大写分割单词,但 是包含的时候要用下划线风格,全部是小写

#include "test_msgs/msg/test_msg.hpp" 

使用的时候

publisher = this->create_publisher<test_msgs:msg::Motormsg>("pub", 10);	//“pub”是发布者发布的话题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值