当前位置: 首页 > news >正文

哈尔滨企业网站中天建设有限公司官方网站

哈尔滨企业网站,中天建设有限公司官方网站,h5开发app,技术支持 合肥网站建设1 XR806简介 板子来源于极术社区的试用#xff0c;XR806的在线网址 其主要参数#xff1a; 主控XR806AF2LDDRSIP 288KB SRAM存储SIP 160KB Code ROM. SIP 16Mbit Flash.天线板载WiFi/BT双天线#xff0c;可共存按键reboot按键 1#xff0c;功能按键 1灯红色电源指示灯 1…1 XR806简介 板子来源于极术社区的试用XR806的在线网址 其主要参数 主控XR806AF2LDDRSIP 288KB SRAM存储SIP 160KB Code ROM. SIP 16Mbit Flash.天线板载WiFi/BT双天线可共存按键reboot按键 1功能按键 1灯红色电源指示灯 1蓝色可调节LED 1供电Type-C 5V引脚插针引脚 *9调试方式Type-C已板载串口转USB芯片晶振外接40MHz晶振 2 rosserial简介 官网 rosserial是用于非ROS设备与ROS设备进行通信的一种协议。它为非ROS设备的应用程序提供了ROS节点和服务的发布/订阅功能使在非ROS环境中运行的应用能够通过串口或网络能够轻松地与ROS应用进行数据交互。 rosserial分为客户端和服务器两部分。rosserial客户端运行在运行在没有安装ROS的环境的应用中通过串口或网络与运行在ROS环境中的rosserial服务器连接并通过服务器节点在ROS中发布/订阅话题。 3 移植目标 通过rosserial使XR806能通过串口和TCP两种方式和ROS进行通信。 4 移植前准备 4.1 源码获取 [官方源码]( https://github.com/ros-drivers/rosserial.git 该仓库中的代码需要编译才能获取源码为了直接获取源码使用以下仓库的源码做为基础。 使用源码 该代码时属于RT-thread软件包有较高的可信度。 clone下来的代码放在/ohosdemo/rosserial中文件结构 tree -L 1 tree -L 1. ├── BUILD.gn ├── inc ├── port └── src BUILD.gn 配置文件inc rosserial源文件port移植文件为了和XR806适配的代码放在该文件下 4.2 XR806 C支持 rosserial为C代码需要XR806支持C编译。 修改/device/xradio/xr806/liteos_m/config.gni文件添加以下内容 board_cxx_flags []board_cxx_flags SDK_cflags board_cxx_flags [-includelog/log.h,-DVIRTUAL_HCI,-DCONFIG_ARM,#-DNULL((void*)0),#-stdc17,-lstdc,-fno-rtti,-fno-exceptions]大部分和board_cflags的配置一样添加的编译项 -lstdc,-fno-rtti,-fno-exception是为了解决以下错误 undefined reference to vtable for __cxxabiv1::__si_class_type_info该错误的原因是C在链接时会有相关库链接不上 2. 在/ohosdemo/rosserial/BUILD.gn中添加以下代码 cflags_cc board_cxx_flags表示支持c编译 5 ROSserial移植核心 根据官网的移植介绍只需要填写完以下模板即可 class Hardware {Hardware();// any initialization code necessary to use the serial portvoid init(); // read a byte from the serial port. -1 failureint read()// write data to the connection to ROSvoid write(uint8_t* data, int length);// returns milliseconds since start of programunsigned long time();};init()提供初始化函数初始化串口或者TCP网络read():读取一个字节write(uint8_t* data, int length):写字符time()提供时间基准 6 串口通信 和串口相关的代码放在rosserial/port/UartHaedware.h 关键代码 6.1 串口初始化init()函数 void init(){// HAL_Status status HAL_ERROR;UART_InitParam param;param.baudRate this-baudRate;param.dataBits UART_DATA_BITS_8;param.stopBits UART_STOP_BITS_1;param.parity UART_PARITY_NONE;param.isAutoHwFlowCtrl 0;HAL_UART_Init(UARTID, param);}6.2 串口读取一个字节read()函数 int read(){uint8_t rx_data;int32_t len0;len HAL_UART_Receive_IT(UARTID,rx_data,1,1000);if(len0){return rx_data;}else return -1;} 6.3 串口写字节write(uint8_t* data, int length) // write data to the connection to ROSvoid write(uint8_t* data, int length){HAL_UART_Transmit_IT(UARTID, data, length);}6.4 时间基准time()函数 // returns milliseconds since start of programunsigned long time(){unsigned long temp (unsigned long)OS_GetTime() * 1000;return temp;}6.5 代码风格统一 为了保持ROS代码的编写风格一致添加rosserial/port/ros.h 关键代码 #define ROS_USE_TCP 0 #define ROS_USE_UART 1namespace ros {#if ROS_USE_TCP 1typedef NodeHandle_TCPHardware NodeHandle;#endif#if ROS_USE_UART 1typedef NodeHandle_Hardware NodeHandle;#endif } #endif可以通过宏定义选择使用串口还是TCP 7 TCP通信 7.1 wifi连接 wifi连接使用官方在ohosdemo/wlan_demo中的代码。具体使用void wifi_device_event_test()函数和wifi连接成功后的回调函数:void Connected_deal(int state, WifiLinkedInfo *info)。 大致思路是在wifi连接线程中增加一个信号量初始化信号量为0rosserial线程会一直等待信号量有效后才会触发rosserial的相关函数利用信号量作为两个线程间的同步保证wifi顺利连接成功后才会进行rosserial的TCP通信。另外每次wifi重新连接后都会保证XR806会自动连接ROS。 信号量的三个关键函数 OS_Status OS_SemaphoreCreate(OS_Semaphore_t *sem, uint32_t initCount, uint32_t maxCount)初始化信号量定义计数的初始值和最大值 OS_Status OS_SemaphoreWait(OS_Semaphore_t *sem, OS_Time_t waitMS) 等待信号量有效及信号量的计数不为0等待时间可以使无限长该参数为OS_WAIT_FOREVER OS_Status OS_SemaphoreRelease(OS_Semaphore_t *sem)释放信号量信号量计数加1 主要代码 #define WIFI_DEVICE_CONNECT_AP_SSID myyy #define WIFI_DEVICE_CONNECT_AP_PSK 123456789WifiEvent sta_event;void Connected_deal(int state, WifiLinkedInfo *info) {if (state WIFI_STATE_AVALIABLE) {//释放信号量计数加1OS_SemaphoreRelease(ros_sem);// OS_Sleep(5);printf(\r\n Callback: connected\r\n);} else if (state WIFI_STATE_NOT_AVALIABLE) {printf( Callback: disconnected\n);} }void wifi_device_event_test() {const char ssid_want_connect[] WIFI_DEVICE_CONNECT_AP_SSID;const char psk[] WIFI_DEVICE_CONNECT_AP_PSK;//创建信号量初始值为0最大值为2if(OS_SemaphoreCreate(ros_sem, 0, 2) ! OS_OK){printf(\r\n sem creat fail!\r\n);return ;}sta_event.OnWifiConnectionChanged Connected_deal;if (WIFI_SUCCESS ! RegisterWifiEvent(sta_event)) {printf(Error: RegisterWifiEvent fail\n);return;}printf(\n Connect Test Start \n);if (WIFI_SUCCESS ! EnableWifi()) {printf(Error: EnableWifi fail.\n);return;}printf(EnableWifi Success.\n);if (WIFI_STA_ACTIVE IsWifiActive())printf(Wifi is active.\n);OS_Sleep(1);/*.........................................................省略的代码 参见官方demo*/if (WIFI_SUCCESS ! GetDeviceMacAddress(get_mac_res)) {printf(Error: GetDeviceMacAddress Fail\n);return;}printf(GetDeviceMacAddress Success.\n);for (int j 0; j WIFI_MAC_LEN - 1; j) {printf(%02X:, get_mac_res[j]);}printf(%02X\n, get_mac_res[WIFI_MAC_LEN - 1]);}7.2 TCP客户端初始化 为了不和串口的Hardware类重名类名为TCPHardware void init(){sock_fd socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);// address info!struct sockaddr_in server_addr;memset(server_addr, 0, sizeof(server_addr));server_addr.sin_family AF_INET;server_addr.sin_port htons(serverPort_);inet_pton(AF_INET, server_, server_addr.sin_addr);// connect!if (connect(sock_fd, (sockaddr *)server_addr, sizeof(server_addr)) 0){printf(connect tcp_server failed! \r\n);return;}printf(connect tcp_server successfuly! \r\n);}7.3 TCP读取字节 int read(){char ch[2];int bytes_received recv(sock_fd, ch, 1, 0);if (bytes_received 0){return ch[0];}else{return -1;}} 7.4 TCP写字节 void write(const uint8_t *data, int length){send(sock_fd, data, length, 0);}时间基准和6.4一样 8 测试 8.1 XR806 端 文件目录 . ├── BUILD.gn ├── led_demo │ ├── BUILD.gn │ └── src ├── rosserial │ ├── BUILD.gn │ ├── inc │ ├── port │ └── src └── wlan_demo├── BUILD.gn├── main.c├── test_case.c└── test_case.h 其中 led_demo:led灯指示作用rosserial:rosserialb包wlan_demo:负载wifi连接 8.1.1 配置文件BUILD.gn # 必须config中定义了头文件路径和关键宏定义 import(//device/xradio/xr806/liteos_m/config.gni)# 必须所有应用工程必须是app_打头 static_library(app_rosserial) {configs []sources [src/ros_helloworld.cpp,inc/duration.cpp,inc/time.cpp,]#必须board_cflags是在config.gni中定义的关键宏定义cflags board_cflags# ccflags_cc board_cxx_flags#必须board_include_dirs是在config.gni中定义的文件路径include_dirs board_include_dirs# 根据实际情况添加头文件路径include_dirs [//kernel/liteos_m/kernel/arch/include,./../wlan_demo/,inc,port ,//base/iot_hardware/peripheral/interfaces/kits,//foundation/communication/wifi_lite/interfaces/wifiservice,] }8.1.2 测试程序 编写一个发布话题XR806_to_ROS 发布的内容为“hello world!”时间间隔为1s 编写一个接收话题ROS_to_XR860 接收的内容通过串口显示出来 #include ros.h #include std_msgs/String.h#include stdio.h #include ohos_init.h #include stdlib.h//信号量的声明 extern OS_Semaphore_t ros_sem;static OS_Thread_t g_main_thread;static ros::NodeHandle nh; static std_msgs::String str_msg; static ros::Publisher chatter(XR806_to_ROS, str_msg); static char hello_msg[25] hello world!;// 回调函数 static void message_callback(const std_msgs::String msgs) {printf(\r\nresive:%s\r\n, msgs.data);}static ros::Subscriberstd_msgs::String sub(ROS_to_XR860, message_callback);static void ROSThread(void *arg) { //等待信号量有效if (OS_SemaphoreWait(ros_sem, OS_WAIT_FOREVER) OS_OK){printf(\r\n--------- star ROS----------------\r\n);nh.initNode();nh.advertise(chatter);nh.subscribe(sub);while (1){if (nh.connected()){str_msg.data hello_msg;chatter.publish(str_msg); }nh.spinOnce();OS_MSleep(1000);} } } void ROSMain(void) {printf(\r\nROSserial Start\r\n);if (OS_ThreadCreate(g_main_thread, ROSThread, ROSThread, NULL,OS_THREAD_PRIO_APP, 4 * 1024) ! OS_OK) {printf([ERR] Create MainThread Failed\n);} }SYS_RUN(ROSMain);8.1.3 编译程序 hb build -f可能会遇到下面问题 这个flash分配的分配有问题 cd 到 device/xradio/xr806/xr_skylark/project/demo/audio_demo/image/xr806 用文件image_auto_cal.cfg中的内容覆盖image_wlan_ble.cfg中的内容。 8.2 PC ROS端 Ubuntu版本20版18版也可以使用 8.2.1 创建ros空间 mkdir -p rosworkspace/src cd rosworkspace catkin_make8.2.2 编写发布节点 import rospy from std_msgs.msg import Stringif __name__ __main__:#2.初始化 ROS 节点:命名(唯一)rospy.init_node(talker_p)#3.实例化 发布者 对象pub rospy.Publisher(ROS_to_XR860,String,queue_size10)#4.组织被发布的数据并编写逻辑发布数据msg String() #创建 msg 对象msg_front hello XR806 count 0 #计数器 # 设置循环频率rate rospy.Rate(1)while not rospy.is_shutdown():#拼接字符串msg.data msg_front str(count)pub.publish(msg)rate.sleep()#rospy.loginfo(写出的数据:%s,msg.data)count 1修改CMakeLists.txt catkin_install_python(PROGRAMSscripts/test_pub.pyDESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )8.2.3 启动节点 启动主节点 roscore起动test_pub节点 source ./devel/setup.bashrosrun ros_test test_pub.py 启用serial_node节点 串口 rosrun rosserial_python serial_node.py _port:/dev/ttyUSB0 _baud:115200如果串口连接成功终端显示 INFO] [1640087588.757505]: ROS Serial Python Node [INFO] [1640087588.762633]: Connecting to /dev/ttyUSB0 at 115200 baud [INFO] [1640087591.079099]: Requesting topics... [INFO] [1640087591.131236]: Note: publish buffer size is 512 bytes [INFO] [1640087591.134777]: Setup publisher on XR806_to_ROS [std_msgs/String] [INFO] [1640087591.142147]: Note: subscribe buffer size is 512 bytes [INFO] [1640087591.144610]: Setup subscriber on ROS_to_XR860 [std_msgs/String] 注意查看串口的权限如果权限不足先开启权限 # 查看权限 ll /dev/ttyUSB* #开启权限 sudo chmod 777 /dev/ttyUSB*TCP 默认节点11411 rosrun rosserial_python serial_node.py tcp如果TCP连接成功终端显示 [INFO] [1640232707.758952]: ROS Serial Python Node [INFO] [1640232707.763597]: Fork_server is: False [INFO] [1640232707.764688]: Waiting for socket connections on port 11411 [INFO] [1640232707.765650]: Waiting for socket connection [INFO] [1640232724.857086]: Established a socket connection from 192.168.43.49 on port 60872 [INFO] [1640232724.859268]: calling startSerialClient [INFO] [1640232726.966374]: Requesting topics... [INFO] [1640232727.289246]: Note: publish buffer size is 512 bytes [INFO] [1640232727.290573]: Setup publisher on XR806_to_ROS [std_msgs/String] [INFO] [1640232727.295084]: Note: subscribe buffer size is 512 bytes [INFO] [1640232727.296294]: Setup subscriber on ROS_to_XR860 [std_msgs/String]8.3 结果查询 ROS上查看话题 rostopic list /ROS_to_XR860 /XR806_to_ROS /diagnostics /rosout /rosout_agg可见 /ROS_to_XR860和/XR806_to_ROS两个话题 查看/XR806_to_ROS rostopic echo /ROS_to_XR860data: hello world! --- data: hello world! --- data: hello world! --- data: hello world! --- data: hello world! ---查看XR806接收的 /ROS_to_XR860话题消息 串口连接 -------- star ROS---------------- resive:hello XR806 1 resive:hello XR806 2 resive:hello XR806 3 resive:hello XR806 4 resive:hello XR806 5 resive:hello XR806 6 resive:hello XR806 7 resive:hello XR806 8 resive:hello XR806 9 resive:hello XR806 10 resive:hello XR806 11 resive:hello XR806 12TCP连接 --------- star ROS---------------- connect tcp_server successfuly! resive:hello XR806 1 resive:hello XR806 2 resive:hello XR806 3 resive:hello XR806 4 resive:hello XR806 5 resive:hello XR806 6 resive:hello XR806 7 resive:hello XR806 8
文章转载自:
http://www.morning.jwefry.cn.gov.cn.jwefry.cn
http://www.morning.qcfgd.cn.gov.cn.qcfgd.cn
http://www.morning.tgtrk.cn.gov.cn.tgtrk.cn
http://www.morning.qbkw.cn.gov.cn.qbkw.cn
http://www.morning.qlpq.cn.gov.cn.qlpq.cn
http://www.morning.c7491.cn.gov.cn.c7491.cn
http://www.morning.wwthz.cn.gov.cn.wwthz.cn
http://www.morning.tqxtx.cn.gov.cn.tqxtx.cn
http://www.morning.wzknt.cn.gov.cn.wzknt.cn
http://www.morning.ymwcs.cn.gov.cn.ymwcs.cn
http://www.morning.slwfy.cn.gov.cn.slwfy.cn
http://www.morning.wpqcj.cn.gov.cn.wpqcj.cn
http://www.morning.grfhd.cn.gov.cn.grfhd.cn
http://www.morning.nkcfh.cn.gov.cn.nkcfh.cn
http://www.morning.ndtzy.cn.gov.cn.ndtzy.cn
http://www.morning.clndl.cn.gov.cn.clndl.cn
http://www.morning.fllfc.cn.gov.cn.fllfc.cn
http://www.morning.zczkm.cn.gov.cn.zczkm.cn
http://www.morning.ahlart.com.gov.cn.ahlart.com
http://www.morning.fwblh.cn.gov.cn.fwblh.cn
http://www.morning.bwgrd.cn.gov.cn.bwgrd.cn
http://www.morning.nqyzg.cn.gov.cn.nqyzg.cn
http://www.morning.jcbmm.cn.gov.cn.jcbmm.cn
http://www.morning.zjrnq.cn.gov.cn.zjrnq.cn
http://www.morning.kpzrf.cn.gov.cn.kpzrf.cn
http://www.morning.mdgb.cn.gov.cn.mdgb.cn
http://www.morning.zkrzb.cn.gov.cn.zkrzb.cn
http://www.morning.yuanshenglan.com.gov.cn.yuanshenglan.com
http://www.morning.xywfz.cn.gov.cn.xywfz.cn
http://www.morning.qbtj.cn.gov.cn.qbtj.cn
http://www.morning.swkpq.cn.gov.cn.swkpq.cn
http://www.morning.jqrhz.cn.gov.cn.jqrhz.cn
http://www.morning.5-73.com.gov.cn.5-73.com
http://www.morning.fthcn.cn.gov.cn.fthcn.cn
http://www.morning.djpps.cn.gov.cn.djpps.cn
http://www.morning.ppgdp.cn.gov.cn.ppgdp.cn
http://www.morning.ygztf.cn.gov.cn.ygztf.cn
http://www.morning.c7500.cn.gov.cn.c7500.cn
http://www.morning.yfrbn.cn.gov.cn.yfrbn.cn
http://www.morning.wtdyq.cn.gov.cn.wtdyq.cn
http://www.morning.xptkl.cn.gov.cn.xptkl.cn
http://www.morning.zyytn.cn.gov.cn.zyytn.cn
http://www.morning.dswtz.cn.gov.cn.dswtz.cn
http://www.morning.xlxmy.cn.gov.cn.xlxmy.cn
http://www.morning.nlqgb.cn.gov.cn.nlqgb.cn
http://www.morning.tjmfz.cn.gov.cn.tjmfz.cn
http://www.morning.mtzyr.cn.gov.cn.mtzyr.cn
http://www.morning.yrhsg.cn.gov.cn.yrhsg.cn
http://www.morning.rmrcc.cn.gov.cn.rmrcc.cn
http://www.morning.mpmtz.cn.gov.cn.mpmtz.cn
http://www.morning.nyqnk.cn.gov.cn.nyqnk.cn
http://www.morning.smmby.cn.gov.cn.smmby.cn
http://www.morning.mqpdl.cn.gov.cn.mqpdl.cn
http://www.morning.gxwyr.cn.gov.cn.gxwyr.cn
http://www.morning.yrck.cn.gov.cn.yrck.cn
http://www.morning.msfqt.cn.gov.cn.msfqt.cn
http://www.morning.jwmws.cn.gov.cn.jwmws.cn
http://www.morning.zsthg.cn.gov.cn.zsthg.cn
http://www.morning.ypdhl.cn.gov.cn.ypdhl.cn
http://www.morning.pwfwk.cn.gov.cn.pwfwk.cn
http://www.morning.ynwdk.cn.gov.cn.ynwdk.cn
http://www.morning.gmjkn.cn.gov.cn.gmjkn.cn
http://www.morning.xrrjb.cn.gov.cn.xrrjb.cn
http://www.morning.fjgwg.cn.gov.cn.fjgwg.cn
http://www.morning.rnmyw.cn.gov.cn.rnmyw.cn
http://www.morning.lrwsk.cn.gov.cn.lrwsk.cn
http://www.morning.pamdeer.com.gov.cn.pamdeer.com
http://www.morning.ssjtr.cn.gov.cn.ssjtr.cn
http://www.morning.lqznq.cn.gov.cn.lqznq.cn
http://www.morning.pfggj.cn.gov.cn.pfggj.cn
http://www.morning.gbrdx.cn.gov.cn.gbrdx.cn
http://www.morning.qmnhw.cn.gov.cn.qmnhw.cn
http://www.morning.bbmx.cn.gov.cn.bbmx.cn
http://www.morning.qrmyd.cn.gov.cn.qrmyd.cn
http://www.morning.zlmbc.cn.gov.cn.zlmbc.cn
http://www.morning.blqgc.cn.gov.cn.blqgc.cn
http://www.morning.xqzrg.cn.gov.cn.xqzrg.cn
http://www.morning.nnhfz.cn.gov.cn.nnhfz.cn
http://www.morning.lznfl.cn.gov.cn.lznfl.cn
http://www.morning.lcxzg.cn.gov.cn.lcxzg.cn
http://www.tj-hxxt.cn/news/243703.html

