ã¯ããã«
ååã¯kasã使ç¨ãã¦ãã«ãç°å¢ãæ§ç¯ãããkasãå¼·åãªã®ã§ä½¿ããããåé¢ãå®éã«ä½ãè¡ããã¦ãããåããã¥ããããã©ãã«ã·ã¥ã¼ããã«ã¹ã¿ãã¤ãºãããããã®ç¥èãå¾ã¥ãããªã£ã¦ããã
ä»åã¯kasã使ç¨ããã«ãã«ãç°å¢ãæ§ç¯ããã
ç°å¢æ§ç¯
pokyã®åå¾
pokyãåå¾ããã
$ mkdir -p ~/yocto/ros $ cd ~/yocto/ros $ git clone https://git.yoctoproject.org/poky $ cd poky $ git checkout tags/scarthgap-5.0.3 -b scarthgap-5.0.3 $ cd ../
ç°å¢å¤æ°ã®è¨å®
oe-init-build-envã®èªã¿è¾¼ã¿
$ source poky/oe-init-build-env
ã¬ã¤ã¤ã®åå¾
ROS2(humble)ãæ§ç¯ããããã«å¿ è¦ãªã¬ã¤ã¤ãåå¾ããã追å ããã¬ã¤ã¤ã¯kasã§çæãããbblayers.confãåèã«ãã¦ããã
$ bitbake-layers layerindex-fetch meta-ros2-humble $ bitbake-layers add-layer ../poky/meta-openembedded/meta-filesystem $ bitbake-layers add-layer ../poky/meta-openembedded/meta-networking $ bitbake-layers add-layer ../poky/meta-openembedded/meta-gnome $ bitbake-layers add-layer ../poky/meta-openembedded/meta-initramfs $ bitbake-layers add-layer ../poky/meta-openembedded/meta-multimedia $ bitbake-layers add-layer ../poky/meta-openembedded/meta-perl $ bitbake-layers add-layer ../poky/meta-openembedded/meta-python $ bitbake-layers add-layer ../poky/meta-openembedded/meta-webserver $ bitbake-layers add-layer ../poky/meta-openembedded/meta-xfce
local.confã®ä¿®æ£
ååã¯qemux86-64
ã使ç¨ãããä»åã¯qemuarm64
ã使ç¨ããã
meta-rosã使ãç°å¢ã§ã¯DISTROã«pokyã§ã¯ãªãros1
ãros2
ãè¨å®ãããã¨ã§ROSã使ç¨ãããã¨ãã§ããã
kasã§ä½æããç°å¢ã§ã¯systemdã使ç¨ããã¦ããã®ã§INIT_MANAGERã«systemd
ãè¨å®ãã¦ããã
MACHINE ?= "qemuarm64" DISTRO = "ros2" INIT_MANAGER = "systemd"
ãã«ã対象ã®ã¬ã¤ã¤
ãã«ã対象ã®ã¬ã¤ã¤ãæ¹ãã¦ç¢ºèªããã
$ bitbake-layers show-layers NOTE: Starting bitbake server... layer path priority ======================================================================================================== core /home/ubuntu/yocto/ros/poky/meta 5 yocto /home/ubuntu/yocto/ros/poky/meta-poky 5 yoctobsp /home/ubuntu/yocto/ros/poky/meta-yocto-bsp 5 openembedded-layer /home/ubuntu/yocto/ros/poky/meta-openembedded/meta-oe 5 meta-python /home/ubuntu/yocto/ros/poky/meta-openembedded/meta-python 5 ros-common-layer /home/ubuntu/yocto/ros/poky/meta-ros/meta-ros-common 10 ros2-layer /home/ubuntu/yocto/ros/poky/meta-ros/meta-ros2 11 ros2-humble-layer /home/ubuntu/yocto/ros/poky/meta-ros/meta-ros2-humble 12 networking-layer /home/ubuntu/yocto/ros/poky/meta-openembedded/meta-networking 5 gnome-layer /home/ubuntu/yocto/ros/poky/meta-openembedded/meta-gnome 5 meta-initramfs /home/ubuntu/yocto/ros/poky/meta-openembedded/meta-initramfs 5 multimedia-layer /home/ubuntu/yocto/ros/poky/meta-openembedded/meta-multimedia 5 perl-layer /home/ubuntu/yocto/ros/poky/meta-openembedded/meta-perl 5 webserver /home/ubuntu/yocto/ros/poky/meta-openembedded/meta-webserver 5 xfce-layer /home/ubuntu/yocto/ros/poky/meta-openembedded/meta-xfce 5
ROSãã£ã¹ããªãã¥ã¼ã·ã§ã³
meta-rosã¯YoctoProject/OpenEmbeddedãæä¾ããã¬ã¤ã¤ã¢ãã«ããã¾ã使ç¨ãã¦ã
meta-ros-commonã«ãã©ã¹ãã¦meta-ros1
ãmeta-ros2
ãçµã¿åããããã¨ã§ROSã®ãã¼ã¸ã§ã³ãåãæ¿ãã¦ããã
ã¾ããmeta-ros2
ã¨meta-ros2-humble
ãmeta-ros2-jazzy
ãçµã¿åããããã¨ã§ROSãã£ã¹ããªãã¥ã¼ã·ã§ã³ãåãæ¿ãã¦ããã
ãã«ã
bitbakeã§ros-image-core
ããã«ãããã
$ bitbake ros-image-core
ros-image-coreèªä½ã¯meta-ros-commonã®æã¡ç©ã ããå è¿°ã®éãã¬ã¤ã¤ã¨ã®çµã¿åããã«ãã£ã¦ãå®éã«åºæ¥ä¸ããã¤ã¡ã¼ã¸ãé©åãªROSãã£ã¹ããªãã¥ã¼ã·ã§ã³ã¨ãªãããã«ãªã£ã¦ããã
åä½ç¢ºèª
QEMUãèµ·åãåä½ã確èªããã
$ runqemu nographic
ãã°ã¤ã³ãã¦OSãã¼ã¸ã§ã³ã確èªã
Robot Operating System 2 (ROS 2) with OpenEmbedded Linux 2.humble.2024-06-20.3-0 qemuarm64 ttyAMA0 qemuarm64 login: root root@qemuarm64:~# cat /etc/os-release ID=ros2 NAME="Robot Operating System 2 (ROS 2) with OpenEmbedded Linux" VERSION="2.humble.2024-06-20.3-0 (humble)" VERSION_ID=2.humble.2024-06-20.3-0 VERSION_CODENAME="humble" PRETTY_NAME="Robot Operating System 2 (ROS 2) with OpenEmbedded Linux 2.humble.2024-06-20.3-0 (humble)" CPE_NAME="cpe:/o:openembedded:ros2:2.humble.2024-06-20.3-0"
ros2ã³ãã³ãã確èªããã
root@qemuarm64:~# which ros2 root@qemuarm64:~#
kasã§ä½æããkirkstone+humbleã ã¨/usr/bin/ros2
ã«é
ç½®ããã¦ããããscarthgap+humbleã§ã¯è¦ã¤ãããªãã
ä¸è¬çãªROS2ã®ç°å¢ã¨åãããã«source /opt/ros/humble/setup.sh
ãå®è¡ãããã¨ã§ãros2ã³ãã³ãã使ç¨å¯è½ã«ãªãã
root@qemuarm64:~# source /opt/ros/humble/setup.sh head: invalid option -- 'c' BusyBox v1.36.1 () multi-call binary. Usage: head [OPTIONS] [FILE]... head: invalid option -- 'c' BusyBox v1.36.1 () multi-call binary. Usage: head [OPTIONS] [FILE]... head: invalid option -- 'c' BusyBox v1.36.1 () multi-call binary. Usage: head [OPTIONS] [FILE]... head: invalid option -- 'c' BusyBox v1.36.1 () multi-call binary. Usage: head [OPTIONS] [FILE]... head: invalid option -- 'c' BusyBox v1.36.1 () multi-call binary. Usage: head [OPTIONS] [FILE]... head: invalid option -- 'c' BusyBox v1.36.1 () multi-call binary. Usage: head [OPTIONS] [FILE]...
ã¨ã©ã¼ã¡ãã»ã¼ã¸ãããããåºãããros2ã®ç°å¢è¨å®ã¯è¡ããã¦ããã
root@qemuarm64:~# which ros2 /opt/ros/humble/bin/ros2 root@qemuarm64:~# ros2 /opt/ros/humble/lib/python3.12/site-packages/sros2/__init__.py:26: UserWarning: Share directory for sros2 (/opt/ros/humble/share/sros2) does not exist. ament_index_python.get_package_share_directory('sros2'), usage: ros2 [-h] [--use-python-default-buffering] Call `ros2 <command> -h` for more detailed usage. ... ros2 is an extensible command-line tool for ROS 2. options: -h, --help show this help message and exit --use-python-default-buffering Do not force line buffering in stdout and instead use the python default buffering, which might be affected by PYTHONUNBUFFERED/-u and depends on whatever stdout is interactive or not Commands: action Various action related sub-commands component Various component related sub-commands daemon Various daemon related sub-commands doctor Check ROS setup and other potential issues interface Show information about ROS interfaces launch Run a launch file lifecycle Various lifecycle related sub-commands multicast Various multicast related sub-commands node Various node related sub-commands param Various param related sub-commands pkg Various package related sub-commands run Run a package specific executable security Various security related sub-commands service Various service related sub-commands topic Various topic related sub-commands wtf Use `wtf` as alias to `doctor` Call `ros2 <command> -h` for more detailed usage.
ä¸è¨ã®headã³ãã³ãã®ã¨ã©ã¼ã¡ãã»ã¼ã¸ã¯busyboxã®headã³ãã³ãã-c
ãªãã·ã§ã³ãåãä»ããªãããã¨ãªãã
ããã¯coreutils
ãã¤ã³ã¹ãã¼ã«ãããã¨ã§è¡¨ç¤ºãããªããªãã
ã·ã§ã«ãbusyboxãªã®ã§ãbashãå ¥ãããã
ã¾ãããã¢ç¨ãã¼ãã®talkerãlistenerã®åä½ã確èªããããã« è¤æ°ã®ç«¯æ«ãéããããã«ããããGUIç°å¢ããªãããSSHã§è¤æ°ã·ã§ã«ãéããããã«ããã
æçµçãªlocal.conf
ä»å使ããç°å¢ã®æçµçãªlocal.confã¯ä¸è¨ã®ããã«ãªãã
MACHINE ?= "qemuarm64" DISTRO = "ros2" INIT_MANAGER = "systemd" IMAGE_INSTALL:append = " coreutils bash" IMAGE_INSTALL:append = " demo-nodes-cpp" EXTRA_IMAGE_FEATURES += "ssh-server-openssh"
ROSãã¼ãã®åä½ç¢ºèª
QEMUã®èµ·å
ä¸è¨ã§QEMUãèµ·åããã
$ runqemu nographic
sshã§æ¥ç¶
å¥ã®ç«¯æ«ã§ä¸è¨ã®ããã«ãã¦SSHã§QEMUã«æ¥ç¶ãããQEMUã®ã¢ãã¬ã¹ã¯å¸¸ã«åãã
$ ssh [email protected]
ãã¼ãã®èµ·å
QEMUã®ç«¯æ«ã§ä¸è¨ãå®è¡ããã
root@qemuarm64:~# source /opt/ros/humble/setup.bash root@qemuarm64:~# ros2 run demo_nodes_cpp talker [INFO] [1727526996.561837142] [talker]: Publishing: 'Hello World: 1' [INFO] [1727526997.560419904] [talker]: Publishing: 'Hello World: 2' [INFO] [1727526998.560633584] [talker]: Publishing: 'Hello World: 3' [INFO] [1727526999.560611776] [talker]: Publishing: 'Hello World: 4' [INFO] [1727527000.560563748] [talker]: Publishing: 'Hello World: 5' [INFO] [1727527001.560681565] [talker]: Publishing: 'Hello World: 6' [INFO] [1727527002.560761342] [talker]: Publishing: 'Hello World: 7' [INFO] [1727527003.560696830] [talker]: Publishing: 'Hello World: 8' [INFO] [1727527004.560643432] [talker]: Publishing: 'Hello World: 9' [INFO] [1727527005.560850621] [talker]: Publishing: 'Hello World: 10' [INFO] [1727527006.560733346] [talker]: Publishing: 'Hello World: 11' [INFO] [1727527007.560769019] [talker]: Publishing: 'Hello World: 12' [INFO] [1727527008.561200052] [talker]: Publishing: 'Hello World: 13' [INFO] [1727527009.560818866] [talker]: Publishing: 'Hello World: 14' [INFO] [1727527010.560854185] [talker]: Publishing: 'Hello World: 15' [INFO] [1727527011.560994356] [talker]: Publishing: 'Hello World: 16' [INFO] [1727527012.560954000] [talker]: Publishing: 'Hello World: 17' [INFO] [1727527013.561065750] [talker]: Publishing: 'Hello World: 18' [INFO] [1727527014.561088563] [talker]: Publishing: 'Hello World: 19' [INFO] [1727527015.560994808] [talker]: Publishing: 'Hello World: 20' [INFO] [1727527016.561031546] [talker]: Publishing: 'Hello World: 21'
SSHã®ç«¯æ«ã§ä¸è¨ãå®è¡ããã
root@qemuarm64:~# source /opt/ros/humble/setup.bash root@qemuarm64:~# ros2 run demo_nodes_cpp listener [INFO] [1727527008.564684607] [listener]: I heard: [Hello World: 13] [INFO] [1727527009.563394995] [listener]: I heard: [Hello World: 14] [INFO] [1727527010.563196515] [listener]: I heard: [Hello World: 15] [INFO] [1727527011.564015325] [listener]: I heard: [Hello World: 16] [INFO] [1727527012.564640807] [listener]: I heard: [Hello World: 17] [INFO] [1727527013.563380651] [listener]: I heard: [Hello World: 18] [INFO] [1727527014.563401623] [listener]: I heard: [Hello World: 19] [INFO] [1727527015.563069301] [listener]: I heard: [Hello World: 20] [INFO] [1727527016.563527248] [listener]: I heard: [Hello World: 21] [INFO] [1727527017.563485978] [listener]: I heard: [Hello World: 22] [INFO] [1727527018.563759558] [listener]: I heard: [Hello World: 23] [INFO] [1727527019.563241419] [listener]: I heard: [Hello World: 24] [INFO] [1727527020.563793663] [listener]: I heard: [Hello World: 25] [INFO] [1727527021.563547049] [listener]: I heard: [Hello World: 26] [INFO] [1727527022.563921908] [listener]: I heard: [Hello World: 27]
ãã¡ãã¨éä¿¡ã§ãã¦ããããã ã
ã¾ã¨ã
kasã使ç¨ããã«meta-rosã®ç°å¢ãæ§ç¯ããã demo_nodes_cppããã±ã¼ã¸ã®talkderã¨lisnerãå®è¡ããYocto Projectç°å¢ã§ãROS2ããã¡ãã¨åä½ãããã¨ã確èªããã