【地平线旭日X3派试用体验】 人体跟随小车 --USB摄像头

之前已经尝试使用USB摄像头替换地平线机器人平台Apps应用实例里面的mipi摄像头。学习了一段时间ROS2之后终于让我的车与旭日派连接起来,实现人体跟随的效果。

一.准备工作

1.旭日X3派已烧录好地平线提供的Ubuntu20.0.4或Linux系统镜像。

2.旭日X3派已成功安装TogetherROS。

3.旭日X3派已安装USB摄像头当然使用F37 sensor更好。

4.USB转TTL一个

5.和旭日X3派在同一网段(有线或者连接同一无线网,IP地址前三段需保持一致)的PC,

PC端需要安装的环境包括:Ubuntu 20.0.4系统

ROS2 Foxy桌面版

Gazebo和Turtlebot3相关的功能包

二.对官方的launch文件作一些更改(如果使用USB摄像头则需要更改,如果使用F37 sensor则不需要更改)

可能格式有点问题,可以对照着自己的launch文件格式进行更改

1发布图片的节点

        Node(
            package='hobot_usb_cam',
            executable='hobot_usb_cam',
            output='screen',
            name='hobot_usb_cam',
            parameters=[
                #{"out_format": "nv12"},
                {"frame_id": "default_usb_cam"},
                {"image_width": 640},
                {"image_height": 480},
                {"io_method": "mmap"},
                {"zero_copy": False},
                {"pixel_format": "mjpeg"},
                {"video_device": "/dev/video8"}#更改为自己设备的位置
            ],
            arguments=['--ros-args', '--log-level', 'error']
        ),

2jpeg图片编码发布节点

        Node(
            package='hobot_codec',
            executable='hobot_codec_republish',
            output='screen',
            parameters=[
                {"channel": 1},
                {"in_mode": "ros"},
                {"in_format": "jpeg"},
                {"out_mode": "shared_mem"},
                {"out_format": "nv12"},
                {"sub_topic": "/image"},
                {"pub_topic": "/hbmem_img"}
            ],
            arguments=['--ros-args', '--log-level', 'error']
        ),

3web展示节点

        Node(
            package='websocket',
            executable='websocket',
            output='screen',
            parameters=[
                {"image_topic": "/image"},
                {"image_type": "mjpeg"},
                {"smart_topic": "/hobot_mono2d_body_detection"}
            ],
            arguments=['--ros-args', '--log-level', 'error']
        ),

4人体跟随节点

        Node(
            package='body_tracking',
            executable='body_tracking',
            output='screen',
            parameters=[
                {"ai_msg_sub_topic_name": "/hobot_mono2d_body_detection"},
                {"activate_wakeup_gesture": 0},#是否启用唤醒手势 1启用,0不启用 ok唤醒手势 palm取消跟随手势
                {"img_width": 640},#输入图像的宽
                {"img_height": 480},#输入图像的高与上面图像发布节点一致 如果与上面不一致可能在web上的识别框和身体节点没问题,但是人体跟随有问题
                {"track_serial_lost_num_thr": 30},
                {"move_step": 0.5},#平移运动的步长 单位 米
                {"rotate_step": 0.5},#旋转运动的步长 单位 弧度
                {"activate_robot_move_thr": 5}
            ],
            arguments=['--ros-args', '--log-level', 'info']
        )

更改完上面的节点即可启动旭日派的人体跟随实例

旭日派启动

# 配置TogetherROS环境
source /opt/tros/setup.bash

# 从TogetherROS的安装路径中拷贝出运行示例需要的配置文件。
cp -r /opt/tros/lib/mono2d_body_detection/config/ .

#启动launch文件
ros2 launch body_tracking hobot_body_tracking_without_gesture.launch.py 

PC启动仿真环境

source /opt/ros/foxy/setup.bash
export TURTLEBOT3_MODEL=burger
ros2 launch turtlebot3_gazebo empty_world.launch.py

三.创建节点接收Twist类型消息并通过串口发送控制信息给小车

import serial
from geometry_msgs.msg import Twist
import rclpy
from rclpy.node import Node


uart_dev="/dev/ttyUSB0" #串口设备usb转ttl
baudrate=115200 #波特率
ser = serial.Serial(uart_dev,int(baudrate),timeout =1)




class CmdNode(Node):

 def __init__(self,name):
 super().__init__(name)
 self.sub_cmd = self.create_subscription(Twist,"cmd_vel",self.recv_cmd_callback,6)

 def recv_cmd_callback(self,cmd):
 self.cmd_speed=cmd._linear._x   #获取平移运动的步长
 self.cmd_angular=cmd._angular._z    #获取旋转运动的步长
 if(self.cmd_angular!=0):
 if(self.cmd_angular>0):
 ser.write(b'3')#右转
 else:
 ser.write(b"2")#左传
 else:
 if(self.cmd_speed>0):
 ser.write(b'1')#前进
 else: 
 ser.write(b'0')#停止

 

def main(args=None):

 rclpy.init(args=args) #初始化库
 sub_node = CmdNode("sub")  #新建节点对象
 rclpy.spin(sub_node) #spin循环节点
 rclpy.shutdown #关闭客户端

车子需要接受ASCII码的0,1,2,3来控制车子的移动。车子接收一次命令后的步长不能过大。不然会来回摆头。

由于官方的串口还没仔细学习所以这里使用了一个USB转TTL。应该照着把设备名该了效果是一样的。

哇超赞!在实现过程中我们这篇人体跟随教程有帮到嘛开发者说 | 地平线程序员奶爸带你玩转机器人开发平台 —— 第二期 人体跟随(附直播课视频) (horizon.ai)

期待看看演示视频

疫情导致没法拿到车?,不过之前试过