本章节介绍yocto如何集成ros系统用来作机器人开发。
第一步首先需要下载meta-ros layer,meta-ros的链接如下:https://github.com/ros/meta-ros/tree/master,在我们的yocto源码layers路径下执行如下指令:
git clone https://github.com/ros/meta-ros.git
下载完成以后如下:
完成以后需要进入到meta-ros里面切换匹配yocto版本的分支,比如我当前使用的yocto版本是dunfell即yocto 3.1,这样我们也需要切换meta-ros到对应的dunfell分支上。
cd meta-ros
git chekcout remotes/origin/dunfell
这样我们的meta-ros layer就准备好了。
这里后面遇到一个编译问题,提示meta-layer不兼容,作了一个小改动,如果遇到同样问题可以尝试以下:
修改你需要集成的ros版本里面的LAYERSERIES_COMPAT_属性为你当前yocto的版本
# ROS
ADDONSLAYERS += " \
${OEROOT}/layers/meta-ros/meta-ros-backports-hardknott \
${OEROOT}/layers/meta-ros/meta-ros-backports-gatesgarth \
${OEROOT}/layers/meta-ros/meta-ros-common \
${OEROOT}/layers/meta-ros/meta-ros1 \
${OEROOT}/layers/meta-ros/meta-ros1-noetic \
"
注意我这里集成的是ros1 noetic版本,如果你需要集成其他版本按照你的需求写就好了,前面4个为meta-ros1-noetic 的依赖layer,如果你和我版本不同请根据你的依赖关系填写。到此应该就可以编译ros系统了,可以尝试使用如下指令来编译ros:
bitbake ros-image-core
CORE_IMAGE_EXTRA_INSTALL += " ros-core turtlesim "
按照第二部做完正常情况下ros的 ros-core turtlesim 就应该已经集成到根文件系统了,下面使用ros自带的测试节点测试ros是否能正常工作
source /opt/ros/noetic/setup.sh
roscore
执行效果如下:
source /opt/ros/noetic/setup.sh
rosrun turtlesim turtlesim_node
这里注意以下因为我板子上的qt系统后端是使用eglfs的,和ros默认的xcb不同,直接执行会coredump,所以我使用export QT_QPA_PLATFORM=eglfs指定了QT的后端使用eglfs,这样就能正常运行了,下面是操作截图:
source /opt/ros/noetic/setup.sh
rosrun turtlesim turtle_teleop_key
这样在这个终端里面就可以使用上下左右的键盘来控制UI上的小海龟移动拉
下面贴一张实际在板子上的运行状态照片:
默认的ui在板子上显示有点问题,不过不影响测试,小海龟的白色路径就是用键盘控制画出来的。集成工作结束,下面就能愉快的开发ros拉