地平线机器人 · 2022年12月02日 · 江苏

【地平线旭日X3派试用体验】复现《人体跟随》小车(第五节)

一,准备工作

准备工作详情见前几节内容。

  • 旭日X3派已烧录好地平线提供的Ubuntu20.0.4或Linux系统镜像;
  • 旭日X3派已成功安装TogetherROS;
  • 旭日X3派已安装F37 sensor;
  • 和旭日X3派在同一网段(有线或者连接同一无线网,IP地址前三段需保持一致)的PC;
  • 小车硬件准备。

二,启动官方例程

使用MobaXterm,SSH登录,建立一个终端,输入以下指令:

# 配置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

三,启动小车接收node控制程序

上面的人体识别程序全部使用官方教程。但小车控制程序,需要根据自己的小车进行修改,需要另外一个接收消息的程序。我的小车和官方的不一样,所以不能直接使用官方代码了,原理官方有介绍:

下面是订阅/cmd_vel话题的控制消息程序

from geometry_msgs.msg import Twist

import rclpy

from rclpy.node import Node

from std_msgs.msg import String

import Hobot.GPIO as GPIO

import time

import sys

import os

import serial

import serial.tools.list_ports

output_pin26 = 26

output_pin28 = 28

output_pin38 = 38 # BOARD 缂栫爜 38

output_pin40 = 40

GPIO.setmode(GPIO.BOARD)

GPIO.setup(output_pin26, GPIO.OUT, initial=GPIO.LOW)

GPIO.setup(output_pin28, GPIO.OUT, initial=GPIO.LOW)

GPIO.setup(output_pin38, GPIO.OUT, initial=GPIO.LOW)

GPIO.setup(output_pin40, GPIO.OUT, initial=GPIO.LOW)

uart_dev='/dev/ttyS3'

baudrate = 115200

try:

ser = serial.Serial(uart_dev, int(baudrate), timeout=1) # 1s timeout

print("open serial sucess")

except Exception as e:

print("open serial failed!\n")

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 #获取旋转运动的步长

# print("get msg sucess")

if(self.cmd_speed>0):

GPIO.output(output_pin26, GPIO.HIGH)

GPIO.output(output_pin28, GPIO.LOW)

GPIO.output(output_pin38, GPIO.HIGH)

GPIO.output(output_pin40, GPIO.LOW)

print("111")

elif(self.cmd_angular>0):

GPIO.output(output_pin26, GPIO.LOW)

GPIO.output(output_pin28, GPIO.LOW)

GPIO.output(output_pin38, GPIO.HIGH)

GPIO.output(output_pin40, GPIO.LOW)

print("222")

elif(self.cmd_angular<0):

GPIO.output(output_pin26, GPIO.HIGH)

GPIO.output(output_pin28, GPIO.LOW)

GPIO.output(output_pin38, GPIO.LOW)

GPIO.output(output_pin40, GPIO.LOW)

print("333")

else:

GPIO.output(output_pin26, GPIO.LOW)

GPIO.output(output_pin28, GPIO.LOW)

GPIO.output(output_pin38, GPIO.LOW)

GPIO.output(output_pin40, GPIO.LOW)

print("444")

def main(args=None):

rclpy.init(args=args) #初始化库

sub_node = CmdNode("sub") #新建节点对象

rclpy.spin(sub_node) #spin循环节点

rclpy.shutdown #关闭客户端

if __name__ == '__main__':

main()

好了,准备好程序,另外新建一个终端,输入指令

# 配置TogetherROS环境

source /opt/tros/setup.bash

#启动订阅消息程序

python3 /app/40pin_samples/zyd_ros_cmd_control.py

end

原作者:zhengyad
原链接:本文转自地平线开发者社区(详细文档及完整展示点击此处一键直达)
推荐阅读
关注数
1246
内容数
65
我们的使命是 AI 赋能万物 共创智能未来。我们致力于打造最实用、最好用、最易用的边缘 AI 开发平台。通过地平线自研的高算力 AI 芯片,开发工具,让更多的 AI 开发者,中小企业,学习和加速 AI 产品开发和创新!
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息