当前位置:   article > 正文

ROS2安装、配置、编译helloworld及自定义消息_ros2自定义消息类型头文件命名

ros2自定义消息类型头文件命名

1、安装ROS2

1.1 添加密钥

打开终端,输入以下指令添加密钥:

sudo apt install curl gnupg2 -y
curl -s https://gitee.com/ohhuo/rosdistro/raw/master/ros.asc | sudo apt-key add -
  • 1
  • 2

1.2 设置软件源

输入以下指令将存储库添加到源列表中:

sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
  • 1

1.3 安装ROS2

sudo apt update
  • 1

使用如下命令安装foxy桌面版

sudo apt install ros-foxy-desktop 
  • 1

安装过程如果失败,则多试几次,有可能是网络问题。

1.4 安装自动补全工具

sudo apt install python3-argcomplete -y
  • 1

1.5 设置环境变量

echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source .bashrc
  • 1
  • 2

安装成功后,可以用以下指令查看ROS2版本

printenv | grep -i ROS
  • 1

1.6 官方hello_world

分别打开两个终端执行:

ros2 run demo_nodes_cpp talker
  • 1
ros2 run demo_nodes_cpp listener
  • 1

1.7 小乌龟

分别打开两个终端执行:

ros2 run turtlesim turtlesim_node
  • 1
ros2 run turtlesim turtle_teleop_key
  • 1

也可以试试下面一键安装ros2

一行代码安装ROS/ROS2、解决rosdep问题、配置好环境

2、配置

2.1 配置rosdep

wget http://fishros.com/install -O fishros && . fishros
  • 1

参考:
一行代码安装ROS/ROS2、解决rosdep问题、配置好环境

3、使用

3.1 开始

ROS2中创建一个新的功能包的语法为:

ros2 pkg create --build-type ament_cmake 'pkg_name'
  • 1

则功能包的文件路径为:

dev_ws/src/pkg_name
  • 1

3.2 colcon编译器

  1. 安装colcon编译器
sudo apt install python3-colcon-common-extensions
  • 1
  1. 编译工程
colcon build
  • 1

编译工程是在dev_ws文件夹下。

  1. 当工作空间中有许多包时,colcon build可能需要很长时间,这是可以只编译某个包。

当只编译demo_pkg时,可以执行:

colcon build --packages-select demo_pkg
  • 1

3.3、执行

编译工程后,dev_ws下会出现两个文件夹,在dev_ws下执行

. install/setup.bash

将工作空间添加到环境中,之后就可以使用pkg了。

#TODO 工作空间写到bashrc中。

起终端执行命令:

ros2 run pkg_name node_name
  • 1

4、数据格式

4.1 通用格式

原始的数据类型只有九类。其中每一个都可以在后面加上[]将其变成数组形式。

bool
byte
char
float32, float64
int8, uint8
int16, uint16
int32, uint32
int64, uint64
string
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

查看消息类型

ros2 interface show sensor_msgs/msg/Image
  • 1

自动生成的标准消息类型在:

/opt/ros/galactic/include/std_msgs/msg
  • 1

在CMakeList中需要添加消息的pkg属性,比如:

find_package(geometry_msgs REQUIRED)#change
...
ament_target_dependencies(pibot_driver 
                      rclcpp
                      geometry_msgs)#change
  • 1
  • 2
  • 3
  • 4
  • 5

4.2 自定义格式

4.2.1 创建自定义格式pkg

在dev_ws/src下

mkdir msgs
  • 1

则msgs文件夹与其他pkg文件夹同级,并把所有需要自定义的消息包都创建在msgs文件夹中便于统一管理.

cd msgs
ros2 pkg create --build-type ament_cmake demo_msg //demo_msg是新包的名称
cd demo_msg
mkdir msg
cd msg
touch DemoStamped.msg
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

DemoStamped.msg是自定义消息的载体,打开DemoStamped.msg并输入下面:

float32 data
  • 1

消息变量名必须是由小写的字母或数字的字符以及下划线组成。必须以字母字符开头,不能以下划线结尾,而且不能有连续的两个下划线。

4.2.2 修改消息包编译文件

注意:change意思是要添加的行。

  1. 修改demo_msg下的CMakeLists.txt
# find dependencies
find_package(ament_cmake REQUIRED)
# uncomment the following section in order to fill in
# further dependencies manually.
# find_package(<dependency> REQUIRED)
find_package(rosidl_default_generators REQUIRED)#change

rosidl_generate_interfaces(${PROJECT_NAME}
  "msg/DemoStamped.msg"
)#change
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  1. 修改demo_msg下的package.xml
<buildtool_depend>ament_cmake</buildtool_depend>
<build_depend>rosidl_default_generators</build_depend> #change

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

<exec_depend>rosidl_default_runtime</exec_depend> #change

 <member_of_group>rosidl_interface_packages</member_of_group> #change
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  1. 编译消息包
cd ~/dev_ws/src
colcon build --packages-select demo_msg
  • 1
  • 2

现在接口将被其他ROS 2包发现。

4.3 使用自定义消息格式

可以先验证自定义消息是否创建成功,在dev_ws下运行:

. install/setup.bash
  • 1

可以使用ros2 interface show命令确认接口创建工作:

ros2 interface show demo_msg/msg/DemoStamped
  • 1

返回:

float32 data
  • 1
4.3.1 使用

如果pkg_hello要使用自定义消息,需要对pkg_hello的节点、CMakelist和package文件进行一些简单的修改

  1. CMakelist
find_package(rclcpp REQUIRED)
find_package(demo_msg REQUIRED) # change,且,不能与其他msg并列在一起,需要find_package()自起一行

add_executable(target src/xx.cpp)
ament_target_dependencies(target rclcpp demo_msg)# change
  • 1
  • 2
  • 3
  • 4
  • 5
  1. package.xml

添加:

<depend>demo_msg</depend>
  • 1

python(可忽略):

<exec_depend>tutorial_interfaces</exec_depend>
  • 1
  1. 节点源代码引用
#include"demo_msg/msg/demo_stamped.hpp"
  • 1

注意!

我们上面自定义消息的文件名是DemoStamped.msg,每个首字母都是大写,编译后的头文件是demo_stamped.hpp,每个首字母已经是小字母,并且用下划线隔离。这点要非常注意,否则是找不到自定义消息的头文件的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/727297
推荐阅读
相关标签
  

闽ICP备14008679号