做图片赚钱的网站,wordpress根目录在哪,成电影878uucom,建筑工程网招聘信息ROS2第一个节点 引言1 认识ROS2节点1.1 节点之间的交互1.2 节点的命令行指令1.3 工作空间1.4 功能包1.4.1 功能包获取安装1.4.2 功能包相关的指令 ros2 pkg 2 ROS2构建工具—Colcon2.1 安装Colcon2.2 测试编译2.3 Colcon其他指令 3 使用RCLPY编写节点3.1 创建Python功能包3.2 编… ROS2第一个节点 引言1 认识ROS2节点1.1 节点之间的交互1.2 节点的命令行指令1.3 工作空间1.4 功能包1.4.1 功能包获取安装1.4.2 功能包相关的指令 ros2 pkg 2 ROS2构建工具—Colcon2.1 安装Colcon2.2 测试编译2.3 Colcon其他指令 3 使用RCLPY编写节点3.1 创建Python功能包3.2 编写程序3.3 编译运行节点 引言
笔者跟着鱼香ROS的ROS2学习之旅 学习参考 【ROS2机器人入门到实战】 笔者的学习目录
MOMO的鱼香ROS2一ROS2入门篇——从Ubuntu操作系统开启ROS2】MOMO的鱼香ROS2一ROS2入门篇——从Ubuntu操作系统开启
专业术语认识
面向过程编程思想。缩写POP面向对象编程思想。缩写OOP 对象 属性行为函数式思想。缩写FP
1 认识ROS2节点
1.1 节点之间的交互
ROS2中每一个节点也是只负责一个单独的模块化的功能比如一个节点负责控制车轮转动一个节点负责从激光雷达获取数据、一个节点负责处理激光雷达的数据、一个节点负责定位等等 那节点与节点之间的通信一共四种通信方式:
话题-topics服务-services动作-Action参数-parameters 1.2 节点的命令行指令
运行节点指令ros2 run 包名字 可执行文件名字
ros2 run package_name executable_name查看节点列表
ros2 node list查看节点信息
ros2 node info node_name其他指令
# 重映射节点名称
ros2 run turtlesim turtlesim_node --ros-args --remap __node:my_turtle
# 运行节点时设置参数
ros2 run example_parameters_rclcpp parameters_basic --ros-args -p rcl_log_level:101.3 工作空间
创建工作空间其实就是创建一个目录
mkdir -p name_ws/src1.4 功能包
功能包可以理解为存放节点的地方ROS2中功能包根据编译方式的不同分为三种类型。 ament_python适用于python程序 cmake适用于C ament_cmake适用于C程序,是cmake的增强版 1.4.1 功能包获取安装
sudo apt install ros-version-package_name1.4.2 功能包相关的指令 ros2 pkg
1.创建功能包
ros2 pkg create package-name --build-type {cmake,ament_cmake,ament_python} --dependencies 依赖名字2.列出可执行文件
ros2 pkg executables3.列出所有的包
ros2 pkg list4.输出某个包所在路径的前缀
ros2 pkg prefix package-name5.查看功能包的信息。
ros2 pkg xml package-name2 ROS2构建工具—Colcon
对创建的ROS2工作空间进行编译colcon想当于ros1中的catkin工具。
2.1 安装Colcon
sudo apt-get install python3-colcon-common-extensions打开终端输入colcon即可看到其使用方法
2.2 测试编译
创建一个工作文件夹
mkdir -p ROS_WS/colcon_ws/src
cd ROS_WS/colcon_ws/src
# -b eloquent克隆的分支为eloquent
git clone https://github.com/ros2/examples -b eloquent 编译
colcon build
# 指定包编译
colcon build --packages-select [YOUR_PKG_NAME]允许通过更改src下的部分文件来改变install重要每次调整 python 脚本时都不必重新build了
colcon build --symlink-install运行编译的包的测试
colcon test配置资源
source install/setup.bash2.3 Colcon其他指令 构建指令 –packages-select 仅生成单个包或选定的包。 –packages-up-to构建选定的包包括其依赖项。 –packages-above整个工作区然后对其中一个包进行了更改。此指令将重构此包以及递归地依赖于此包的所有包。 指定构建后安装的目录可以通过 --build-base参数和–install-base指定构建目录和安装目录。 合并构建目录 –merge-install使用作为所有软件包的安装前缀而不是安装基中的软件包特定子目录。 –install-base 如果没有此选项每个包都将提供自己的环境变量路径从而导致非常长的环境变量值。使用此选项时添加到环境变量的大多数路径将相同从而导致环境变量值更短。 符号链接安装 启用–symlink-install后将不会把文拷贝到install目录而是通过创建符号链接的方式。 错误时继续安装 启用–continue-on-error当发生错误的时候继续进行编译。 CMake参数 –cmake-args将任意参数传递给CMake。与其他选项匹配的参数必须以空格为前缀。 控制构建线程 –executor EXECUTOR用于处理所有作业的执行程序。默认值是根据所有可用执行程序扩展的优先级选择的。要查看完整列表请调用 colcon extensions colcon_core.executor --verbose。 sequential [colcon-core] 一次处理一个包。 parallel [colcon-parallel-executor] 处理多个作业平行. –parallel-workers NUMBER 要并行处理的最大作业数。默认值为 os.cpu_count() 给出的逻辑 CPU内核数。 开启构建日志 使用–log-level可以设置日志级别比如–log-level info。 3 使用RCLPY编写节点
3.1 创建Python功能包
cd ROS_WS/colcon_ws/src
ros2 pkg create imu_py --build-type ament_python --dependencies rclpy具体解释如下 ros2 pkg create imu_py: 创建 ROS 2 包的命令包的名称为 “imu_py”。 –build-type ament_python: 指定使用 Ament 构建系统并选择 Python 作为开发语言。 –dependencies rclpy: 指定该包的依赖项即 “rclpy”这是 ROS 2 的 Python 客户端库。 3.2 编写程序 导入库文件初始化客户端库新建节点spin循环节点关闭客户端库 在imu_py/imu_py下创建node_imu.py开始编写代码。 插上usb接口的IMU硬件
# -*- coding: utf-8 -*-Created on 2023/12/6 下午4:46
author: alian
1.查看映射端口
ls /dev/ttyUSB*
2.更改端口的权限
sudo chmod 777 /dev/ttyUSB0
3.可视化
ros2 run rviz2 rviz2
4. ROS2重要指令
colcon build --packages-select imu_py # 编译
source install/setup.bash
ros2 run imu_py node_imu # 运行节点import rclpy
from rclpy.node import Node
# 话题接口
from sensor_msgs.msg import Imu # imu接口
from sensor_msgs.msg import LaserScan # 激光雷达接口
from sensor_msgs.msg import Image # 相机接口
# Usart Library
import serial
import struct
import binascii# imu接收数据类型
class Node_imu(Node):send_data []def __init__(self,name):super().__init__(name) # 继承父类初始化名称self.get_logger().info(发布节点%s%name)self.publisher_ self.create_publisher(Imu, imu_data, 1) # 创建发布imu数据的发布者到话题imu_data上# 串口初始化self.IMU_Usart serial.Serial(port/dev/ttyUSB0, # 串口baudrate115200, # 波特率timeout0.001 # 由于后续使用read_all按照一个timeout周期时间读取数据# imu在波特率115200返回数据时间大概是1ms,9600下大概是10ms# 所以读取时间设置0.001s)# 判断串口是否打开成功if self.IMU_Usart.isOpen():print(open success)else:print(open failed)def main(argsNone):ros2运行该节点的入口函数编写ROS2节点的一般步骤1. 导入库文件2. 初始化客户端库3. 新建节点对象4. spin循环节点5. 关闭客户端库rclpy.init(argsargs) # 初始化rclpynode Node_imu(imu_publisher) # 新建一个节点node.get_logger().info(大家好我是node_imu.)rclpy.spin(node) # 保持节点运行检测是否收到退出指令CtrlCrclpy.shutdown() # 关闭rclpy代码编写完成用CrtlS进行保存。接着修改setup.py。
from setuptools import setuppackage_name imu_pysetup(namepackage_name,version0.0.0,packages[package_name],data_files[(share/ament_index/resource_index/packages,[resource/ package_name]),(share/ package_name, [package.xml]),],install_requires[setuptools],zip_safeTrue,maintainerll,maintainer_emaillltodo.todo,descriptionTODO: Package description,licenseTODO: License declaration,tests_require[pytest],entry_points{console_scripts: [node_imuimu_py.node_imu:main, # 在这里修改# node_imuimu_py.node_imu:main # 可以发布多个节点],},
)“node_imuimu_py.node_imu:main”解释如下 node_imu节点名称 imu_py.node_imu:main【软件包】.【执行文件.py】:【执行函数mian】 setup.py这段配置是声明一个ROS2的节点声明后使用colcon build才能检测到从而将其添加到install目录下。
3.3 编译运行节点
# 回到工作空间
cd ROS_WS/colcon_ws/src
colcon build --packages-select imu_py
source install/setup.bash运行的软件包和节点名可以通过查看软件包的setup.py
ros2 run imu_py node_imu