1. 卸载并重新装YOLOv5相关的Node(如果改乱了)
sudo apt remove -y tros-dnn-node tros-dnn-node-sample tros-hobot-usb-cam tros-hobot-codec
sudo apt update # 确保有地平线的源
sudo apt install -y tros-dnn-node* tros-hobot-usb-cam tros-hobot-codec
烧录镜像(如果有需要), 重启
2. 运行1次
source /opt/tros/setup.bash
export CAM_TYPE=usb
运行一小会, 打印一些帧率信息后, Ctrl+C结束
ros2 launch dnn_node_example dnn_node_example.launch.py dnn_example_config_file:=config/yolov5workconfig.json
3. 修改分辨率后运行1次, Ctrl+C结束
/opt/tros/share/dnn_node_example/launch/dnn_node_example.launch.py, 79-89行
# usb cam图片发布pkg
usb_node = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
os.path.join(
get_package_share_directory('hobot_usb_cam'),
'launch/hobot_usb_cam.launch.py')),
launch_arguments={
'usb_image_width': '1920',
'usb_image_height': '1080',
'usb_video_device': LaunchConfiguration('device')
}.items()
)
运行一小会, 打印一些帧率信息后, Ctrl+C结束
ros2 launch dnn_node_example dnn_node_example.launch.py dnn_example_config_file:=config/yolov5workconfig.json
4. 如果要将分辨率改回
/opt/tros/share/dnn_node_example/launch/dnn_node_example.launch.py, 79-89行
# usb cam图片发布pkg
usb_node = IncludeLaunchDescription(
PythonLaunchDescriptionSource(
os.path.join(
get_package_share_directory('hobot_usb_cam'),
'launch/hobot_usb_cam.launch.py')),
launch_arguments={
'usb_image_width': '640',
'usb_image_height': '480',
'usb_video_device': LaunchConfiguration('device')
}.items()
)
Node拆解
usb_node
ros2 run hobot_usb_cam hobot_usb_cam \
--ros-args --log-level warn \
--ros-args -p zero_copy:=False \
--ros-args -p io_method:=mmap \
--ros-args -p video_device:=/dev/video8 \
--ros-args -p pixel_format:=mjpeg \
--ros-args -p image_height:=1080 \
--ros-args -p image_width:=1920
codec
ros2 run hobot_codec hobot_codec_republish \
--ros-args --log-level warn \
--ros-args -p in_format:=jpeg \
--ros-args -p out_format:=nv12 \
--ros-args -p channel:=1 \
--ros-args -p out_mode:=shared_mem \
--ros-args -p sub_topic:=image \
--ros-args -p pub_topic:=hbmem_img
hobot_dnn
ros2 run dnn_node_example example \
--ros-args --log-level warn \
--ros-args -p feed_type:=1 \
--ros-args -p dump_render_img:=0 \
--ros-args -p is_shared_mem_sub:=1 \
--ros-args -p config_file:=config/yolov5workconfig.json \
--ros-args -p msg_pub_topic_name:=yolov5_results
web
ros2 run websocket websocket \
--ros-args --log-level error \
--ros-args -p only_show_image:=False \
--ros-args -p image_topic:=image \
--ros-args -p image_type:=mjpeg \
--ros-args -p smart_topic:=yolov5_results
如何使用launch启动?
借着dnn_node
的launch用一用
touch /opt/tros/share/dnn_node_example/launch/my.launch.py
vim /opt/tros/share/dnn_node_example/launch/my.launch.py
加入以下内容:
import os
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
# USB Camera Node
usb_cam_node = Node(
package='hobot_usb_cam',
executable='hobot_usb_cam',
name='usb_cam_node',
output='screen',
arguments=[
'--ros-args', '--log-level', 'warn',
'--ros-args', '-p', 'zero_copy:=False',
'--ros-args', '-p', 'io_method:=mmap',
'--ros-args', '-p', 'video_device:=/dev/video8',
'--ros-args', '-p', 'pixel_format:=mjpeg',
'--ros-args', '-p', 'image_height:=1080',
'--ros-args', '-p', 'image_width:=1920'
]
)
# Codec Node
codec_node = Node(
package='hobot_codec',
executable='hobot_codec_republish',
name='codec_node',
output='screen',
arguments=[
'--ros-args', '--log-level', 'warn',
'--ros-args', '-p', 'in_format:=jpeg',
'--ros-args', '-p', 'out_format:=nv12',
'--ros-args', '-p', 'channel:=1',
'--ros-args', '-p', 'out_mode:=shared_mem',
'--ros-args', '-p', 'sub_topic:=image',
'--ros-args', '-p', 'pub_topic:=hbmem_img'
]
)
# DNN Node
dnn_node = Node(
package='dnn_node_example',
executable='example',
name='dnn_node',
output='screen',
arguments=[
'--ros-args', '--log-level', 'warn',
'--ros-args', '-p', 'feed_type:=1',
'--ros-args', '-p', 'dump_render_img:=0',
'--ros-args', '-p', 'is_shared_mem_sub:=1',
'--ros-args', '-p', 'config_file:=config/yolov5workconfig.json',
'--ros-args', '-p', 'msg_pub_topic_name:=yolov5_results'
]
)
# Websocket Node
websocket_node = Node(
package='websocket',
executable='websocket',
name='websocket_node',
output='screen',
arguments=[
'--ros-args', '--log-level', 'error',
'--ros-args', '-p', 'only_show_image:=False',
'--ros-args', '-p', 'image_topic:=image',
'--ros-args', '-p', 'image_type:=mjpeg',
'--ros-args', '-p', 'smart_topic:=yolov5_results'
]
)
return LaunchDescription([
usb_cam_node,
codec_node,
dnn_node,
websocket_node
])
使用以下命令启动即可:
source /opt/tros/setup.bash
ros2 launch dnn_node_example my.launch.py dnn_example_config_file:=config/yolov5workconfig.json
其他内容
摄像头相关测试, 尤其是确认摄像头支持的最大分辨率: https://developer.horizon.cc/forumDetail/226908961255990788
TROS跑YOLOv5: https://developer.horizon.cc/documents_tros/boxs/detection/yolo
TROS部署YOLOv5, 刷爆30fps: https://developer.horizon.cc/forumDetail/198685796998563332