0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于搭载OpenHarmony避障小车连接华为云心得体会

福州市凌睿智捷电子有限公司 2022-06-14 11:15 次阅读

一、前言

上次给大家展示了基于OpenHarmony的避障小车,我就在想能不能通过云端来控制小车的工作。正好小凌派板载了WIFI功能,小凌派官方例程中又有通过MQTT协议连接华为云的例程。在不断的尝试下,终于完成了通过华为云给小车下发工作命令的避障小车。

二、小车介绍

这是一款基于OpenHarmony系统和RK2206小凌派开发板的避障小车。同时,小车搭载了超声波测距模块、舵机模块、红外寻迹模块、直流电机模块。

323012ae-e734-11ec-a2f4-dac502259ad0.png

图1 小车组装图

32775ce0-e734-11ec-a2f4-dac502259ad0.png          

图2 小凌派开发板

三、华为云配置

在华为云中创建一个新的设备(图3),创建设备的设备密码一定要牢记,后面要用到。32afc51c-e734-11ec-a2f4-dac502259ad0.png

图3 创建完成界面

总体配置如图4所示。

3326de0e-e734-11ec-a2f4-dac502259ad0.png

图4 华为云总体配置

创建了一个“work”属性用来接收小车当前的工作状态(图5)。

337f6a9c-e734-11ec-a2f4-dac502259ad0.jpg

图5 “work”参数

33a716f0-e734-11ec-a2f4-dac502259ad0.png

创建了两个命令“小车工作控制”(图6)和“小车人工控制”(图7)用来控制小车工作。其中,“小车工作控制”中有三个命令,分别是:ON(工作模式)、OFF(停止模式)、CONTROL(手动控制小车模式)。“小车人工控制”中有五个命令,分别是:STOP(停止)、FORWARD(直行)、TURNLEFT(左转)、TURNRIGHT(右转)、BCAKWARD(后退)。

图6 “小车工作控制”参数

33e0a88e-e734-11ec-a2f4-dac502259ad0.png      

图7 “小车人工控制”参数

四、小车配置

1.小车连接华为云

利用华为云iot工具(图8)将填写注册设备时生成的设备ID和设备密钥,生成连接信息(ClientId、Username、Password),并修改代码中对应的CLIENT_ID、USERNAME、PASSWORD。

342aa92a-e734-11ec-a2f4-dac502259ad0.png

图8 华为云iot工具

将代码中的CLIENT_ID、USERNAME和PASSWORD改为生成的ClientId、Username和Password。

#define CLIENT_ID

#define USERNAME

#define PASSWORD

修改/device/rockchip/rk2206/sdk_liteos/board/src/config_network.c代码中的SSID和PASSWORD为使用WIFI的SSID和密匙,用于连接网络,设备通过WIFI访问华为云。

#define SSID

#define PASSWORD

2.小车指令接收配置

344ec738-e734-11ec-a2f4-dac502259ad0.png

从华为云向小车下发工作指令时,可以在设备调试窗口看到华为云发送消息的body信息。“service_id”为设备的服务ID,ID为“智能小车”;“command_name”为设备命令名称,命令为“小车工作控制”;“paras”为设备命令的执行参数,参数为{ “work”:“ON”}(图9)。

图9 华为云发送消息body信息

以下是处理华为云下发命令的部分代码:

obj_cmdname = cJSON_GetObjectItem(obj_root, "command_name");

if (obj_cmdname == NULL)

{

goto EXIT;

}

if (0 == strcmp(cJSON_GetStringValue(obj_cmdname), "小车工作控制"))

{

obj_paras = cJSON_GetObjectItem(obj_root, "paras");

if (obj_paras == NULL)

{

goto EXIT;

}

obj_para = cJSON_GetObjectItem(obj_paras, "work");

if (obj_para == NULL)

{

goto EXIT;

}

if (0 == strcmp(cJSON_GetStringValue(obj_para), "ON"))

{

m_app_status.work = 1;

g_car_status = CAR_TRACE_STATUS;

}

else if (0 == strcmp(cJSON_GetStringValue(obj_para), "OFF"))

{

m_app_status.work = 0;

g_car_status = CAR_STOP_STATUS;

}

else if (0 == strcmp(cJSON_GetStringValue(obj_para), "CONTROL"))

{

m_app_status.work = 2;

g_car_status = CAR_MANUAL_OPERATION_STATUS;

}

cmdret = 0;

}

else if (0 == strcmp(cJSON_GetStringValue(obj_cmdname), "小车人工控制"))

{

obj_paras = cJSON_GetObjectItem(obj_root, "paras");

if (obj_paras == NULL)

{

goto EXIT;

}

obj_para = cJSON_GetObjectItem(obj_paras, "control");

if (obj_para == NULL)

{

goto EXIT;

}

if (0 == strcmp(cJSON_GetStringValue(obj_para), "STOP"))

{

g_car_control = CAR_STOP;

}

else if (0 == strcmp(cJSON_GetStringValue(obj_para), "FORWARD"))

{

g_car_control = CAR_FORWARD;

}

else if (0 == strcmp(cJSON_GetStringValue(obj_para), "TURNLEFT"))

{

g_car_control = CAR_TURNLEFT;

}

else if (0 == strcmp(cJSON_GetStringValue(obj_para), "TURNRIGHT"))

{

g_car_control = CAR_TURNRIGHT;

}

else if (0 == strcmp(cJSON_GetStringValue(obj_para), "BCAKWARD"))

{

g_car_control = CAR_BCAKWARD;

}

cmdret = 0;

}

