当前位置: 首页 > news >正文

网站开发要用到什么绚丽的网站

网站开发要用到什么,绚丽的网站,专业一元夺宝网站建设,网站建设带支付源码ROS2接口与自定义 引言1 ROS2自带接口1.1 ROS2通用标准消息包1.2 ROS2传感器消息包1.3 ROS2几何相关消息包 2 ROS2接口介绍2.1 常用CLI命令2.2 原始数据类型与包装类型 3 自定义接口示例3.1 接口定义3.2 自定义接口RCLPY 引言 笔者跟着鱼香ROS的ROS2学习之旅 学习参考#xf… ROS2接口与自定义 引言1 ROS2自带接口1.1 ROS2通用标准消息包1.2 ROS2传感器消息包1.3 ROS2几何相关消息包 2 ROS2接口介绍2.1 常用CLI命令2.2 原始数据类型与包装类型 3 自定义接口示例3.1 接口定义3.2 自定义接口RCLPY 引言 笔者跟着鱼香ROS的ROS2学习之旅 学习参考 【ROS2机器人入门到实战】 笔者的学习目录 MOMO的鱼香ROS2一ROS2入门篇——从Ubuntu操作系统开启MOMO的鱼香ROS2二ROS2入门篇——ROS2初体验MOMO的鱼香ROS2三ROS2入门篇——ROS2第一个节点MOMO的鱼香ROS2四ROS2入门篇——ROS2节点通信之话题与服务 1 ROS2自带接口 接口其实是一种规范 1.1 ROS2通用标准消息包 ros2 interface package std_msgsstd_msgs/msg/String std_msgs/msg/ByteMultiArray std_msgs/msg/UInt16 std_msgs/msg/UInt64 std_msgs/msg/UInt8 std_msgs/msg/Int64MultiArray std_msgs/msg/UInt32MultiArray std_msgs/msg/UInt16MultiArray std_msgs/msg/Float32MultiArray std_msgs/msg/MultiArrayDimension std_msgs/msg/Float64MultiArray std_msgs/msg/Int8 std_msgs/msg/Byte std_msgs/msg/Bool std_msgs/msg/Int32 std_msgs/msg/Int16 std_msgs/msg/Float64 std_msgs/msg/Header std_msgs/msg/Char std_msgs/msg/Int64 std_msgs/msg/MultiArrayLayout std_msgs/msg/Int16MultiArray std_msgs/msg/Float32 std_msgs/msg/UInt64MultiArray std_msgs/msg/UInt8MultiArray std_msgs/msg/Int8MultiArray std_msgs/msg/Int32MultiArray std_msgs/msg/UInt32 std_msgs/msg/ColorRGBA std_msgs/msg/Empty以下是一些 std_msgs 中的常见消息类型 Header: 包含 ROS 消息的标准头部信息如时间戳和坐标系。 uint32 seq time stamp string frame_idString: 代表字符串。 string dataBool: 代表布尔值。 bool dataInt8, Int16, Int32, Int64: 代表有符号整数分别为 8 位、16 位、32 位和 64 位。 int8 data int16 data int32 data int64 dataUInt8, UInt16, UInt32, UInt64: 代表无符号整数分别为 8 位、16 位、32 位和 64 位。 uint8 data uint16 data uint32 data uint64 dataFloat32, Float64: 代表单精度和双精度浮点数。 float32 data float64 data这些消息类型可以广泛应用于 ROS 中的不同节点用于传递基本的数据信息。例如一个节点可以发布一个包含测量值的 Float32 消息而另一个节点可以订阅这个消息以获取测量值。 1.2 ROS2传感器消息包 ros2 interface package sensor_msgssensor_msgs/msg/PointCloud sensor_msgs/msg/CompressedImage sensor_msgs/msg/Image sensor_msgs/msg/PointField sensor_msgs/msg/LaserEcho sensor_msgs/msg/BatteryState sensor_msgs/msg/MultiDOFJointState sensor_msgs/msg/NavSatFix sensor_msgs/msg/Joy sensor_msgs/msg/MultiEchoLaserScan sensor_msgs/msg/LaserScan sensor_msgs/msg/JoyFeedbackArray sensor_msgs/msg/MagneticField sensor_msgs/msg/ChannelFloat32 sensor_msgs/msg/RegionOfInterest sensor_msgs/msg/NavSatStatus sensor_msgs/msg/Range sensor_msgs/msg/Illuminance sensor_msgs/msg/RelativeHumidity sensor_msgs/msg/Temperature sensor_msgs/msg/FluidPressure sensor_msgs/msg/JointState sensor_msgs/srv/SetCameraInfo sensor_msgs/msg/Imu sensor_msgs/msg/CameraInfo sensor_msgs/msg/JoyFeedback sensor_msgs/msg/TimeReference sensor_msgs/msg/PointCloud2以下是 sensor_msgs 中的一些常见消息类型 Image: 用于传递图像数据包括图像的像素数据、编码格式、时间戳等。 Header header uint32 height uint32 width string encoding uint8 is_bigendian uint32 step uint8[] dataCameraInfo: 包含相机的信息如相机矩阵、畸变参数等。 Header header uint32 height uint32 width string distortion_model float64[] D float64[] K float64[] R float64[] P uint32[] binning_x uint32[] binning_y sensor_msgs/RegionOfInterest roiPointCloud2: 用于传递点云数据包括点的坐标、颜色等信息。 Header header bool is_dense string[] fields uint8 INT8 1 uint8 UINT8 2 uint8 INT16 3 uint8 UINT16 4 uint8 INT32 5 uint8 UINT32 6 uint8 FLOAT32 7 uint8 FLOAT64 8 uint8 point_step uint8[] data uint32 row_step uint32 width uint32 height sensor_msgs/PointField[] fields bool is_bigendian uint32 point_step uint32 row_step uint32 data_length uint8[] dataLaserScan: 用于传递激光扫描数据。 Header header float32 angle_min float32 angle_max float32 angle_increment float32 time_increment float32 scan_time float32 range_min float32 range_max float32[] ranges float32[] intensitiesIMU惯性测量单元的方向、角速度和线性加速度 Header header geometry_msgs/Quaternion orientation float64[9] orientation_covariance geometry_msgs/Vector3 angular_velocity float64[9] angular_velocity_covariance geometry_msgs/Vector3 linear_acceleration float64[9] linear_acceleration_covarianceheader: 用于包含时间戳等信息的标准 ROS 消息头。 orientation: 包含四元数表示的方向。 orientation_covariance: 一个长度为 9 的数组表示方向协方差矩阵。 angular_velocity: 包含角速度信息的三维向量。 angular_velocity_covariance: 一个长度为 9 的数组表示角速度协方差矩阵。 linear_acceleration: 包含线性加速度信息的三维向量。 linear_acceleration_covariance: 一个长度为 9 的数组表示线性加速度协方差矩阵。 这些消息类型可以用于在 ROS 系统中传递从各种传感器获得的数据。节点可以发布这些消息而其他节点则可以订阅它们以获取传感器数据。 1.3 ROS2几何相关消息包 ros2 interface package geometry_msgsgeometry_msgs/msg/Quaternion geometry_msgs/msg/WrenchStamped geometry_msgs/msg/Point32 geometry_msgs/msg/Accel geometry_msgs/msg/Pose geometry_msgs/msg/Vector3 geometry_msgs/msg/PoseArray geometry_msgs/msg/PoseWithCovarianceStamped geometry_msgs/msg/Polygon geometry_msgs/msg/AccelWithCovarianceStamped geometry_msgs/msg/AccelStamped geometry_msgs/msg/PoseWithCovariance geometry_msgs/msg/TransformStamped geometry_msgs/msg/PointStamped geometry_msgs/msg/PolygonStamped geometry_msgs/msg/Vector3Stamped geometry_msgs/msg/Inertia geometry_msgs/msg/Wrench geometry_msgs/msg/AccelWithCovariance geometry_msgs/msg/Pose2D geometry_msgs/msg/InertiaStamped geometry_msgs/msg/PoseStamped geometry_msgs/msg/QuaternionStamped geometry_msgs/msg/Transform geometry_msgs/msg/Twist geometry_msgs/msg/TwistStamped geometry_msgs/msg/TwistWithCovarianceStamped geometry_msgs/msg/TwistWithCovariance geometry_msgs/msg/Point以下是一些常见的 geometry_msgs 中的消息类型 Point: 代表三维空间中的点。 float64 x float64 y float64 zQuaternion: 代表四元数通常用于表示旋转。 float64 x float64 y float64 z float64 wPose: 代表包含位置和方向的位姿。 Point position Quaternion orientationTransform: 代表变换矩阵。 Vector3 translation Quaternion rotation这些消息类型可以用于 ROS 中的各种应用例如机器人运动、感知、导航等。通过使用这些消息ROS 中的不同节点可以相互通信共享几何信息从而实现协同工作。 2 ROS2接口介绍 2.1 常用CLI命令 查看接口列表 ros2 interface list查看某一个接口详细的内容 ros2 interface show std_msgs/msg/String2.2 原始数据类型与包装类型 基本数据类型每一个都可以在后面加上[]将其变成数组形式从一个变成多个 bool byte char float32, float64 int8, uint8 int16, uint16 int32, uint32 int64, uint64 string 对数据类型进行剥洋葱 ros2 interface show sensor_msgs/msg/Image终端显示如下 # This message contains an uncompressed image # (0, 0) is at top-left corner of imagestd_msgs/Header header # Header timestamp should be acquisition time of image uint32 height # image height, that is, number of rows uint32 width # image width, that is, number of columns string encoding # Encoding of pixels -- channel meaning, ordering, size uint8 is_bigendian # is this data bigendian? uint32 step # Full row length in bytes uint8[] data # actual matrix data, size is (step * rows)对非基类的数据数据类型std_msgs/Header header进行剥洋葱 ros2 interface show std_msgs/msg/Header终端显示如下 # Two-integer timestamp that is expressed as seconds and nanoseconds. builtin_interfaces/Time stamp # Transform frame with which this data is associated. string frame_id对非基类的数据数据类型builtin_interfaces/Time进行剥洋葱 ros2 interface show builtin_interfaces/msg/Time终端显示如下 int32 sec uint32 nanosec最后只剩下基类了 3 自定义接口示例 说明这部分笔者主要是将鱼香ROS2的示例成功跑通具体流程如下 示例链接 【ROS2机器人入门到实战】ROS2接口介绍 【ROS2机器人入门到实战】自定义接口RCLPY实战 3.1 接口定义 1.创建接口功能包 ros2 pkg create alian_ros2_interfaces --build-type ament_cmake --dependencies rosidl_default_generators geometry_msgs注意功能包类型必须为ament_cmake 依赖rosidl_default_generators用于生成ROS中的消息、服务和行为的代码。ROS中的消息和服务是通过IDL接口定义语言描述的而rosidl_default_generators 则负责将这些IDL文件转换为各种编程语言的实际代码。 具体来说rosidl_default_generators 支持将ROS接口定义语言ROS IDL文件转换为C、C等语言的源代码。这包括生成用于发布/订阅消息、提供/调用服务以及执行行为所需的代码。 2.编写接口脚本文件 接着创建文件夹msg、srv和文件RobotPose.msg、RobotStatus.msg、MoveRobot.srv如下图。 . ├── CMakeLists.txt ├── msg │ ├── RobotPose.msg │ └── RobotStatus.msg ├── package.xml └── srv└── MoveRobot.srv 2 directories, 5 filesRobotPose.msg uint32 STATUS_MOVEING 1 uint32 STATUS_STOP 2 uint32 status geometry_msgs/Pose poseRobotStatus.msg uint32 STATUS_MOVEING 1 uint32 STATUS_STOP 1 uint32 status float32 poseMoveRobot.srv # 前进后退的距离 float32 distance --- # 当前的位置 float32 pose3.设置配置文件 CMakeLists.txt find_package(rosidl_default_generators REQUIRED) find_package(geometry_msgs REQUIRED) # 添加下面的内容 rosidl_generate_interfaces(${PROJECT_NAME}msg/RobotPose.msgmsg/RobotStatus.msgsrv/MoveRobot.srvDEPENDENCIES geometry_msgs )package.xml buildtool_dependament_cmake/buildtool_dependdependrosidl_default_generators/dependdependgeometry_msgs/dependmember_of_grouprosidl_interface_packages/member_of_group #添加这一行test_dependament_lint_auto/test_dependtest_dependament_lint_common/test_depend4.编译接口功能包 colcon build --packages-select example_ros2_interfaces3.2 自定义接口RCLPY 1.创建功能包和节点 cd colcon_ws/ # 自定义的工作空间 ros2 pkg create example_interfaces_rclpy --build-type ament_python --dependencies rclpy example_ros2_interfaces --destination-directory src --node-name example_interfaces_robot_02 touch src/example_interfaces_rclpy/example_interfaces_rclpy/example_interfaces_control_02.py2. 编写节点脚本 example_interfaces_robot_02.py #!/usr/bin/env python3 import rclpy from rclpy.node import Node from example_ros2_interfaces.msg import RobotStatus import math from time import sleep from example_ros2_interfaces.srv import MoveRobotclass Robot():def __init__(self) - None:self.current_pose_ 0.0self.target_pose_ 0.0self.status_ RobotStatus.STATUS_STOPdef get_status(self):return self.status_def get_current_pose(self):return self.current_pose_def move_distance(self,distance):self.status_ RobotStatus.STATUS_MOVEING # 更新状态为移动、self.target_pose_ distance # 更新目标位置while math.fabs(self.target_pose_ - self.current_pose_) 0.01:step distance / math.fabs(distance) * math.fabs(self.target_pose_ - self.current_pose_) * 0.1 # 计算一步移动距离self.current_pose_ step # 移动一步print(f移动了{step}当前位置{self.current_pose_})sleep(0.5) #休息0.5sself.status_ RobotStatus.STATUS_STOP # 更新状态为停止return self.current_pose_ class ExampleInterfacesRobot02(Node):def __init__(self,name):super().__init__(name)self.get_logger().info(节点已启动%s! % name)self.robot Robot()self.move_robot_server_ self.create_service(MoveRobot,move_robot, self.handle_move_robot) self.robot_status_publisher_ self.create_publisher(RobotStatus,robot_status, 10) self.publisher_timer_ self.create_timer(0.5, self.publisher_timer_callback)def publisher_timer_callback(self):定时器回调发布数据函数msg RobotStatus() #构造消息msg.status self.robot.get_status()msg.pose self.robot.get_current_pose()self.robot_status_publisher_.publish(msg) # 发布消息self.get_logger().info(f发布了当前的状态{msg.status} 位置{msg.pose})def handle_move_robot(self,request, response):self.robot.move_distance(request.distance)response.pose self.robot.get_current_pose()return responsedef main(argsNone):rclpy.init(argsargs) # 初始化rclpynode ExampleInterfacesRobot02(example_interfaces_robot_02) # 新建一个节点rclpy.spin(node) # 保持节点运行检测是否收到退出指令CtrlCrclpy.shutdown() # 关闭rclpyexample_interfaces_control_02.py #!/usr/bin/env python3 import rclpy from rclpy.node import Node from example_ros2_interfaces.msg import RobotStatus from example_ros2_interfaces.srv import MoveRobotclass ExampleInterfacesControl02(Node):def __init__(self,name):super().__init__(name)self.get_logger().info(节点已启动%s! % name)self.client_ self.create_client(MoveRobot,move_robot) self.robot_status_subscribe_ self.create_subscription(RobotStatus,robot_status,self.robot_status_callback,10)def robot_status_callback(self,msg):self.get_logger().info(f收到状态数据位置{msg.pose} 状态{msg.status})def move_result_callback_(self, result_future):response result_future.result()self.get_logger().info(f收到返回结果{response.pose})def move_robot(self, distance):while rclpy.ok() and self.client_.wait_for_service(1)False:self.get_logger().info(f等待服务端上线....)request MoveRobot.Request()request.distance distanceself.get_logger().info(f请求服务让机器人移动{distance})self.client_.call_async(request).add_done_callback(self.move_result_callback_)def main(argsNone):rclpy.init(argsargs) # 初始化rclpynode ExampleInterfacesControl02(example_interfaces_control_02) # 新建一个节点node.move_robot(5.0) #移动5米rclpy.spin(node) # 保持节点运行检测是否收到退出指令CtrlCrclpy.shutdown() # 关闭rclpy3.修改配置文件setup.py entry_points{console_scripts: [example_interfaces_control_02 example_interfaces_rclpy.example_interfaces_control_02:main,example_interfaces_robot_02 example_interfaces_rclpy.example_interfaces_robot_02:main],},4.编译功能包运行测试 # 新终端 colcon build --packages-up-to example_interfaces_rclpy source install/setup.bash ros2 run example_interfaces_rclpy example_interfaces_robot_02 # 新终端 source install/setup.bash ros2 run example_interfaces_rclpy example_interfaces_control_02上图则说明自定义接口测试成功
http://www.sczhlp.com/news/183328/

