1.helloworld案例
1.创建功能包(C++)
终端下,进入ws00_helloworld/src目录,使用如下指令创建一个C ++ 功能包:
ros2 pkg create pkg01_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld
执行完毕,在src目录下将生成一个名为pkg01_helloworld_cpp的目录,且目录中已经默认生成了一些子级文件与文件夹。
2.编辑源文件
进入pkg01\_helloworld\_cpp/src目录,该目录下有一helloworld.cpp文件,修改文件内容如下:
#include "rclcpp/rclcpp.hpp"int main(int argc, char ** argv)
{// 初始化 ROS2rclcpp::init(argc,argv);// 创建节点auto node = rclcpp::Node::make_shared("helloworld_node");// 输出文本RCLCPP_INFO(node->get_logger(),"hello world!");// 释放资源rclcpp::shutdown();return 0;
}
3.编译执行
在终端进入ws_helloworld下,执行:
colcon build
. install/setup.bash
ros2 run pkg01_helloworld_cpp helloworld
程序执行,在终端下将输出文本:"hello world!"。
4.创建功能包(Python)
ros2 pkg create pkg02_helloworld_py --build-type ament_python --dependencies rclpy --node-name helloworld
5.编辑源文件
进入pkg02_helloworld_py/pkg02_helloworld_py目录,该目录下有一helloworld.py文件,修改文件内容如下:
import rclpydef main():# 初始化 ROS2rclpy.init()# 创建节点node = rclpy.create_node("helloworld_py_node")# 输出文本node.get_logger().info("hello world!")# 释放资源rclpy.shutdown()if __name__ == '__main__':main()
6.编译执行
终端下进入到工作空间,执行如下指令:
colcon build
. install/setup.bash
ros2 run pkg02_helloworld_py helloworld
7.运行优化
每次终端中执行工作空间下的节点时,都需要调用. install/setup.bash
指令,使用不便,优化策略是,可以将该指令的调用添加进~/setup.bash
,操作格式如下:
echo "source /{工作空间路径}/install/setup.bash" >> ~/.bashrc
示例:
echo "source /home/ros2/ws00_helloworld/install/setup.bash" >> ~/.bashrc
以后再启动终端时,无需手动再手动刷新环境变量。
8.定向构建
colcon build --packages-select 文件名
9.功能包
功能包是ROS2应用程序的核心,但是功能包不能直接构建,必须依赖于工作空间,一个ROS2工作空间的目录结构如下:
WorkSpace --- 自定义的工作空间。|--- build:存储中间文件的目录,该目录下会为每一个功能包创建一个单独子目录。|--- install:安装目录,该目录下会为每一个功能包创建一个单独子目录。|--- log:日志目录,用于存储日志文件。|--- src:用于存储功能包源码的目录。|-- C++功能包|-- package.xml:包信息,比如:包名、版本、作者、依赖项。|-- CMakeLists.txt:配置编译规则,比如源文件、依赖项、目标文件。|-- src:C++源文件目录。|-- include:头文件目录。|-- msg:消息接口文件目录。|-- srv:服务接口文件目录。|-- action:动作接口文件目录。|-- Python功能包|-- package.xml:包信息,比如:包名、版本、作者、依赖项。|-- setup.py:与C++功能包的CMakeLists.txt类似。|-- setup.cfg:功能包基本配置文件。|-- resource:资源目录。|-- test:存储测试相关文件。|-- 功能包同名目录:Python源文件目录。
另外,无论是Python功能包还是C++功能包,都可以自定义一些配置文件相关的目录。
|-- C++或Python功能包|-- launch:存储launch文件。|-- rviz:存储rviz2配置相关文件。|-- urdf:存储机器人建模文件。|-- params:存储参数文件。|-- world:存储仿真环境相关文件。|-- map:存储导航所需地图文件。|-- ......