3.小车数据发送配置

347ae07a-e734-11ec-a2f4-dac502259ad0.png

小车连接上华为云后,每5秒会向华为云的发送当前小车的状态信息。”serviced”为设备的服务ID,ID为”智能小车”;”data”为设备数据,数据为{“work”:0}(图10)。

图10 小车向华为云发送状态信息

以下是小车上传数据到华为云的部分代码:

oc_mqtt_profile_service_t service;

oc_mqtt_profile_kv_t work;


service.event_time = NULL;

service.service_id = "智能小车";

service.service_property = &work;

service.nxt = NULL;


work.key = "Work";

work.value = &report->work;

work.type = EN_OC_MQTT_PROFILE_VALUE_INT;

work.nxt = NULL;


oc_mqtt_profile_propertyreport(USERNAME, &service);

五、效果

给小车上电之后,等待小车连接华为云,可以看到小车向华为云发送消息。从视频中可以看到华为云接收到的消息为data:{“work”:0},说明小车刚上电后并没有工作。



现在通过华为云向小车下发工作命令。从视频中可以看到在小车的前方和左边都有障碍物。启动小车后小车会先直行,通过超声波传感器获取前方的距离,当距离小于20cm时,小车通过超声波传感器测量左右两边的距离,由于右边的距离比左边大,小车会向右转。从视频中可以看到,小车按照我们预想的方向行动,同时我们可以看到华为云接收到的消息为data:{“work”:1},说明小车现在正在工作。



以下是避障的部分代码:

if (distance < DISTANCE_BETWEEN_CAR_AND_OBSTACLE)

{

car_stop();

LOS_Msleep(500);

car_backward();

printf("This is backward\r\n");

LOS_Msleep(500);

car_stop();

unsigned int ret = engine_go_where();

printf("ret is %d\r\n", ret);

if (ret == CAR_TURN_LEFT)

{

car_left();

LOS_Msleep(800);

}

else if (ret == CAR_TURN_RIGHT)

{

car_right();

LOS_Msleep(800);

}

car_stop();

}

通过华为云下发命令,将小车的工作模式转换成控制模式,我们可以看到华为云接收到的消息为data:{“work”:2},说明小车的行动受我们控制。



通过华为云向小车下发直行命令,可以看到小车直行。



通过华为云向小车下发左转命令,可以看到小车左转。



通过华为云向小车下发右转命令,可以看到小车右转。



通过华为云向小车下发后退命令,可以看到小车后退。



六、心得体会

通过本次项目使用搭载OpenHarmony的小凌派RK2206开发板进行开发。小凌派官方教程简介清晰,便于入门。RK2206芯片接口比较丰富,移植适配稳定性较好,整体开发进度比较顺利。让我学习到了如何使用MQTT协议连接华为云去控制小车的工作。通过这一次的应用开发,体验了OpenHarmony和国产芯片开发,是一次不错的学习体验,特此记录!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • OpenHarmony
    +关注

    关注

    25

    文章

    3673

    浏览量

    16164