相关文章:

  • 彩票做的最好是个网站好怎样用网站做淘宝客推广
  • 个旧网站建设网站开发调研问卷
  • 灰色网站wordpress页眉导航
  • 视频模板免费下载网站wordpress 主题盗
  • 常州网站推广软件厂家重庆建站费用
  • 甘肃建设体网站怎样做网络推广外包
  • 怎么搜索整个网站内容社群营销的十大步骤
  • 做视频网站推广挣钱吗不用下载的行情网站
  • 等号(=)在C语言和python中有什么区别?
  • AI元人文(十四)之价值共生篇:再论物物交换——作为价值共生基础的元协议
  • 4.布局系统
  • 2025.10.10
  • 20251010 之所思 - 人生如梦
  • 网站关键词排名怎么提升博物馆设计网站推荐
  • 重庆建设工程信息网下载做seo的公司
  • 江津做网站系统开发外包
  • 金华网站建设解决方案山西省财政厅门户网站三基建设
  • 制作图网站有哪些内容太原网站建设公司招聘
  • 网上平台怎么推广手机网站怎么优化
  • 邯郸兄弟建站怎么创建网站文件夹
  • 长沙做网站那家好建站平台和网站建设的区别
  • 网站优化网络公司邢台建设局网站
  • 阿里云二级域名网站怎么建设wordpress对接码支付教程
  • 北京市建设资格注册中心网站站长统计是什么意思
  • 网站开发人员工作内容室内装修设计学习网
  • 有没有个人网站遨游建站
  • 网站建设的仿站北京专业企业营销网站建设
  • 最安全的网站语言成都房地产公司前十名
  • 网站备案截图营销网站建站开发
  • 兰州网站建设公司有哪些深圳优化企业