一,准备工作
准备工作详情见前几节内容。
- 旭日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
原链接:本文转自地平线开发者社区(详细文档及完整展示点击此处一键直达)