收藏 人收藏

    评论

    相关推荐

    AG32开发板使用的几点心得体会

    具体介绍这里不细说,可以自己去官网下载资料 这里只说干货。 AG32VF407 AG32VF407这个主控,是我见到的比较有个性的产品之一。 对于这个开发板使用起来,简直不要太爽了。 感谢这个平台让我认识了这家的产品,真的是让我挺喜欢的。 最让我喜欢的功能1:IO可以任意配置 这点在使用PCB布线的时候,非常的方便。 不用担心走线交叉了。 这个还有个好处是,程序可以随时更改配置,而硬件确不需要更改。特别是产品升级了,硬件接口也升级了,通常需要重新投板,这个完全不需要,软件重新配置即可。 最让我喜欢的功能2:FPGA+RISC-V架构 对我的项目而言,再也不需要使用独立FPGA+独立ARM架构了。 这节省了PCB资源,也可以让产品做的更小,而且合在一个SOC中。 还有个好处就是功耗可以降低不少。 当然这个芯片虽然好,但也不是十全十美的,他们家的IDE配置比较复杂,需要有一定技术基础的使用。 例程不多,但是很精,需要慢慢专研。 最后 这家公司比较小众,但是产品很出色,市面上的资料比较少,需要大家自己去查资料,去学习。 整体而言,我还是非常喜欢这颗芯片。 最近他们新出了AG32VH407,这个内部集成了8M的PSRM。 有了这个,可以做LVGL等更高级的应用了。不必在使用外部ram了,也可以节省不少成本。
    发表于 10-31 19:26

    机器人红外

    机器人红外
    发表于 09-19 12:57 0次下载

    机智开源自动化控制篇-式舵机转向系统

    本次采用STM32F103C8T6单片机、ESP-01S模块、红外模块、SG90舵机(360°)以及0.96寸的IIC接口OLED显示屏,基于机智平台,完成了
    的头像 发表于 08-30 12:14 276次阅读
    机智<b class='flag-5'>云</b>开源自动化控制篇-<b class='flag-5'>避</b><b class='flag-5'>障</b>式舵机转向系统

    第13章-循迹功能 STM32智能小车循迹教程 PID循迹算法分析

    第13章-循迹功能 循迹小车讲解 原理分析 STM32智能小车循迹教程 红外对管使用 PID循迹算法分析V3:HAL库开发、功能:PID速度控制、PID循迹、PID跟随、遥控、、P
    的头像 发表于 08-21 16:27 1166次阅读
    第13章-循迹功能 STM32智能<b class='flag-5'>小车</b>循迹教程 PID循迹算法分析

    第七章-V1.5 STM32超声波测距STM32F103C8t6超声波小车 超声波模块 STM32超声波测距

    5STM32超声波测距STM32F103C8t6超声波小车
    的头像 发表于 08-15 16:25 607次阅读
    第七章-V1.5 STM32超声波测距STM32F103C8t6超声波<b class='flag-5'>避</b><b class='flag-5'>障</b><b class='flag-5'>小车</b> 超声波<b class='flag-5'>避</b><b class='flag-5'>障</b>模块 STM32超声波测距

    第六章-V1.5 STM32 ADC读取电压 ADC采样电压 STM32f103c8t6adc采集电压

    STM32智能小车 库函数开发。功能:循迹、、跟随、遥控、电池电压显示等。
    的头像 发表于 08-15 16:23 750次阅读
    第六章-V1.5 STM32 ADC读取电压 ADC采样电压 STM32f103c8t6adc采集电压

    智行者——视听障碍者出行辅助AI小车设计

    设备,配备AI导航小车和家属端App,旨在满足视听障碍者的实时定位和信息交流需求。设备包含导航、语音交互和触摸交互模块,支持定位、路径规划和实时
    的头像 发表于 07-19 08:11 560次阅读
    智行者——视听障碍者出行辅助AI<b class='flag-5'>小车</b>设计

    凯迪正大高压电缆故障查找心得

    和大家分享一下武汉凯迪正大电气的高压电缆故障的心得体会欢迎大家探讨与交流 关键词:高压电缆、故障查找、诊断技术、低压脉冲测试法、直流高压闪络法 在电力系统中,高压电缆的故障查找是一项重要的工作。当
    的头像 发表于 05-22 15:45 369次阅读
    凯迪正大高压电缆故障查找<b class='flag-5'>心得</b>

    雷达的安装位置应该如何选择

    雷达的安装位置选择对于AGV小车(自动导引车)的安全性和效果至关重要。以下是选择
    的头像 发表于 05-20 10:49 400次阅读

    AGV小车使用雷达

    AGV(自动导引车)小车使用雷达是为了确保其在运行过程中的安全性和稳定性。雷达,如激光雷达或超声波雷达,能够实时检测并避免与障碍物发
    的头像 发表于 05-20 10:48 582次阅读

    印度理工学院研发低功耗二维晶体管,借鉴蝗虫神经元实现功能

    长期以来,自动驾驶及机器人自主行动成为众多科研团队的追求。而是这一技术实际应用的关键所在。为此,两所学校的研究者们致力于寻找一种低能耗的解决方案。
    的头像 发表于 04-23 14:26 397次阅读

    谈谈大家学习FPGA的经历

    谈谈大家学习FPGA,一路以来的经历感受,有啥心得体会都可以畅聊分享
    发表于 03-31 12:55

    视觉、激光、结构光?扫地机器人导航技术盘点

    越来越多的家庭都配备扫地机器人,既能解放双手又能保持家庭清洁。而扫地机器人也不断智能化迭代,撞墙、卡住、跌落等故障随着导航技术的迭代顺利解决。行业共识认为,导航、能力是衡量扫地
    的头像 发表于 02-01 16:01 1234次阅读

    基于瑞萨RA2E1 MCU芯片的蓝牙平衡小车设计

    本项目由瑞萨RA2E1 MCU芯片作为主控,搭载电源模块、MPU6050模块、超声波模块、OLED模块、蓝牙模块、电机模块等组成的蓝牙平衡小车。该小车有平衡模式、跟随模式和
    的头像 发表于 01-08 12:17 1754次阅读
    基于瑞萨RA2E1 MCU芯片的蓝牙平衡<b class='flag-5'>小车</b>设计

    有哪些可以用于感应的红外发射接收管?

    有哪些可以用于感应的红外发射接收管? 感应是一种常见的应用于机器人、自动驾驶、安防等领域的技术,其核心是利用红外发射接收管感知前方的障碍物。红外发射接收管是一种电子元件,常用于
    的头像 发表于 12-25 14:30 508次阅读