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

实训课建设网站步骤重庆网站制作

实训课建设网站步骤,重庆网站制作,html手机网站怎么做,html可视化布局工具目录 1. ros2 yolov8 检测需要以来一些库,分别是:rclpy cv_bridge std_msgs sensor_msgs sensor_msgs_py vision_msgs 2. 创建一个新的功能包 3. 建立 yolo_launch.py 里面先加载gazebo和rviz2,在创建好本地的yolov8的node文件后也加入进来。 4. 创建好本地的yol…

目录

1. ros2 yolov8 检测需要以来一些库,分别是:rclpy cv_bridge std_msgs sensor_msgs sensor_msgs_py vision_msgs

2. 创建一个新的功能包

 3.  建立 yolo_launch.py 里面先加载gazebo和rviz2,在创建好本地的yolov8的node文件后也加入进来。

4. 创建好本地的yolov8的node文件 

5. 修改setup.py文件

6. 编译包

7. 运行launch文件


1. ros2 yolov8 检测需要以来一些库,分别是:rclpy cv_bridge std_msgs sensor_msgs sensor_msgs_py vision_msgs

(1) rclpy Python语言的ROS Client Library,操作ROS2的节点话题服务  
(2) cv-bridge 在ROS图像消息和OpenCV图像之间进行转换的一个功能包
(3) std-msgs 一种标准消息类型包,包含了一些常用的基本数据类型的消息定义

以上设计的是图像依赖的,下面两个是获取其他数据类型的
---------------------------------------------------------------

(4) sensor-msgs-py point_cloud2模块
(5) vision-msgs ROS的与算法无关的计算机视觉消息类型,ROS视觉信息介绍该软件包定义了一组消息,以统一ROS中的计算机视觉和对象检测工作

# 库安装命令如下:
sudo apt-get install ros-galactic-rclpy
sudo apt-get install ros-galactic-cv-bridge
sudo apt-get install ros-galactic-std-msgs
sudo apt-get install ros-galactic-sensor-msgs-py
sudo apt-get install ros-galactic-vision-msgs

2. 创建一个新的功能包

ros2 pkg create ros_yolov8 --build-type ament_python --node-name detect_node --dependencies rclpy cv_bridge std_msgs sensor_msgs sensor_msgs_py vision_msgs

 运行结果:

going to create a new package
package name: ros_yolov8
destination directory: 
package format: 3
version: 0.0.0
description: TODO: Package description
maintainer: 
licenses: ['TODO: License declaration']
build type: ament_python
dependencies: ['rclpy', 'cv_bridge', 'std_msgs', 'sensor_msgs', 'sensor_msgs_py', 'vision_msgs']
node_name: detect_node
creating folder ./ros_yolov8
creating ./ros_yolov8/package.xml
creating source folder
creating folder ./ros_yolov8/ros_yolov8
creating ./ros_yolov8/setup.py
creating ./ros_yolov8/setup.cfg
creating folder ./ros_yolov8/resource
creating ./ros_yolov8/resource/ros_yolov8
creating ./ros_yolov8/ros_yolov8/__init__.py
creating folder ./ros_yolov8/test
creating ./ros_yolov8/test/test_copyright.py
creating ./ros_yolov8/test/test_flake8.py
creating ./ros_yolov8/test/test_pep257.py
creating ./ros_yolov8/ros_yolov8/detect_node.py

 

# ./ros_yolov8/package.xml
<?xml version="1.0"?>
......

  <depend>rclpy</depend>
  <depend>cv_bridge</depend>
  <depend>std_msgs</depend>
  <depend>sensor_msgs</depend>
  <depend>sensor_msgs_py</depend>
  <depend>vision_msgs</depend>

......
</package>

 3.  建立 yolo_launch.py 里面先加载gazebo和rviz2,在创建好本地的yolov8的node文件后也加入进来。

 

# 创建一个新目录来存储(launch)启动文件
cd ./ros_yolov8 && mkdir launch 
cd ./ros_yolov8/launch && touch detect_demo.launch.py
tree ./ros_yolov8/launch

  运行结果:

./ros_yolov8/launch
└── detect_demo.launch.py
#!/usr/bin/python3
# ./ros_yolov8/launch/detect_demo.launch.pyimport osfrom ament_index_python.packages import get_package_share_directoryfrom launch import LaunchDescription
from launch_ros.actions import Nodefrom launch.substitutions import LaunchConfiguration
from launch.actions import DeclareLaunchArgument
from launch.conditions import IfConditionfrom launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSourcedef generate_launch_description():# all kinds of file pathros_root_path = "/xxx/ros2_ws"try:pkg_name = "ros_yolov8"share_pkg_path = get_package_share_directory(pkg_name)except:share_pkg_path = os.path.join(ros_root_path, "install", pkg_name, "share", pkg_name)print(f"{share_pkg_path=}")assert os.path.exists(share_pkg_path)# -1-Include the Gazebo launch file, provided by the gazebo_ros packageworld_file_path = os.path.join(share_pkg_path, 'worlds', 'yolo.world')# 包含其它的launch文件 :/opt/ros/galactic/share/gazebo_ros/launch/gazebo.launch.py# $ ros2 launch /opt/ros/galactic/share/gazebo_ros/launch/gazebo.launch.py world:=/xxx/yolo.worldgazebo_ros_dirpath = get_package_share_directory('gazebo_ros')print(f"{gazebo_ros_dirpath=}")gazebo_launch_filepath = os.path.join(gazebo_ros_dirpath, 'launch', 'gazebo.launch.py')print(f"{gazebo_launch_filepath=}")assert os.path.exists(gazebo_launch_filepath)# -2-Include the Rviz2 config file, provided by the rviz2 package# /opt/ros/galactic/lib/rviz2/rviz2# $ ros2 run rviz2 rviz2 -d # start rviz2rviz_filepath = os.path.join(share_pkg_path, 'rviz2', 'yolo.rviz')print(f"{rviz_filepath=}")assert os.path.exists(rviz_filepath)# Nodesgazebo_cmd = IncludeLaunchDescription(PythonLaunchDescriptionSource([gazebo_launch_filepath]),launch_arguments={'world': world_file_path}.items())static_transform_cmd = Node(package='tf2_ros',executable='static_transform_publisher',name='static_transform_publisher',arguments=["0", "0", "0", "0", "0", "0", "map", "camera_link_optical"],output='screen')start_rviz_cmd = Node(package='rviz2',executable='rviz2',name='rviz2',arguments=['-d', rviz_filepath],output='screen')# Launch arguments# start yolov8_nodestart_yolov8_node = Node(package='ros_yolov8',executable='yolov8_node',name='yolov8_node',output='screen',arguments=["-model", "/xxx/yolo.pt"])# Add everything to launch description and returnld = LaunchDescription()ld.add_action(gazebo_cmd)ld.add_action(static_transform_cmd)ld.add_action(start_rviz_cmd)ld.add_action(start_yolov8_node)return ld"""
/opt/ros/galactic/lib/tf2_ros/static_transform_publisher
# ros2 run tf2_ros static_transform_publisher "0" "0" "0" "0" "0" "0" "map" "camera_link_optical"
# -2-1- map axis between origin and world
"""

4. 创建好本地的yolov8的node文件 

# ./ros_yolov8/ros_yolov8/yolov8_node.pyimport os
import sys
import time
import argparse
import random
import torch
# ROS2的客户端库(python) rclpy
import rclpy
from rclpy.qos import qos_profile_sensor_data
from rclpy.node import Node
# image-----below----
# topic sensor_msgs/msg/Image to cv2
import cv2
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
# yolov8
from ultralytics import YOLOdef parse_argument():parser = argparse.ArgumentParser(description='detect image from topic (gazebo)')parser.add_argument('-model', type=str, default='/xxx/yolo.pt')parser.add_argument('-device', type=str, default='cpu')parser.add_argument('-conf_threshold', type=float, default=0.5)parser.add_argument('-iou_threshold', type=float, default=0.7)parser.add_argument('-enable', type=bool, default=True)parser.add_argument('-input_image_topic', type=str, default='/camera/image_raw')parser.add_argument('-show_inference_image', type=bool, default=True)parser.add_argument('-save', type=bool, default=False)args, unknown = parser.parse_known_args()return argsclass Yolov8Node(Node):# Node constructordef __init__(self) -> None:super().__init__("yolov8_node")# node paramsself.args = parse_argument()#self._class_to_color = {}self.cv_bridge = CvBridge()# yoloself.yolo = YOLO(self.args.model)self.yolo.fuse()print(f"{self.args.device=}")self.yolo.to(self.args.device)# topic publishers & subscribersself._infer_pub = self.create_publisher(Image, "inference_image", 10)self._image_sub = self.create_subscription(Image,self.args.input_image_topic,self.image_cb,qos_profile_sensor_data)def image_cb(self, msg: Image) -> None:# if self.args.enable:# record start timefps_start_t = time.time()# convert to cv image & predictcv_image = self.cv_bridge.imgmsg_to_cv2(msg)infer_start_t = time.perf_counter()results = self.yolo.predict(source=cv_image,verbose=False,stream=False,conf=self.args.conf_threshold,iou=self.args.iou_threshold,show=self.args.show_inference_image,mode="predict",save=self.args.save)end_time = time.perf_counter()# visualize the results on the frameannotated_image = results[0].plot()# record the end time and calculate FPSfps = 1.0 / (end_time - fps_start_t)cv2.putText(annotated_image, "FPS: {:.2f}".format(fps), (10, 30),cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)results = results[0].cpu()for b in results.boxes:label = self.yolo.names[int(b.cls)]score = float(b.conf)if score < self.args.conf_threshold:continue# get boxes valuesbox = b.xywh[0]x_center = float(box[0])y_center = float(box[1])x_size = float(box[2])y_size = float(box[3])x_min = round(x_center - x_size / 2.0)x_max = round(x_center + x_size / 2.0)y_min = round(y_center - y_size / 2.0)y_max = round(y_center + y_size / 2.0)# draw boxes for debuggingif label not in self._class_to_color:r = random.randint(0, 255)g = random.randint(0, 255)b = random.randint(0, 255)self._class_to_color[label] = (r, g, b)color = self._class_to_color[label]cv2.rectangle(cv_image, (x_min, y_min), (x_max, y_max), color, 2)label = "{} ({:.3f})".format(label, score)pos = (x_min + 5, y_min + 25)font = cv2.FONT_HERSHEY_SIMPLEXcv2.putText(cv_image, label, pos, font,1, color, 1, cv2.LINE_AA)# append msgself._infer_pub.publish(self.cv_bridge.cv2_to_imgmsg(annotated_image, encoding=msg.encoding))def main():rclpy.init()node = Yolov8Node()rclpy.spin(node)node.destroy_node()rclpy.shutdown()if __name__ == '__main__':main()

5. 修改setup.py文件

# ./ros_yolov8/setup.py
from setuptools import setup
import os
from glob import globpackage_name = 'ros_yolov8'setup(name=package_name,version='0.0.0',packages=[package_name],# new ros2_ws/install/{package_name}/share/*, copy from src/{package_name}/*data_files=[('share/ament_index/resource_index/packages', ['resource/' + package_name]),('share/' + package_name, ['package.xml']),# During installation, we need to copy the launch files(os.path.join('share', package_name, "launch"), glob('launch/*launch.[pxy][yma]*')),# Same with the RViz2 configuration file.(os.path.join('share', package_name, "rviz2"), glob('rviz2/*')),# And the Gazebo world files.(os.path.join('share', package_name, "worlds"), glob('worlds/*')),# And the config files.(os.path.join('share', package_name, "config"), glob('config/*')),],
......

6. 编译包

source /opt/ros/galactic/setup.bash
colcon build --packages-select ros-yolov8
. install/setup.bash

7. 运行launch文件

ros2 launch /xxx/ros_yolov8/launch/detect_demo.launch.py
# 或
ros2 launch ros_yolov8 detect_demo.launch.py

http://www.hkea.cn/news/970006/

相关文章:

  • 服务器上给网站做301跳转企业网站注册
  • 网站建设好做吗乐事薯片软文推广
  • wordpress 年月归档如何优化培训体系
  • 威海高区建设局网站长春做网络优化的公司
  • 安平做网站百度一下首页百度一下知道
  • 苏州建设网站市政中标项目如何做推广引流赚钱
  • 17网站一起做网店怎么下单来宾网站seo
  • 建设商务网站的目的天津seo网站排名优化公司
  • 阿里巴巴网站导航栏怎么做口碑营销策划方案
  • 线上做交互的网站百度app下载
  • 做暖暖欧美网站挖掘爱站网
  • 网站 风格百度推广公司
  • 林州网站建设公司站长工具关键词排名怎么查
  • 想给公司做个网站微信seo是什么意思
  • 网站做管制户外刀具营销推广方案模板
  • 淘宝客网站免费做seo网站关键词优化机构
  • 企业做网站建设的好处seo网站关键词优化
  • 一般网站用什么做的最新新闻国内大事件
  • 做线上网站需要钱吗互联网营销推广
  • 找个美工做淘宝网站需要多少钱南昌seo方案
  • 网站用户登录流程图外贸高端网站设计公司
  • 做搜狗手机网站优化软代写
  • wordpress页面背景颜色win7优化设置
  • 做分类信息网站代码百度搜索推广优化师工作内容
  • 南京网站开发公司关键词推广
  • 合水口网站建设百度指数明星人气榜
  • 上传网站图片处理推广软件免费
  • 做网站怎么写代码下载百度软件
  • 县城做网站网站搭建关键词排名
  • b2b多平台一键发布seo需要掌握哪些技术