คอนเทนเนอร์ Docker นี้ประกอบด้วย ROS 2 Humble, Gazebo Fortress และการจำลอง TurtleBot 4 คอนเทนเนอร์ Docker ได้รับการกำหนดค่าให้ทำงานได้ดีกับฮาร์ดแวร์สินค้าโภคภัณฑ์โดยไม่ต้องใช้การ์ดกราฟิก ฮาร์ดแวร์ที่ได้รับการกำหนดค่าอย่างเหมาะสมส่วนใหญ่ควรจะสามารถรันการจำลองด้วยปัจจัยเวลาจริงอย่างน้อย 0.2
คอนเทนเนอร์ Docker นี้มีไว้สำหรับใช้กับโค้ดตัวอย่างนี้สำหรับโหนดของเล่น TB4 และการพูดคุย PyCon 2024 ที่เกี่ยวข้องหรือการประชุมเชิงปฏิบัติการ ROSCon 2024
Docker นี้ยังรวมการติดตั้ง ROS 2 Humble เต็มรูปแบบอีกด้วย หากคุณต้องการทบทวนทักษะ ROS ของคุณ คุณสามารถศึกษาบทช่วยสอน ROS 2 ได้ เราขอแนะนำให้คุณเริ่มต้นด้วยบทช่วยสอน CLI
เวิร์คช็อปนี้ให้คุณเลือกการผจญภัยของคุณเอง คุณต้องตัดสินใจเรื่องสำคัญสองประการ:
แต่เดี๋ยวก่อนยังมีอีกมาก! คุณแค่อยากจะลองใช้บทช่วยสอนดีๆ บน docs.ros.org เราก็มีคำแนะนำเกี่ยวกับวิธีการทำเช่นนั้นด้วย
sudo apt install docker.io
sudo usermod -aG docker $(whoami)
source ./<venv>/bin/activate
ก่อนที่จะเริ่มคอนเทนเนอร์ของคุณหากคุณต้องการสร้างคอนเทนเนอร์ Docker ตั้งแต่เริ่มต้น:
git clone [email protected]:kscottz/turtlebot4_docker.git
docker build . -t tb4
หากคุณต้องการใช้การรันอิมเมจ Docker ที่สร้างไว้ล่วงหน้า:
docker pull osrf/icra2023_ros2_gz_tutorial:roscon2024_tutorial_humble_turtlebot4
เริ่มต้นด้วยการพูดคุยเกี่ยวกับวิธีเริ่มต้นคอนเทนเนอร์ของคุณ เราได้จัดเตรียมทางเลือกไว้สองสามทางในการดำเนินเวิร์กชอป ลองดูด้านล่างแต่อย่าเพิ่งเริ่มคอนเทนเนอร์เลย! คุณมีทางเลือกอีกสองสามทางให้ตัดสินใจ!
rocker --x11 --devices=/dev/dri osrf/icra2023_ros2_gz_tutorial:roscon2024_tutorial_humble_turtlebot4 bash
rocker --x11 --devices=/dev/dri tb4 bash
โปรดทราบว่าสิ่งที่เปลี่ยนแปลงที่นี่คือชื่อของคอนเทนเนอร์ ซึ่งเป็นพารามิเตอร์ตัวที่สองรองสุดท้าย!
ตอนนี้คุณต้องตัดสินใจว่าคุณต้องการบันทึกงานของคุณไว้ที่ใด คุณมีสองทางเลือก เริ่มต้นใหม่และสร้างทุกอย่างด้วยตัวเอง หรือทำตามจากโปรเจ็กต์ที่เสร็จสมบูรณ์แล้ว นอกจากนี้ยังมีตัวเลือกที่สาม ซึ่งคุณเพิ่งเริ่มคอนเทนเนอร์ แต่ใช้เครื่องมือภายในของ Docker เพื่อบันทึกงานของคุณ แม้ว่าสิ่งนี้จะเป็นไปได้ แต่เราก็ไม่แนะนำ
หากคุณต้องการทำงานตั้งแต่เริ่มต้นตามขั้นตอนการทำงานที่เราต้องการ สิ่งที่คุณต้องทำคือสร้างไดเร็กทอรี:
mkdir tb4_toy
rocker --x11 --devices=/dev/dri --volume=<full path to your directory>:/opt/ros/overlay_ws/src/tb4_toy <container name> bash
โดยที่ไดเรกทอรีถูกแทนที่ด้วยของคุณ ไดเร็กทอรีใหม่ และคอนเทนเนอร์คือคอนเทนเนอร์ที่คุณต้องการใช้rocker --x11 --devices=/dev/dri --volume=/home/kscottz/Code/tb4_toy/:/opt/ros/overlay_ws/src/tb4_toy tb4 bash
หากคุณต้องการทำงานจากตัวอย่างโค้ดที่เสร็จแล้ว โปรดทำดังต่อไปนี้
git clone [email protected]:kscottz/tb4_toy.git
-- นี่คือโค้ดหากคุณต้องการดูrocker --x11 --devices=/dev/dri --volume=<full path to your directory>:/opt/ros/overlay_ws/src/tb4_toy <container name> bash
โดยที่ไดเรกทอรีถูกแทนที่ด้วยของคุณ ไดเร็กทอรีใหม่ และคอนเทนเนอร์คือคอนเทนเนอร์ที่คุณต้องการใช้rocker --x11 --devices=/dev/dri --volume=/home/kscottz/Code/tb4_toy/:/opt/ros/overlay_ws/src/tb4_toy tb4 bash
โปรดทราบว่าบทช่วยสอนนี้จะทำให้คุณต้องทำงานภายในคอนเทนเนอร์ตลอดเวลา และควรปล่อยให้ระบบโฮสต์ของคุณไม่ถูกแตะต้อง *หากคุณเปลี่ยนการกำหนดค่าภายในของคอนเทนเนอร์ Docker และต้องการบันทึก คุณจะต้องใช้ [docker commit](https://docs.docker.com/reference/cli/docker/container/commit/)
เพื่อบันทึก งานของคุณ
หากแล็ปท็อปของคุณมีการ์ดกราฟิกที่สวยงาม คุณสามารถเปิดใช้งานได้โดยไม่ต้องใส่บรรทัด: --devices=/dev/dri
เมื่อคุณเริ่มคอนเทนเนอร์ หากคุณมีการ์ดกราฟิกแยก เราขอแนะนำให้คุณใช้มัน! หากคุณไม่มีการ์ดกราฟิกก็ไม่ต้องกังวล! เราได้กำหนดค่าเวิร์คช็อปนี้ให้ทำงานบนแล็ปท็อปรุ่นเก่าโดยเฉพาะ
คอนเทนเนอร์สำหรับเวิร์กชอปนี้ประกอบด้วยโปรแกรมแก้ไขเทอร์มินัลทั่วไปส่วนใหญ่ที่พบในระบบ Linux คุณยินดีอย่างยิ่งที่จะใช้มัน หากคุณติดตั้งระบบไฟล์ลงใน Docker คุณจะสามารถใช้โปรแกรมแก้ไขใดๆ บนระบบโฮสต์ของคุณเพื่อแก้ไขไฟล์ได้ หากคุณไม่เคยใช้โปรแกรมแก้ไขเทอร์มินัลมาก่อน อาจเป็นวิธีที่ง่ายกว่า
เรามีคำแนะนำที่ครอบคลุมเกี่ยวกับการใช้คอนเทนเนอร์นี้โดยไม่มี Rocker ที่นี่ คู่มือนี้ประกอบด้วยสคริปต์ Bash จำนวนหนึ่งที่ทำให้การเริ่มต้นคอนเทนเนอร์ Docker ที่เหมาะสมเป็นเรื่องง่าย! คู่มือนี้ยังให้แนวทางอื่นในการดำเนินการพัฒนา ROS ภายในคอนเทนเนอร์อีกด้วย
เมื่อคุณเริ่มต้นคอนเทนเนอร์แล้ว คุณสามารถเปิด ROS และ Gazebo ได้โดยการรันคำสั่งต่อไปนี้:
ros2 launch turtlebot4_ignition_bringup turtlebot4_ignition.launch.py world:=maze
source ./install/setup.bash
colcon build
ros2 launch turtlebot4_ignition_bringup turtlebot4_ignition.launch.py world:=maze
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 30.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}"
ros2 run teleop_twist_keyboard teleop_twist_keyboard
ros2 run tb4_toy toy_node
ros2 service call /do_loopy std_srvs/Trigger '{}'