<microros> 如何生成一个microros库

2024-06-08 00:04
文章标签 生成 microros

本文主要是介绍<microros> 如何生成一个microros库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如何生成一个microros库

step1 在linux上安装ROS2

install ROS 2 Humble Hawksbill on your Ubuntu (如果ubuntu版本不对,安装foxy或者galactic)

Ubuntu (Debian packages) — ROS 2 Documentation: Humble documentation

step2 下载microros 代码

R O S D I S T R O 为 R O S 2 版本,如果安装的是 ∗ ∗ H u m b l e ,就在下面第一步用 H u m b l e 代替 ∗ ∗ ROS_DISTRO 为ROS2版本,如果安装的是**Humble ,就在下面第一步用Humble 代替** ROSDISTROROS2版本,如果安装的是Humble,就在下面第一步用Humble代替ROS_DISTRO,其他不变

# Source the ROS 2 installationsource /opt/ros/$ROS_DISTRO/setup.bash# Create a workspace and download the micro-ROS toolsmkdir microros_ws
cd microros_ws
git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup# Update dependencies using rosdepsudo apt update&& rosdep update
rosdep install --from-paths src --ignore-src -y# Install pipsudo apt-get install python3-pip# Build micro-ROS tools and source them
colcon build
source install/local_setup.bash

step3 Creating a new firmware workspace

我们要生成一个通用库,所以是create generate_lib firmware

ros2 run micro_ros_setup create_firmware_ws.sh generate_lib

此步是给generate_lib下载需要的source code

step4 将source编译成library

  1. create Cmake toolchain
touch my_custom_toolchain.cmake
touch my_custom_colcon.meta
  1. demo cmake and meta

CMAKE

set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_CROSSCOMPILING 1)
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)*# SET HERE THE PATH TO YOUR C99 AND C++ COMPILERS*
set(CMAKE_C_COMPILER gcc)
set(CMAKE_CXX_COMPILER g++)set(CMAKE_C_COMPILER_WORKS 1 CACHE INTERNAL "")
set(CMAKE_CXX_COMPILER_WORKS 1 CACHE INTERNAL "")*# SET HERE YOUR BUILDING FLAGS*set(FLAGS "-O2 -ffunction-sections -fdata-sections -fno-exceptions -mcpu=cortex-m3 -nostdlib -mthumb --param max-inline-insns-single=500 -DF_CPU=84000000L -D'RCUTILS_LOG_MIN_SEVERITY=RCUTILS_LOG_MIN_SEVERITY_NONE'" CACHE STRING "" FORCE)set(CMAKE_C_FLAGS_INIT "-std=c11 ${FLAGS} -DCLOCK_MONOTONIC=0 -D'__attribute__(x)='" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_INIT "-std=c++11 ${FLAGS} -fno-rtti -DCLOCK_MONOTONIC=0 -D'__attribute__(x)='" CACHE STRING "" FORCE)set(__BIG_ENDIAN__ 0)
  • Cmake 配置硬件编译参数

    CMAKE_C_COMPILER 和CMAKE_CXX_COMPILER 配置交叉编译器 PATH/gxxx

    CMAKE_C_FLAGS_INIT /CMAKE_CXX_FLAGS_INIT 用来配置编译环境变量

    特别要注意一点,编译库的时候尽量使用-nostdlib,让编译器在link阶段去找stdlib。

META

