美文网首页玩转树莓派树莓派ROS机器人操作系统
ROS填坑记之树莓派驱动智能卡车

ROS填坑记之树莓派驱动智能卡车

作者: 一铭爸爸 | 来源:发表于2019-07-28 15:50 被阅读4次

     我去年从www.thingiverse.com上下载了MrCrankyface设计的V4 truck车架,自己设计了平台,用3D打印完毕后完成组装并安装了下列设备:

     1  Fubata S3003 舵机

     2 JGB37-520直流减速电机(为了保证不伤到小孩,特意买了低转速大扭矩的电机)

     3顽皮龙模型车的电调ESC(10A)

     4 PCA9685 PWM舵机驱动板(同时也能驱动ESC)

     5 18650电池一对和电池盒一个

     6 DC降压电源模块(负责树莓派供电)

     7 LM2596S直流可调降压模块(负责PCA9685供电)

    8 CSI 接口摄像头(支持树莓派)

    9 树莓派3B+

树莓派上的程序如下:

#!/usr/bin/env python

# -*- coding: UTF-8 -*-

import rospy

import Adafruit_PCA9685

import time

from std_msgs.msg import String

class car():

    angel_min=200

    angel_max=600

    angel_middle=340

    forword_max=230#前进的最大速度,但是最小的pwm值

    back_max=560#后退的最大速度

    stop=380#停止的pwm值

    angel_port=0#舵机在一号口

    throtle_port=1#esc在二号口

    pwm = Adafruit_PCA9685.PCA9685()

    speed=stop

    angel=angel_middle

    fre_step=20#操作幅度

    def __init__(self):

        #设置初始值

        self.pwm.set_pwm_freq(60)

        self.pwm.set_pwm(self.angel_port,0,self.angel)

        self.pwm.set_pwm(self.throtle_port,0,self.speed)

        print('初始化完成!')

    def receive(self,data):

        #w加速 s减速 a左转 d右转 q 刹车

        if data=='w':

            self.speed=self.speed-self.fre_step

            if self.speed<=self.forword_max:

                self.speed=self.forword_max

        #减少pwm值 增加前进速度值直至从后退变前进,同时限制前进最大速度

          elif data=='s':

               self.speed=self.speed+self.fre_step

              if self.speed>=self.back_max:

                    self.speed=self.back_max

#增大pwm值 减少前进速度值直至从前进变后退,同时限制后退最大速度

       elif data=='q':

            self.speed=self.stop

        elif data=='a':

            self.angel=self.angel+self.fre_step

            if self.angel>=self.angel_max:

                self.angel=self.angel_max

        elif data=='d':

            self.angel=self.angel-self.fre_step

            if self.angel<=self.angel_min:

                self.angel=self.angel_min

        self.pwm.set_pwm(self.throtle_port,0,self.speed)

        self.pwm.set_pwm(self.angel_port,0,self.angel)

donkeycar=car()

def callback(data):

    rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)

    donkeycar.receive(data.data)

def listener():

    # In ROS, nodes are uniquely named. If two nodes with the same

    # name are launched, the previous one is kicked off. The

    # anonymous=True flag means that rospy will choose a unique

    # name for our 'listener' node so that multiple listeners can

    # run simultaneously.

    rospy.init_node('listener', anonymous=True)

    rospy.Subscriber("chatter", String, callback)

    # spin() simply keeps python from exiting until this node is stopped

    rospy.spin()

if __name__ == '__main__':

    listener()

保存后,记得修改为可执行文件,用rosrun运行即可。

笔记本上的程序如下:

#!/usr/bin/env python

# license removed for brevity

import rospy

from std_msgs.msg import String

import sys

from pynput import keyboard

hello_str=''

pub = rospy.Publisher('chatter', String, queue_size=10)

rospy.init_node('talker', anonymous=True)

rate = rospy.Rate(10) # 10hz

def on_press(key):

    try:

        hello_str=format(key.char)

        rospy.loginfo(hello_str)

        pub.publish(hello_str)

        rate.sleep()

    except AttributeError:

        print('special key {0} pressed'.format(key))

def on_release(key):

    if key == keyboard.Key.esc:

        return False

def on_release(key):

    if key == keyboard.Key.esc:

        return False

def talker():

    while not rospy.is_shutdown():

        with keyboard.Listener(on_press = on_press,on_realse=on_release) as listener:

            listener.join()

if __name__ == '__main__':

    try:

        talker()

   except rospy.ROSInterruptException:

         exit()

保存后,修改为可执行文件,用rosrun运行即可。我的小车可以跑起来了!这是人类的一小步,是我的一大步。

相关文章

  • ROS填坑记之树莓派驱动智能卡车

    我去年从www.thingiverse.com上下载了MrCrankyface设计的V4 truck车架,自己设...

  • ROS填坑记之树莓派图像处理

    我计划从树莓派上的摄像头采集图像数据到笔记本上,tensorflow处理完毕后再向树莓派发送操作指令,控制电机和...

  • ROS填坑记

    去年Donkeycar在树莓派上安装成功后,访问控制界面时无法显示摄像头的画面。我跟踪调试程序执行的过程,一直无...

  • 树莓派填坑记录

    这篇写得非常不优雅,是从Wordpress的HTML转到Markdown的,凑乎看吧。 烧录SD卡不再赘述——Ka...

  • 树莓派3b 自带系统 用root ssh登录的一点总结

    最近拿到了一个树莓派,于是想在上面跑一点Python程序,就开始了茫茫的填坑之路... 最开始拿到树莓派,发现ss...

  • ROS填坑记(2)

    前面的大坑填完之后,一帆风顺,所有官方文档的例子都顺利完成。我的应用场景是PC作为上位机进行智能控制,树莓派作为...

  • ROS填坑记(1)

    安装官方文档,创建了ROS工作空间,执行catkin_make创建相关文件。执行sudo apt-get ins...

  • 树莓派ros求教

    求大佬指教,树莓派安装好了Ubuntu系统,安装的ros,但是在使用时,一直提示无rospy模块,重新安装了两次都...

  • 树莓派 ROS docker

    安装启动 Docker 环境 让 docker 命令免 sudo 下载 noetic-ros-base 镜像

  • 树莓派(古德微)制作语音智能宝宝(3)--语音点播

    上一节,我们的智能宝宝综合了智能问答和中译英的功能,树莓派(古德微)制作语音智能宝宝(2)--中英翻译树莓派(古德...

网友评论

    本文标题:ROS填坑记之树莓派驱动智能卡车

    本文链接:https://www.haomeiwen.com/subject/ogfprctx.html