ROS2安装、配置、编译helloworld及自定义消息

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 设置软件源

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

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.3 安装ROS2

sudo apt update

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

sudo apt install ros-foxy-desktop 

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

1.4 安装自动补全工具

sudo apt install python3-argcomplete -y

1.5 设置环境变量

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

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

printenv | grep -i ROS

1.6 官方hello_world

分别打开两个终端执行:

ros2 run demo_nodes_cpp talker
ros2 run demo_nodes_cpp listener

1.7 小乌龟

分别打开两个终端执行:

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

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

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

2、配置

2.1 配置rosdep

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

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

3、使用

3.1 开始

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

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

则功能包的文件路径为:

dev_ws/src/pkg_name

3.2 colcon编译器

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

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

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

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

colcon build --packages-select demo_pkg

3.3、执行

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

. install/setup.bash

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

#TODO 工作空间写到bashrc中。

起终端执行命令:

ros2 run pkg_name node_name

4、数据格式

4.1 通用格式

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

bool
byte
char
float32, float64
int8, uint8
int16, uint16
int32, uint32
int64, uint64
string

查看消息类型

ros2 interface show sensor_msgs/msg/Image

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

/opt/ros/galactic/include/std_msgs/msg

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

find_package(geometry_msgs REQUIRED)#change
...
ament_target_dependencies(pibot_driver 
                      rclcpp
                      geometry_msgs)#change

4.2 自定义格式

4.2.1 创建自定义格式pkg

在dev_ws/src下

mkdir msgs

则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

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

float32 data

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

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. 修改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. 编译消息包
cd ~/dev_ws/src
colcon build --packages-select demo_msg

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

4.3 使用自定义消息格式

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

. install/setup.bash

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

ros2 interface show demo_msg/msg/DemoStamped

返回:

float32 data
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. package.xml

添加:

<depend>demo_msg</depend>

python(可忽略):

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

注意!

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

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值