{"names": {"tracetools": {"cmake-args": ["-DTRACETOOLS_DISABLED=ON","-DTRACETOOLS_STATUS_CHECKING_TOOL=OFF"]},"rosidl_typesupport": {"cmake-args": ["-DROSIDL_TYPESUPPORT_SINGLE_TYPESUPPORT=ON"]},"rcl": {"cmake-args": ["-DBUILD_TESTING=OFF","-DRCL_COMMAND_LINE_ENABLED=OFF","-DRCL_LOGGING_ENABLED=OFF"]}, "rcutils": {"cmake-args": ["-DENABLE_TESTING=OFF","-DRCUTILS_NO_FILESYSTEM=ON","-DRCUTILS_NO_THREAD_SUPPORT=ON","-DRCUTILS_NO_64_ATOMIC=ON","-DRCUTILS_AVOID_DYNAMIC_ALLOCATION=ON"]},"microxrcedds_client": {"cmake-args": ["-DUCLIENT_PIC=OFF","-DUCLIENT_PROFILE_UDP=OFF","-DUCLIENT_PROFILE_TCP=OFF","-DUCLIENT_PROFILE_DISCOVERY=OFF","-DUCLIENT_PROFILE_SERIAL=OFF","-UCLIENT_PROFILE_STREAM_FRAMING=ON","-DUCLIENT_PROFILE_CUSTOM_TRANSPORT=ON"]},"rmw_microxrcedds": {"cmake-args": ["-DRMW_UXRCE_MAX_NODES=1","-DRMW_UXRCE_MAX_PUBLISHERS=5","-DRMW_UXRCE_MAX_SUBSCRIPTIONS=5","-DRMW_UXRCE_MAX_SERVICES=1","-DRMW_UXRCE_MAX_CLIENTS=1","-DRMW_UXRCE_MAX_HISTORY=4","-DRMW_UXRCE_TRANSPORT=custom"]}}
}
  • Meta对microros 源代码的配置

    这个文件主要使用编译源代码中的宏定义

    如:

              "-DRMW_UXRCE_MAX_NODES=1",   # 定义了控制器最大创建的节点数"-DRMW_UXRCE_MAX_PUBLISHERS=5",  # 定义了控制器最大创建的发布数"-DRMW_UXRCE_MAX_SUBSCRIPTIONS=5",  # 定义了控制器最大创建的订阅数"-DRMW_UXRCE_MAX_SERVICES=1",  # 定义了控制器最大创建的服务数"-DRMW_UXRCE_MAX_CLIENTS=1",  # 定义了控制器最大创建的客户端数
    
  1. Building the custom library
ros2 run micro_ros_setup build_firmware.sh $(pwd)/my_custom_toolchain.cmake $(pwd)/my_custom_colcon.meta

我们能在文件夹firmware/build/中找到libmicroros.a 和include
只要将这些集成到工程就可以实现microros的集成。

集成参考(makefile版本):

GLOBAL_INCLUDES += $(LOCAL_DIR)/include
GLOBAL_MODULE_LDFLASS += -L$(LOCAL_DIR) -lmicroros

参考连接:

Creating custom static micro-ROS library

这篇关于<microros> 如何生成一个microros库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1040682

相关文章

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

C#使用Spire.XLS快速生成多表格Excel文件

《C#使用Spire.XLS快速生成多表格Excel文件》在日常开发中,我们经常需要将业务数据导出为结构清晰的Excel文件,本文将手把手教你使用Spire.XLS这个强大的.NET组件,只需几行C#... 目录一、Spire.XLS核心优势清单1.1 性能碾压:从3秒到0.5秒的质变1.2 批量操作的优雅

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

SQLServer中生成雪花ID(Snowflake ID)的实现方法

《SQLServer中生成雪花ID(SnowflakeID)的实现方法》:本文主要介绍在SQLServer中生成雪花ID(SnowflakeID)的实现方法,文中通过示例代码介绍的非常详细,... 目录前言认识雪花ID雪花ID的核心特点雪花ID的结构(64位)雪花ID的优势雪花ID的局限性雪花ID的应用场景

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

python生成随机唯一id的几种实现方法

《python生成随机唯一id的几种实现方法》在Python中生成随机唯一ID有多种方法,根据不同的需求场景可以选择最适合的方案,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习... 目录方法 1:使用 UUID 模块(推荐)方法 2:使用 Secrets 模块(安全敏感场景)方法

Python实现自动化Word文档样式复制与内容生成

《Python实现自动化Word文档样式复制与内容生成》在办公自动化领域,高效处理Word文档的样式和内容复制是一个常见需求,本文将展示如何利用Python的python-docx库实现... 目录一、为什么需要自动化 Word 文档处理二、核心功能实现:样式与表格的深度复制1. 表格复制(含样式与内容)2

python如何生成指定文件大小

《python如何生成指定文件大小》:本文主要介绍python如何生成指定文件大小的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python生成指定文件大小方法一(速度最快)方法二(中等速度)方法三(生成可读文本文件–较慢)方法四(使用内存映射高效生成