Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9412542
  • 博文数量: 1748
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20070
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1748)

文章存档

2024年(24)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: 其他平台

2019-01-28 10:54:40

OpenCR 主控MCU使用STM32F746它内嵌ARM Cortex-M7内核,硬件支持浮点运算,适合实现需要高性能的场合


IDE采用 Arduino, 与主控板之间通过串口连接, ROS有专门的串口库, rosserial协议 用来创建server和client.

OpenCR支持TTL/RS485. 支持UART/SPI/I2C/CAN总线, 支持JTAG. 集成九轴IMU(MPU9250,SPI接口), 多路多种电压输出,以及电源热拔插.

开发环境:
    Arduino -> File → Preferences(文件首选项) ->Additional Boards Manager URLs(附加开发板网址)字段 加入 
        

点击(此处)折叠或打开

  1. https://raw.githubusercontent.com/ROBOTIS-GIT/OpenCR/master/arduino/opencr_release/package_opencr_index.json  ##在下载的源码中也有此文件.
然后在 菜单中选择Tools→Board→Boards Manager  中可找到 OpenCR的内容.

安装完毕偶, 菜单中选择 [文件->例程] 中 打开一种 OpenCR或者 turtleBot3的例程
===========================================================
STM32F746内置的引导加载程序的DFU功能, 用于更新引导加载程序 bootloader.  用USB将OpenCR连接到PC的情况下, 按下BOOT0键 和RESET键,则执行内置在STM32F746中的引导加载程序并使MCU进入DFU模式. 进入DFU模式后, 通过lsusb, USB设备列表中要有“STMicroelectronics STM Device in DFU Mode”, 则在auduino菜单 ools→Programmer→DFU_UTIL, 然后选择要下载的程序, 在通过菜单 Tools→Burn Bootloader来更新引导加载程序.

===========================================================
rosserial
    在微控制器MCU中将ROS的消息、话题和服务转换为串行通信方式的功能包

运行ROS的PC是一个rosserial server ,连接到PC的微控制器作为rosserial
client  。由于server和client使用rosserial协议发送和接收数据,因此所有能够发送和
接收数据的硬件都可以使用。因此微控制器中常用的UART也可以用于ROS消息或话题

  •  rosserial server用在PC端, 主要有rosserial_python(功能完整强大), rosserial_server(C++版本,性能有提升,但功能上有一定限制)
  • rosserial client: 源代码已公开,可以轻松移植到其他MCU平台
    • rosserial_arduino        Arduino板
    • rosserial_embeddedlinux  嵌入式Linux上
    • rosserial_windows    Windows操作系统
    • rosserial_mbed        嵌入式开发环境mbed平台
    • rosserial_tivac    TI生产的Launchpad板
rosserial协议是以字节为单位定义的,包含了数据包同步和数据验证所需的信息


校验和规则: 255 - (Message Length Low Byte + Message Length High Byte)%256
话题ID 0到100为用于系统功能而保留. 话题ID可以在rosserial_msgs/TopicInfo 查看

报文类型:
  1.     查询包: 

    点击(此处)折叠或打开

    1. 当rosserial server启动后,向client请求话题名称和话题类型等信息
    2. 查询包的话题ID为0,数据长度为0。
    3. 查询包的内容如下。
    4. 0xff 0xfe 0x00 0x00 0xff 0x00 0x00 0xff

    点击(此处)折叠或打开

    1. client向server发送具有以下内容的消息,之后server会基于该信息发送和接收消息。
    2. uint16 topic_id
    3. string topic_name
    4. string message_type
    5. string md5sum
    6. int32 buffer_size
    在MCU中的限制. 

    点击(此处)折叠或打开

    1. 如果微控制器支持64位实数,则需要修改make_libraries.py中的数据类型转换部分

    2. 要使用String消息,需要如下操作。
    3.     std_msgs::String str_msg;
    4.     unsigned char hello[13] = "hello world!";
    5.     str_msg.data = hello;

    6. 数组: 需确认数组大小.

    7. 通讯速度: 如果使用115200bps的速率,当消息的数量增多时,会拖慢响应和处理速度。但是在OpenCR中,通过使用USB进行虚拟串行通信,可以实现高速通信。
    OK, 下一步搞定 rosserial的移植.
    在  下.   

    support for STM32 MCUs, based on STM32CubeMX HAL

        源码
    官方有提供, 使用方式, 参考readme.md 

    点击(此处)折叠或打开

    1. 1. 默认为STM32F3xx, 如果其他系列, 则修改STM32Hardware.h中对应的 #include 部分为实际系列.

    2. 2. 产生代码
    3.     $ cd target_sw4stm32_workspace  #使用CubeMX建立的MDK的工程根目录. 此工程可以是在WINDOWS上的目录.
    4.     $ rosrun rosserial_stm32 make_libraries.py  .  #在当前目录上建立ROS的补丁.
    5. ##Never forget to change the project type to cpp project in 切记把工程变成C++工程.
    6. ### 把工程中的 duration/time.cpp加入工程, options取消 microLIB的引用.

    7. 3. 范例代码在 src/ros_lib/examples










阅读(3792) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~