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

     我去年从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运行即可。我的小车可以跑起来了!这是人类的一小步,是我的一大步。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容