相关文章:

  • 上海网站建设免网络工程师工作好找吗
  • 做ppt一般在什么网站好赣州新闻联播今天回放
  • 有哪些网站做明星周边做家装网站源码
  • 丰台网站建设多少钱城市建设局网站
  • 手机管理网站模板价格低廉的意思
  • 唐山做网站多少钱wordpress淘宝客插件开发
  • 网站管理是什么余姚建设网站的公司
  • 培训网站建设方案说明书阜宁做网站的价格
  • 建设工程类网站贺州网站建设公司
  • 外网常用网站生产管理网站开发
  • 福州网站建设方案网站排名突然掉没了
  • 才艺多网站建设网站域名需要续费吗
  • 自己做视频网站上传视频别墅庭院园林景观设计公司
  • 网站开发 360百科个人ip打造范文
  • 做网站用的字体是什么网页视频怎么下载ios
  • wordpress调整logo大小wordpress4.7.3优化
  • 网站推广员网站建设上机课
  • 哪做网站最好做暧小视频xo网站
  • 做外国人的生意哪家网站好网站的源码
  • 五屏网站建设哪家好网站类型分类
  • 哪个网站可以做excel精品资料网 资料库
  • 智能魔方网站seo优化运营
  • 外贸网站建设科技公司在网站做广告怎么做分录
  • 怀柔做网站的吗网站如何做关键词seo优化
  • 自己做网站需要学什么东西免费制作网站的步骤 怎样做网站
  • 食品 技术支持 东莞网站建设所有做运动的网站
  • 关于网站集约化建设的意见企业网站建设好处
  • 泉州安溪县住房和城乡建设网站建设网站导航
  • 解除网站开发合同 首付款是否退抖音代运营工作内容
  • 设计网站如何推广wordpress韩影网主题