まずは環境変数の設定をします。ug1144でプロジェクトのBitbakeへのアクセスを参考にbitbakeを使用できるようにします。なお、単純なuser-layerとしての追加は試しましたがtaskhash mismatchの問題出たのでソースから生成するようにしてます。(実はlocal.confをいじるだけでいけたかもしれないけど)
$cd <petalinux_prj_root> $source <petalinux_install_path>/settings.sh $source <petalinux_install_path>/components/yocto/source/aarch64/environment-setup-aarch64-xilinx-linux $source <petalinux_install_path>/components/yocto/source/aarch64/layers/core/oe-init-build-env $export PATH=<petalinux_install_path>/tools/xsct/bin:$PATH $export BB_ENV_EXTRAWHITE="$BB_ENV_EXTRAWHITE PETALINUX"
bitbake straceが動けば環境設定は成功です。
次はソースからビルドするようにpetalinuxで使用しているプロジェクト一式をgithubから持ってきます。必要なレイヤーは<petalinux_prj_root>/build/conf/bblayer.confに記載があるので、これを参考に集めてきます。
BBLAYERS := " \ ${SDKBASEMETAPATH}/poky/meta \ ${SDKBASEMETAPATH}/poky/meta-poky \ ${SDKBASEMETAPATH}/meta-openembedded/meta-perl \ ${SDKBASEMETAPATH}/meta-openembedded/meta-python \ ${SDKBASEMETAPATH}/meta-openembedded/meta-filesystems \ ${SDKBASEMETAPATH}/meta-openembedded/meta-gnome \ ${SDKBASEMETAPATH}/meta-openembedded/meta-multimedia \ ${SDKBASEMETAPATH}/meta-openembedded/meta-networking \ ${SDKBASEMETAPATH}/meta-openembedded/meta-webserver \ ${SDKBASEMETAPATH}/meta-openembedded/meta-xfce \ ${SDKBASEMETAPATH}/meta-openembedded/meta-initramfs \ ${SDKBASEMETAPATH}/meta-openembedded/meta-oe \ ${SDKBASEMETAPATH}/meta-browser \ ${SDKBASEMETAPATH}/meta-qt5 \ ${SDKBASEMETAPATH}/meta-xilinx/meta-xilinx-bsp \ ${SDKBASEMETAPATH}/meta-xilinx/meta-xilinx-pynq \ ${SDKBASEMETAPATH}/meta-xilinx/meta-xilinx-contrib \ ${SDKBASEMETAPATH}/meta-xilinx-tools \ ${SDKBASEMETAPATH}/meta-petalinux \ ${SDKBASEMETAPATH}/meta-virtualization \ ${SDKBASEMETAPATH}/meta-openamp \ ${SDKBASEMETAPATH}/meta-jupyter \ ・・・
よって次のコマンドを実行します。最後におまけでmeta-rosもクローンしておきます。
$cd ../project-spec $git clone https://github.com/Xilinx/poky -b rel-v2019.2 $git clone https://github.com/Xilinx/meta-openembedded -b rel-v2019.2 $git clone https://github.com/Xilinx/meta-browser -b rel-v2019.2 $git clone https://github.com/Xilinx/meta-qt5 -b rel-vc2019.2 $git clone https://github.com/Xilinx/meta-xilinx -b rel-v2019.2 $git clone https://github.com/Xilinx/meta-xilinx-tools -b rel-v2019.2 $git clone https://github.com/Xilinx/meta-petalinux -b rel-v2019.2 $git clone https://github.com/Xilinx/meta-virtualization -b rel-v2019.2 $git clone https://github.com/Xilinx/meta-openamp -b rel-v2019.2 $git clone https://github.com/Xilinx/meta-jupyter -b rel-v2019.2 $git clone https://github.com/ros/meta-ros -b origin/thud-draft
続いてbblayer.confを編集します。SDKBASEMETAPATHはgit cloneしたレイヤーを指定しておきます。
また、meta-rosの公式ビルドガイドに従うとraspberry-pi用のyocto環境を作成できるので、これを参考に以下のように追記しています。
なお、今回はどうせやるならros2のdashingだろうということでこれを選んでいます。
DISTROを変更すればros1-melodicやros2-crystal,ros2-eloquent(本当?)でも対応できると思います。
中身をよく調べもせずコピーしているので多分不要なものが含まれています。(MCF設定とか)
ROS_DISTRO_BASELINE_PLATFORM ?= "ubuntu-bionic"も参考元ではどこかで指定されるものと思われますが、petalinuxプロジェクトでは指定されないので定義して置く必要があります。
# Generated by mcf -- DO NOT EDIT MCF_PROGRAM_VERSION = "7.2.0" # LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf # changes incompatibly LCONF_VERSION = "7" SDKBASEMETAPATH = "<path_to_project-spec>" META_ROS2_DASHING_LAYER ?= "${SDKBASEMETAPATH}/meta-ros/meta-ros2-dashing" META_ROS2_LAYER ?= "${SDKBASEMETAPATH}/meta-ros/meta-ros2" META_ROS_COMMON_LAYER ?= "${SDKBASEMETAPATH}/meta-ros/meta-ros-common" META_ROS_BACKPORTS_WARRIOR_LAYER ?= "${SDKBASEMETAPATH}/meta-ros/meta-ros-backports-warrior" BBLAYERS ?= " \ ${SDKBASEMETAPATH}/poky/meta \ ${SDKBASEMETAPATH}/poky/meta-poky \ ${SDKBASEMETAPATH}/meta-openembedded/meta-perl \ ${SDKBASEMETAPATH}/meta-openembedded/meta-python \ ${SDKBASEMETAPATH}/meta-openembedded/meta-filesystems \ ${SDKBASEMETAPATH}/meta-openembedded/meta-gnome \ ${SDKBASEMETAPATH}/meta-openembedded/meta-multimedia \ ${SDKBASEMETAPATH}/meta-openembedded/meta-networking \ ${SDKBASEMETAPATH}/meta-openembedded/meta-webserver \ ${SDKBASEMETAPATH}/meta-openembedded/meta-xfce \ ${SDKBASEMETAPATH}/meta-openembedded/meta-initramfs \ ${SDKBASEMETAPATH}/meta-openembedded/meta-oe \ ${SDKBASEMETAPATH}/meta-browser \ ${SDKBASEMETAPATH}/meta-qt5 \ ${SDKBASEMETAPATH}/meta-xilinx/meta-xilinx-bsp \ ${SDKBASEMETAPATH}/meta-xilinx/meta-xilinx-pynq \ ${SDKBASEMETAPATH}/meta-xilinx/meta-xilinx-contrib \ ${SDKBASEMETAPATH}/meta-xilinx-tools \ ${SDKBASEMETAPATH}/meta-petalinux \ ${SDKBASEMETAPATH}/meta-virtualization \ ${SDKBASEMETAPATH}/meta-openamp \ ${SDKBASEMETAPATH}/meta-jupyter \ ${META_RASPBERRYPI_LAYER} \ ${META_ROS2_DASHING_LAYER} \ ${META_ROS2_LAYER} \ ${META_ROS_COMMON_LAYER} \ ${META_ROS_BACKPORTS_WARRIOR_LAYER} \ ${META_PYTHON_LAYER} \ ${META_OE_LAYER} \ ${META_LAYER} \ " BBFILE_PRIORITY_ros2-dashing-layer_forcevariable = "39" BBFILE_PRIORITY_ros2-layer_forcevariable = "38" BBFILE_PRIORITY_ros-common-layer_forcevariable = "35" BBFILE_PRIORITY_ros-backports-warrior-layer_forcevariable = "34" BBFILE_PRIORITY_meta-python_forcevariable = "13" BBFILE_PRIORITY_openembedded-layer_forcevariable = "10" BBFILE_PRIORITY_core_forcevariable = "5" ROS_DISTRO_BASELINE_PLATFORM ?= "ubuntu-bionic" # Lines from the BblayersConfExtraLines setting: MCF_DISTRO ?= "ros2" ROS_DISTRO ?= "dashing" MCF_SUPPORTED_MACHINES ?= "qemux86 raspberrypi3" MCF_OPENEMBEDDED_VERSION ?= "2.6-464.1-thud"
まだ終わりません。つぎは<petalinux_prj_root>/build/conf/local.confです。UNINATIVE_CHECKSUMの行をコメントアウトします。meta-rosが何かやるせいだと思っています。WARNINGを書いてくれていますが無視します。
また<petalinux_prj_root>/build/conf/locked_sigs.incからlibgcc-initial及びglibc-initialの行をごっそりと削除します。meta-rosの仕業だと思っています。
<petalinux_prj_root>/project-spec/meta-plnx-generated/recipes-core/images/petalinux-user-image.bbを編集します。
IMAGE_INSTALLの最後に"ros-core \"を追加します。
また、pythonのバージョンに起因する問題と思われるエラー確認したのでpython3はpython3だろということでとりあえずmeta-rosのbackportsのpythonレシピを消してpetalinuxが使用しているpythonが使われるようにしました。
rm -rf <petalinux_prj_root>/project-spec/meta-ros/meta-ros-backports-warrior/recipes-devtools/python/python3 rm -rf <petalinux_prj_root>/project-spec/meta-ros/meta-ros-backports-warrior/recipes-devtools/python/python3_3.7.2.bb
ここまで来てようやくbuildができます。
次のように実行します。
$cd <path_to_prj_root>/build $bitbake petalinux-user-imagebuildには12時間かかりました。また途中chromeのbuild時に27Gのメモリが必要でしたのでswapを追加してbuildしました。 bblayer.conf,locked_sigs.inc,local.conf,petalinux-user-image.bbはpetalinux configで上書きされてしまうので、
バージョン管理するかバックアップ取っておくかしておくのが良いです。
あとは<path_to_prj_root>/Makefileにpetalinux同様のdeployイメージ収集処理を追加しておくと便利と思います。私は以下を追加しています。
import_deploy: cp -f $(DEPLOY_DIR)/fitImage images/linux/image.ub cp -f $(DEPLOY_DIR)/arm-trusted-firmware.elf images/linux/bl31.elf cp -f $(DEPLOY_DIR)/pmu-ultra96-zynqmp.elf images/linux/pmufw.elf cp -f $(DEPLOY_DIR)/u-boot.elf images/linux/u-boot.elf cp -f $(DEPLOY_DIR)/fsbl-ultra96-zynqmp.elf images/linux/zynqmp_fsbl.elf cp -f $(DEPLOY_DIR)/system.dtb images/linux/system.dtb cp -f $(DEPLOY_DIR)/System.map.linux images/linux/System.map.linux cp -f $(DEPLOY_DIR)/uEnv.txt images/linux/uEnv.txt cp -f $(DEPLOY_DIR)/petalinux-user-image-dashing-ultra96-zynqmp.tar.gz images/linux/rootfs.tar.gz cp -f $(DEPLOY_DIR)/qemu-hw-devicetrees/multiarch/zynqmp-pmu.dtb images/linux/zynqmp-qemu-multiarch-pmu.dtb cp -f $(DEPLOY_DIR)/qemu-hw-devicetrees/multiarch/zcu100-arm.dtb images/linux/zynqmp-qemu-multiarch-arm.dtb cp -f project-spec/hw-description/ultra96v2_oob.bit images/linux/system.bit
qemu動作させてみます。sd.imgはどうにかして用意してください。実機で動作させても同じです。
bootしたあとはROS2 Sanity Testを実行して動作確認します。
qemu動作時とSanity Test実行時のメッセージをおいておきます。
よいrosライフを!
$ make qemuboot petalinux-boot --qemu --u-boot --qemu-args "-drive file=myfile/sd.img,if=sd,id=sd0,index=0,format=raw -drive file=myfile/sd.img,if=sd,id=sd1,index=1,format=raw" INFO: sourcing build tools INFO: No DTB has been specified, use the default one "/home/akira/work/ultra96v2_oob/ultra96v2_oob/petalinux/images/linux/system.dtb". INFO: No DTB has been specified, use the default one "/home/akira/work/ultra96v2_oob/ultra96v2_oob/petalinux/images/linux/system.dtb". INFO: Starting microblaze QEMU INFO: Starting the above QEMU command in the background INFO: qemu-system-microblazeel -M microblaze-fdt -serial mon:stdio -serial /dev/null -display none -kernel /home/akira/work/ultra96v2_oob/ultra96v2_oob/petalinux/pre-built/linux/images/pmu_rom_qemu_sha3.elf -device loader,file=/home/akira/work/ultra96v2_oob/ultra96v2_oob/petalinux/images/linux/pmufw.elf -hw-dtb /home/akira/work/ultra96v2_oob/ultra96v2_oob/petalinux/images/linux/zynqmp-qemu-multiarch-pmu.dtb -machine-path /tmp/tmp.V5UJRYwebI -device loader,addr=0xfd1a0074,data=0x1011003,data-len=4 -device loader,addr=0xfd1a007C,data=0x1010f03,data-len=4 INFO: Set QEMU tftp to /home/akira/work/ultra96v2_oob/ultra96v2_oob/petalinux/images/linux INFO: TCP PORT is free INFO: Starting aarch64 QEMU INFO: qemu-system-aarch64 -M arm-generic-fdt -serial /dev/null -serial mon:stdio -display none -device loader,file=/home/akira/work/ultra96v2_oob/ultra96v2_oob/petalinux/images/linux/bl31.elf,cpu-num=0 -device loader,file=/home/akira/work/ultra96v2_oob/ultra96v2_oob/petalinux/images/linux/u-boot.elf -gdb tcp::9000 -dtb /home/akira/work/ultra96v2_oob/ultra96v2_oob/petalinux/images/linux/system.dtb -net nic -net nic -net nic -net nic,netdev=eth0 -netdev user,id=eth0,tftp=/home/akira/work/ultra96v2_oob/ultra96v2_oob/petalinux/images/linux -hw-dtb /home/akira/work/ultra96v2_oob/ultra96v2_oob/petalinux/images/linux/zynqmp-qemu-multiarch-arm.dtb -machine-path /tmp/tmp.V5UJRYwebI -global xlnx,zynqmp-boot.cpu-num=0 -global xlnx,zynqmp-boot.use-pmufw=true -drive file=myfile/sd.img,if=sd,id=sd0,index=0,format=raw -drive file=myfile/sd.img,if=sd,id=sd1,index=1,format=raw -m 4G qemu-system-microblazeel: Failed to connect socket /tmp/tmp.V5UJRYwebI/qemu-rport-_pmu@0: No such file or directory qemu-system-microblazeel: info: QEMU waiting for connection on: disconnected:unix:/tmp/tmp.V5UJRYwebI/qemu-rport-_pmu@0,server QEMU 2.11.1 monitor - type 'help' for more information (qemu) audio: Could not init `oss' audio driver qemu-system-aarch64: warning: vlan 0 is not connected to host network PMU Firmware 2019.2 Feb 3 2020 10:48:12 PMU_ROM Version: xpbr-v8.1.0-0 NOTICE: ATF running on XCZUUNKN/QEMU v4/RTL0.0 at 0xfffea000 NOTICE: BL31: Secure code at 0x60000000 NOTICE: BL31: Non secure code at 0x10080000 NOTICE: BL31: v2.0(release):xilinx-v2019.1-12-g713dace9 NOTICE: BL31: Built : 10:50:42, Feb 3 2020 PMUFW: v1.1 U-Boot 2019.01 (Feb 03 2020 - 10:03:12 +0000) Model: Avnet Ultra96 Rev1 Board: Xilinx ZynqMP DRAM: 2 GiB EL Level: EL2 Chip ID: unknown MMC: mmc@ff160000: 0, mmc@ff170000: 1 Loading Environment from FAT... *** Warning - bad CRC, using default environment In: serial@ff010000 Out: serial@ff010000 Err: serial@ff010000 Model: Avnet Ultra96 Rev1 Board: Xilinx ZynqMP Bootmode: JTAG_MODE Reset reason: Net: ZYNQ GEM: ff0e0000, phyaddr ffffffff, interface gmii eth0: ethernet@ff0e0000 U-BOOT for ultra96v2-oob-2019_2 Hit any key to stop autoboot: 0 Device: mmc@ff160000 Manufacturer ID: aa OEM: 5859 Name: QEMU! Bus Speed: 17361111 Mode : SD Legacy Rd Block Len: 512 SD version 2.0 High Capacity: Yes Capacity: 19.5 GiB Bus Width: 4-bit Erase Group Size: 512 Bytes 18462860 bytes read in 4812 ms (3.7 MiB/s) ## Loading kernel from FIT Image at 10000000 ... Using 'conf@system-top.dtb' configuration Trying 'kernel@1' kernel subimage Description: Linux kernel Type: Kernel Image Compression: uncompressed Data Start: 0x10000108 Data Size: 18424320 Bytes = 17.6 MiB Architecture: AArch64 OS: Linux Load Address: 0x00080000 Entry Point: 0x00080000 Hash algo: sha1 Hash value: 5b2a4cdeafb06d0c1704ce266cab9d682020e4be Verifying Hash Integrity ... sha1+ OK ## Loading fdt from FIT Image at 10000000 ... Using 'conf@system-top.dtb' configuration Trying 'fdt@system-top.dtb' fdt subimage Description: Flattened Device Tree blob Type: Flat Device Tree Compression: uncompressed Data Start: 0x1119240c Data Size: 36617 Bytes = 35.8 KiB Architecture: AArch64 Hash algo: sha1 Hash value: 180c885fca6c51a5faf912f89c16d35ab258afd1 Verifying Hash Integrity ... sha1+ OK Booting using the fdt blob at 0x1119240c Loading Kernel Image ... OK Loading Device Tree to 0000000007ff4000, end 0000000007ffff08 ... OK Starting kernel ... INIT: version 2.88 booting Starting udev Starting Ultra96 AP setup daemon. Turning Ultra96 WiFi & Bluetooth LEDs ON...done. Starting Flask server deamon to serve Ultra96 startup page. INIT: Entering runlevel: 5 Configuring network interfaces... Successfully initialized wpa_supplicant rfkill: Cannot get wiphy information Could not read interface wlan0 flags: No such device WEXT: Could not set interface 'wlan0' UP wlan0: Failed to initialize driver interface Cannot find device "wlan0" Starting system message bus: dbus. Starting Connection Manager Starting haveged: haveged: listening socket at 3 haveged: haveged starting up Starting Xserver mount: /mnt: /dev/mmcblk0p1 already mounted on /run/media/mmcblk0p1. mount: /mnt: /dev/mmcblk0 already mounted or mount point busy. Starting Dropbear SSH server: haveged: haveged: ver: 1.9.4; arch: generic; vend: ; build: (gcc 8.2.0 CTV); collect: 128K haveged: haveged: cpu: (VC); data: 16K (D V); inst: 16K (D V); idx: 11/40; sz: 15528/64688 haveged: haveged: tot tests(BA8): A:1/1 B:1/1 continuous tests(B): last entropy estimate 8.00355 haveged: haveged: fills: 0, generated: 0 mount: /mnt: /dev/mmcblk0p1 already mounted on /run/media/mmcblk0p1. dropbear. mount: /mnt: /dev/mmcblk0 already mounted or mount point busy. Starting rpcbind daemon... X.Org X Server 1.20.1 X Protocol Version 11, Revision 0 Build Operating System: Linux 5.3.0-28-generic x86_64 Current Operating System: Linux ultra96v2-oob-2019_2 4.19.0-xilinx-v2019.2 #1 SMP Mon Feb 3 01:47:41 UTC 2020 aarch64 Kernel command line: earlycon console=ttyPS0,115200 clk_ignore_unused root=/dev/mmcblk0p2 rw rootwait Build Date: 03 February 2020 03:41:05AM Current version of pixman: 0.34.0 Before reporting problems, check http://wiki.x.org to make sure that you have the latest version. Markers: (--) probed, (**) from config file, (==) default setting, (++) from command line, (!!) notice, (II) informational, (WW) warning, (EE) error, (NI) not implemented, (??) unknown. (==) Log file: "/var/log/Xorg.0.log", Time: Wed Feb 5 09:38:25 2020 (==) Using config file: "/etc/X11/xorg.conf" (==) Using system config directory "/usr/share/X11/xorg.conf.d" done. starting statd: done The XKEYBOARD keymap compiler (xkbcomp) reports: > Warning: Unsupported high keycode 372 for nameignored > X11 cannot support keycodes above 255. > This warning only shows for the first high keycode. Starting bluetooth: bluetoothd. Errors from xkbcomp are not fatal to the X server Starting Distributed Compiler Daemon: distcc/etc/rc5.d/S20distcc: start failed with error code 110 Starting internet superserver: inetd. exportfs: can't open /etc/exports for reading NFS daemon support not enabled in kernel Starting ntpd: done Starting syslogd/klogd: D-BUS per-session daemon address is: unix:abstract=/tmp/dbus-CG2YvTEmNM,guid=06462448b754ac2b1c4e7eed5e3a8d1b done mount: /mnt: /dev/mmcblk0p1 already mounted on /run/media/mmcblk0p1. Starting internet superserver: xinetdmount: /mnt: /dev/mmcblk0 already mounted or mount point busy. . * Starting Avahi mDNS/DNS-SD Daemon: avahi-daemon Opening webpage Starting Telephony daemon GLib-GIO-Message: 09:38:41.098: Using the 'memory' GSettings backend. Your settings will not be saved or shared with other applications. Starting watchdog daemon...Failed to launch bus: Failed to execute child process ?/usr/bin? (Permission denied)done Starting Linux NFC daemon matchbox: Cant find a keycode for keysym 269025056 matchbox: ignoring key shortcut XF86Calendar=!$contacts matchbox: Cant find a keycode for keysym 2809 matchbox: ignoring key shortcut telephone=!$dates matchbox: Cant find a keycode for keysym 269025050 matchbox: ignoring key shortcut XF86Start=!matchbox-remote -desktop [settings daemon] Forking. run with -n to prevent fork Starting tcf-agent: OK (matchbox-panel:2420): dbind-WARNING **: 09:38:53.223: Error retrieving accessibility bus address: org.a11y.Bus.Error: Failed to execute child process ?/usr/bin? (Permission denied) (matchbox-desktop:2419): dbind-WARNING **: 09:38:53.219: Error retrieving accessibility bus address: org.a11y.Bus.Error: Failed to execute child process ?/usr/bin? (Permission denied) mount: /mnt: /dev/mmcblk0p1 already mounted on /run/media/mmcblk0p1. mount: /mnt: /dev/mmcblk0 already mounted or mount point busy. root@ultra96v2-oob-2019_2:~# root@ultra96v2-oob-2019_2:~# root@ultra96v2-oob-2019_2:~# source [2586:2586:0205/093904:ERROR:gl_factory.cc(48)] Requested GL implementation is not available. [2586:2586:0205/093904:ERROR:gpu_child_thread.cc(348)] Exiting GPU process due to errors during initialization root@ultra96v2-oob-2019_2:~# root@ultra96v2-oob-2019_2:~# root@ultra96v2-oob-2019_2:~# source ros_setup.sh [2377:2573:0205/093916:ERROR:browser_gpu_channel_host_factory.cc(123)] Failed to launch GPU process. [2377:2573:0205/093917:ERROR:browser_gpu_channel_host_factory.cc(123)] Failed to launch GPU process. root@ultra96v2-oob-2019_2:~# root@ultra96v2-oob-2019_2:~# echo $LD_LIBRARY_PATH /usr/lib root@ultra96v2-oob-2019_2:~# ros2 topic list /parameter_events /rosout root@ultra96v2-oob-2019_2:~# ros2 msg list action_msgs/msg/GoalInfo action_msgs/msg/GoalStatus action_msgs/msg/GoalStatusArray actionlib_msgs/msg/GoalID actionlib_msgs/msg/GoalStatus actionlib_msgs/msg/GoalStatusArray builtin_interfaces/msg/Duration builtin_interfaces/msg/Time diagnostic_msgs/msg/DiagnosticArray diagnostic_msgs/msg/DiagnosticStatus diagnostic_msgs/msg/KeyValue geometry_msgs/msg/Accel geometry_msgs/msg/AccelStamped geometry_msgs/msg/AccelWithCovariance geometry_msgs/msg/AccelWithCovarianceStamped geometry_msgs/msg/Inertia geometry_msgs/msg/InertiaStamped geometry_msgs/msg/Point geometry_msgs/msg/Point32 geometry_msgs/msg/PointStamped geometry_msgs/msg/Polygon geometry_msgs/msg/PolygonStamped geometry_msgs/msg/Pose geometry_msgs/msg/Pose2D geometry_msgs/msg/PoseArray geometry_msgs/msg/PoseStamped geometry_msgs/msg/PoseWithCovariance geometry_msgs/msg/PoseWithCovarianceStamped geometry_msgs/msg/Quaternion geometry_msgs/msg/QuaternionStamped geometry_msgs/msg/Transform geometry_msgs/msg/TransformStamped geometry_msgs/msg/Twist geometry_msgs/msg/TwistStamped geometry_msgs/msg/TwistWithCovariance geometry_msgs/msg/TwistWithCovarianceStamped geometry_msgs/msg/Vector3 geometry_msgs/msg/Vector3Stamped geometry_msgs/msg/Wrench geometry_msgs/msg/WrenchStamped lifecycle_msgs/msg/State lifecycle_msgs/msg/Transition lifecycle_msgs/msg/TransitionDescription lifecycle_msgs/msg/TransitionEvent nav_msgs/msg/GridCells nav_msgs/msg/MapMetaData nav_msgs/msg/OccupancyGrid nav_msgs/msg/Odometry nav_msgs/msg/Path rcl_interfaces/msg/FloatingPointRange rcl_interfaces/msg/IntegerRange rcl_interfaces/msg/IntraProcessMessage rcl_interfaces/msg/ListParametersResult rcl_interfaces/msg/Log rcl_interfaces/msg/Parameter rcl_interfaces/msg/ParameterDescriptor rcl_interfaces/msg/ParameterEvent rcl_interfaces/msg/ParameterEventDescriptors rcl_interfaces/msg/ParameterType rcl_interfaces/msg/ParameterValue rcl_interfaces/msg/SetParametersResult rosgraph_msgs/msg/Clock sensor_msgs/msg/BatteryState sensor_msgs/msg/CameraInfo sensor_msgs/msg/ChannelFloat32 sensor_msgs/msg/CompressedImage sensor_msgs/msg/FluidPressure sensor_msgs/msg/Illuminance sensor_msgs/msg/Image sensor_msgs/msg/Imu sensor_msgs/msg/JointState sensor_msgs/msg/Joy sensor_msgs/msg/JoyFeedback sensor_msgs/msg/JoyFeedbackArray sensor_msgs/msg/LaserEcho sensor_msgs/msg/LaserScan sensor_msgs/msg/MagneticField sensor_msgs/msg/MultiDOFJointState sensor_msgs/msg/MultiEchoLaserScan sensor_msgs/msg/NavSatFix sensor_msgs/msg/NavSatStatus sensor_msgs/msg/PointCloud sensor_msgs/msg/PointCloud2 sensor_msgs/msg/PointField sensor_msgs/msg/Range sensor_msgs/msg/RegionOfInterest sensor_msgs/msg/RelativeHumidity sensor_msgs/msg/Temperature sensor_msgs/msg/TimeReference shape_msgs/msg/Mesh shape_msgs/msg/MeshTriangle shape_msgs/msg/Plane shape_msgs/msg/SolidPrimitive std_msgs/msg/Bool std_msgs/msg/Byte std_msgs/msg/ByteMultiArray std_msgs/msg/Char std_msgs/msg/ColorRGBA std_msgs/msg/Empty std_msgs/msg/Float32 std_msgs/msg/Float32MultiArray std_msgs/msg/Float64 std_msgs/msg/Float64MultiArray std_msgs/msg/Header std_msgs/msg/Int16 std_msgs/msg/Int16MultiArray std_msgs/msg/Int32 std_msgs/msg/Int32MultiArray std_msgs/msg/Int64 std_msgs/msg/Int64MultiArray std_msgs/msg/Int8 std_msgs/msg/Int8MultiArray std_msgs/msg/MultiArrayDimension std_msgs/msg/MultiArrayLayout std_msgs/msg/String std_msgs/msg/UInt16 std_msgs/msg/UInt16MultiArray std_msgs/msg/UInt32 std_msgs/msg/UInt32MultiArray std_msgs/msg/UInt64 std_msgs/msg/UInt64MultiArray std_msgs/msg/UInt8 std_msgs/msg/UInt8MultiArray stereo_msgs/msg/DisparityImage trajectory_msgs/msg/JointTrajectory trajectory_msgs/msg/JointTrajectoryPoint trajectory_msgs/msg/MultiDOFJointTrajectory trajectory_msgs/msg/MultiDOFJointTrajectoryPoint unique_identifier_msgs/msg/UUID visualization_msgs/msg/ImageMarker visualization_msgs/msg/InteractiveMarker visualization_msgs/msg/InteractiveMarkerControl visualization_msgs/msg/InteractiveMarkerFeedback visualization_msgs/msg/InteractiveMarkerInit visualization_msgs/msg/InteractiveMarkerPose visualization_msgs/msg/InteractiveMarkerUpdate visualization_msgs/msg/Marker visualization_msgs/msg/MarkerArray visualization_msgs/msg/MenuEntry root@ultra96v2-oob-2019_2:~# (sleep 5; ros2 topic pub /chatter std_msgs/String "data: Hello world") & [1] 3871 root@ultra96v2-oob-2019_2:~# ros2 topic echo /chatter publisher: beginning loop publishing #1: std_msgs.msg.String(data='Hello world') publishing #2: std_msgs.msg.String(data='Hello world') data: Hello world --- publishing #3: std_msgs.msg.String(data='Hello world') data: Hello world --- publishing #4: std_msgs.msg.String(data='Hello world') data: Hello world --- publishing #5: std_msgs.msg.String(data='Hello world') data: Hello world --- publishing #6: std_msgs.msg.String(data='Hello world') data: Hello world --- publishing #7: std_msgs.msg.String(data='Hello world') data: Hello world --- QEMU: Terminated qemu-system-microblazeel: /pmu@0: Disconnected clk=454329055928 ns
0 件のコメント:
コメントを投稿