二 树莓派3+ROS-kinetic+mbed-二轮差分模型

ROS教程

这是小弟的学习笔记,有错求请拍,多指教,谢谢

二 树莓派3+ROS-kinetic+mbed/开环二轮差分模型

二轮差分模型介绍

1.二轮差分模型

二轮差分运动模型是目前最为简单方便的机器人运动底盘设计,依靠两个动力轮的电机输出不同达到直线行走和左右转动的目的,左右电机的转向不同即可完成转动,常见于寻迹小车,扫地机器人,送餐机器人等,底盘较为灵活,编程,机械设计都很简单,但缺点是转弯时不能走出顺滑的弧线

2.H桥电机驱动

H桥通常是由4个三极管做成的直流电机控制电路,电路原理图十分像字母H。4根三极管分为左上,左下,右上,右下,对角的一对三极管控制电机的一个运动方向,一侧导通后电机顺时针转,另一侧导通则逆时针转

H-bridge/wiki
H-bridge/baidu

rosserial_mbed介绍

通常来说,ROS机器人操作系统是在树莓派,miniPC,或者是笔记本电脑等运行以linux为基础的系统的设备上运行的,这类型的设备通常没有GPIO或PWM输出引脚,或者IO功能很弱,比如树莓派,它有GPIO引脚,但需要用python语言去控制或者引入wiringC++库,引脚数目也很少。所以在设计这个移动底盘的时候选择了mbed单片机和树莓派3的组合,mbed单片机负责底层的电机驱动,传感器数据读取任务,树莓派上则运行ROS系统,负责传感器数据的处理及发送控制指令。这就涉及了一个问题,ROS和mbed如何通信呢?
答案是,使用rosserial_mbed库,这个新的接口是在jade和kinetic这两个15年之后才推出的新版本上发布的,旧版本的indigo是没有的。rosserial_mbed库强大的功能在于,我们可以把单片机当作一个节点来看,在上边编写发布者和订阅者,与ROS通过USB串口来通信,不需要使用单片机Tx/Rx引脚,而且USB驱动也无需更改,直接使用mbed的程序烧录数据线,不需要用USB转TTL线
rosserial_mbed/wiki

还有与arduino的库
rosserial_arduino/wiki

连接mbed与ROS

1.mbed上的发布者和订阅者

1)mbed的发布者代码

#include <mbed.h>//mbed程序必须的头文件
#include <ros.h>
#include <std_msgs/String.h>//所涉及的消息类型的头文件

ros::NodeHandle  nh;//实例化ROS,给ROS分配一个句柄

std_msgs::String str_msg;
ros::Publisher chatter("chatter", &str_msg);

char hello[13] = "hello world!";

DigitalOut led = LED1;

int main() {
    nh.initNode();
    nh.advertise(chatter);

    while (1) {
        led = !led;
        str_msg.data = hello;
        chatter.publish( &str_msg );
        nh.spinOnce();
        wait_ms(1000);
    }
}

从这段ROSwiki给出的例程可以看出,在mbed上用到的语法与在电脑编写发布者节点的语法是一致的,整体框架也一样,所以在mbed上写ROS代码的时候,当作是往ROS框架内添加mbed的代码

2)mbed的订阅者代码

#include <mbed.h>
#include <ros.h>
#include <std_msgs/Empty.h>

ros::NodeHandle nh;
DigitalOut myled(LED1);

void messageCb(const std_msgs::Empty& toggle_msg){
    myled = !myled;   // blink the led
}

ros::Subscriber<std_msgs::Empty> sub("toggle_led", &messageCb);

int main() {
    nh.initNode();
    nh.subscribe(sub);

    while (1) {
        nh.spinOnce();
        wait_ms(1);
    }
}

订阅者的语法规则以及函数格式也和在电脑上编写节点是一致的

rosserial-mbed/Tutorials

2.DC-motor库

1)mbed

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
    随着ICT技术不断深化和传统场景的结合,自动化、智能化相融合已经成为ICT技术的下一代浪潮,以工业机器人、服务机器人、自动驾驶等的新一代技术浪潮目前已经方兴未艾,成为又一波热点。而作为次级操作系统的ROS则提供了一系列的调试、仿真工具,能支持激光导航、视觉导航等算法,是切入机器人和自动驾驶技术的重要基础。    机器人是一个复合型的领域,涉及软件、算法、硬件、结构等诸多方向,是一个理论性和实践性并重的学科,考虑到其复杂性和讲解的循序渐进,整个系列课程将分为三个系列即入门系列、中级系列、高级系列。   在入门系列中,我们将介绍ROS的基础知识(机器人基础知识、ROS开发环境等)、ROS配置管理(系统架构、参数管理、Launch启动、编译配置以及如何基于源代码开发等)、ROS系统调试(代码调试、可视化调试、消息回放、单元测试等),获得该领域的入门券。   在中级系列中,我们将围绕机器人建模与仿真涉及的URDF机器人模型、Gazebo仿真环境、坐标变换、运动控制、环境感知等展开介绍,熟练掌握利用RVIZ、Gazebo等仿真和调试工具调试机器人程序与算法。   在高级系列中,我们将着眼于人工智能框架及算法,分享机器人开发涉及的运动控制、SLAM、语音交互、计算机视觉等。逐层递进,为大家一层层剥开机器人的神秘面纱。    本系列课程的特色在于:    1、从基础知识、建模与仿真、环境感知与智能决策、人机交互等4个方面循序渐进、逐步深化,知识覆盖全面,便于深度认知;    2、从基本理论、源码解读、工程示例等领域开展ROS系统入门知识的深度介绍和分析,源于工程实践,利于快速上手;   3、基于全新的环境Ubuntu 20.04、ROS Noetic、Gazebo 11、GMapping、Cartographer、tensorFlow 2.*、OpenCV 4.*等讲解,紧跟时代前沿。   整个系列的课程将会逐步开发并上线,三个系列是一个逐步深入、环环相扣的课程内容,感兴趣的同学可以开始学习啦。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值