【ROS2】MicroROS构建静态包用于Zynq7020开发
由于 MicroROS 的构建环境不适用于 Zynq7020 裸机应用开发:无法调试、无法烧写、构建环境复杂,经过一番搜索之后发现可以直接构建外部静态链接库用于外部环境开发调试。
- 宿主机:Ubuntu 18.04
参考链接
- micro_ros_static_library_builder
- how-to-build-the-precompiled-library
- using-this-package-with-stm32cubeide
尝试生成 M0 静态库
安装 Docker
使用 Docker 拉取用于生成
libmicroros
静态包的镜像1
2docker pull microros/micro_ros_static_library_builder:galactic
docker pull microros/base:galactic拉取测试代码
1
2git clone https://github.com/micro-ROS/micro_ros_arduino.git
cd micro_ros_arduino尝试
这里开启了代理服务器,网络较好的时候不需要
1
docker run -it --rm -v $(pwd):/project --env MICROROS_LIBRARY_FOLDER=extras --env HTTP_PROXY="http://192.168.2.30:7890" --env HTTPS_PROXY="http://192.168.2.30:7890" --env NO_PROXY="192.168.*.*,*.biteax.com,*.szc188.com" microros/micro_ros_static_library_builder:galactic -p cortex_m0
生成的静态库在
src/cortex-m0plus/libmicroros.a
,编译器中加入-l microros
链接他,当然还需要添加搜索路径到此大概了解了镜像的用法,就是生成 MicroROS 的库文件和相对应的头文件
生成 A9 静态库
因为arduino会生成cpp文件,而且头文件都是Arduino的,不太适合我们移植,所以这里用 stm32cubemx 的包进行修改
下载软件包
1
2git clone https://github.com/micro-ROS/micro_ros_stm32cubemx_utils.git
cd micro_ros_stm32cubemx_utils尝试生成
1
docker run -it --rm -v $(pwd):/project --env MICROROS_LIBRARY_FOLDER=microros_static_library --env HTTP_PROXY="http://192.168.2.30:7890" --env HTTPS_PROXY="http://192.168.2.30:7890" --env NO_PROXY="192.168.*.*,*.biteax.com,*.szc188.com" microros/micro_ros_static_library_builder:galactic
中间出来了个需要输入的,我选择了个 ‘y’
生成的头文件和静态库文件在
microros_static_library/libmicroros
目录下再配合上
extra_sources
目录下的自定义 内存管理、时间、传输管理 源文件就可以实现传输了样例程序
sample_main.c
具体参考此处
创建一个差不多的项目
1
2
3mkdir micro_ros_zynq7_utils
cd micro_ros_zynq7_utils
cp -r ../micro_ros_stm32cubemx_utils/microros_static_library ./当前目录结构如下
1
2
3
4
5
6
7
8
9
10.
└── microros_static_library
└── library_generation
├── colcon.meta
├── extra_packages
│ └── extra_packages.repos
├── library_generation.sh
└── toolchain.cmake
3 directories, 4 files使用 VSCode 打开当前目录
修改一下
因为Zynq相对于单片机来说最不缺的就是内存,那么就要打开一些限制,打开
microros_static_library/library_generation/colcon.meta
,找到rmw_microxrcedds
修改
RMW_UXRCE_MAX_NODES
为3
修改
RMW_UXRCE_MAX_PUBLISHERS
为100
修改
RMW_UXRCE_MAX_SUBSCRIPTIONS
为100
修改
RMW_UXRCE_MAX_SERVICES
为30
修改
RMW_UXRCE_MAX_CLIENTS
为30
修改
RMW_UXRCE_MAX_HISTORY
为10
修改
RMW_UXRCE_TRANSPORT
为custom
打开
microros_static_library/library_generation/library_generation.sh
,找到######## Trying to retrieve CFLAGS ########
将这部分代码(到######## Build ########
)注释掉,然后添加以下代码1
export RET_CFLAGS="-Wall -O0 -g3 -c -fmessage-length=0 -mcpu=cortex-a9 -mfpu=vfpv3 -mfloat-abi=hard -MMD -MP"
这个可以自己创建一个工程,到 Vitis 的编译日志里找到
再次用上面的命令进行编译
这次就得到了我们想要的静态库和头文件,放到工程中就可以使用了
工程里需要设置头文件搜索路径,静态库搜索路径,静态库名称
代理的使用
这个仅限于Linux下使用,Windows下不支持串口
1 | docker run -it --rm -v /dev:/dev --privileged --net=host microros/micro-ros-agent:galactic serial --dev /dev/ttyUSB0 -v6 |
【ROS2】MicroROS构建静态包用于Zynq7020开发