ROS2 Gazebo
43384 ワード
1.WareHouseの作成
(1)リンクの内容でアマゾンawsで作成したwarehouseモデルを使うことにした.他のモデルではROS 2がサポートされていないことが多いが、これは修正に時間がかかると予想され、採用されていないためである.
インストール方法
# go to your ros2_ws/src
git clone -b foxy-devel https://github.com/aws-robotics/aws-robomaker-small-warehouse-world.git
cd ..
rosws update
rosdep install --from-paths src --ignore-src -r -y
colcon build
# 만약 ~/.bashrc안에 아래의 명령어 넣어놨으면 그걸 사용
source install/setup.bash
ros2 launch aws_robomaker_small_warehouse_world no_roof_small_warehouse_launch.py
が成功すると、上記の写真が表示されます.2.Turtlebot 3を読み込む
Wegazeboworldにturtlebot 3を読み込む前に、turtlebot 3 simulationをインストールします.
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
rosdep install --from-paths src --ignore-src -r -y
colcon build
source ~/.bashrc
ros2 launch turtlebot3_gazebo empty_world.launch.py
が成功すれば、このような通報が見られる.warehouseファイルとturtlebotファイルが確定した以上、次のようにファイルを変更できます.1. 'src/aws-robomakers-small-warehouse-world/worlds/no_roof_small_warehouse/no_roof_small_warehouse.world' 마지막에 다음과 같은 코드를 삽입한다.
<include>
<pose>-2.0 -0.5 0.01 0.0 0.0 0.0</pose>
<uri>model://turtlebot3_waffle</uri>
</include>
2. 'src/aws-robomakers-small-warehouse-world/models/' 안에 turtlebot3_waffle 혹은 burger 모델을 넣는다.
위같이 하고 아까와 동일하게 파일을 launch하면 이번에는 터틀봇이 있는 상태로 존재한다.
不安を感じたらコピーしたファイルで実行します.3.RVIZでの表示
上で運転している状態でRVIZを開いて設定しましょうこれで以下のエラーが発生します.にtfを見ると地図とodomしか見えません.つまり、ロボットのtfは公開されていません(もちろん、理想的にはturtlebotを移動することもできます).ありがとうございます.robot state publisherを使ってこの問題を解決することができます.特にRobot State publisherはRobote LaunchファイルにRobote State publisherを作成していますので、利用してみましょう.
つまり、私たちは2つのことを起動します.一つはawsパッケージで、もう一つはrobot state publisherです.次の起動ファイルを作成します.
turtlebot3_warehouse.launch.py
import os
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import ExecuteProcess, DeclareLaunchArgument
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import LaunchConfiguration, PythonExpression
from launch.conditions import IfCondition
TURTLEBOT3_MODEL = os.environ['TURTLEBOT3_MODEL']
WORLD_MODEL = os.environ['WAREHOUSE_MODEL']
def generate_launch_description():
use_sim_time = LaunchConfiguration('use_sim_time', default='True')
aws_small_warehouse_dir = os.path.join(get_package_share_directory('aws_robomaker_small_warehouse_world'), 'launch')
if WORLD_MODEL == 'small_warehouse':
aws_small_warehouse = IncludeLaunchDescription(
PythonLaunchDescriptionSource([aws_small_warehouse_dir, '/no_roof_small_warehouse_launch.py'])
)
elif WORLD_MODEL == 'big_warehouse':
aws_small_warehouse = IncludeLaunchDescription(
PythonLaunchDescriptionSource([aws_small_warehouse_dir, '/big_warehouse_launch.py'])
)
launch_file_dir = os.path.join(get_package_share_directory('turtlebot3_gazebo'), 'launch')
robot_state_publisher = IncludeLaunchDescription(
PythonLaunchDescriptionSource([launch_file_dir, '/robot_state_publisher.launch.py']),
launch_arguments={'use_sim_time': use_sim_time}.items(),
)
ld = LaunchDescription()
ld.add_action(aws_small_warehouse)
ld.add_action(robot_state_publisher)
return ld
その後構築および実行後、rvizで次のようにコンテンツを表示できます.4.インテルRealsense Gazebo Pluginの使用
上記のことをもう一度よく考えてみましょう.urdfとsdfを本当に知っていますか?私は今やっともっと理解した.urdfは基本的にtfを中心に組織されており,テーマはない.すなわち,robot state publisherはtf関係のみを表示する.では、Gazeboのセンサー価格はどこで見られますか?sdfファイルに書いたものと見なします.だからrealmension gazebopluginを使いたいなら?等しいurdfファイルもsdfファイルも変更します.sdfとurdfの違いは(2)に説明されている.以下に要約する.
URDF can only specify the kinematic and dynamic properties of a single robot in isolation. URDF can not specify the pose of the robot itself within a world. It is also not a universal description format since it cannot specify joint loops (parallel linkages), and it lacks friction and other properties. Additionally, it cannot specify things that are not robots, such as lights, heightmaps, etc.
urdf vs sdf
使用可能なタグ/置換/追加について簡単に説明します.
Required
<link> 태그 안에는 <inertia>가 꼭 있어야 한다.
Optional
* <link> 안에 <gazebo> element를 넣는 것.
- color 를 gazebo format으로 바꿀 수 있음
- Add sensor plugins
* Add a <gazebo> element for every <joint>
- Set proper damping dynamics
- Add actuator control plugins
適当に調べて、また知りたいなら(2)でもう一度調べてみます.だから私はなぜsdfが必要なのか知っています.だから、realsenceをどのように家のスペクトルに使いますか.
家譜に載ったのは最終的にモデルだった.これはsdfファイルです.この部分を修正しましょう.
top-level launch = turtlebot3_warehouse.launch.py
second-level launch = no_roof_small_warehouse_launch.py, robot_state_publisher.launch.py
no_roof_small_warehouse_launch.py = gzserver, gzclient, waffle model.sdf
robot_state_publisher.launch.py = urdf parse.
すなわちwaffleのモデルです.sdfファイル、turtlebot 3 waffle d 435 i.urdfを使用します.二つを修正するという意味です.
もう一度探してurdfをgazeboに産卵する方法があります.単一慣性とプラグインで異なる方法で作成します.例は以下のとおりです.
<xacro:macro name="box_inertia" params="m w h d">
<inertial>
<origin xyz="0 0 0" rpy="${pi/2} 0 ${pi/2}"/>
<mass value="${m}"/>
<inertia ixx="${(m/12) * (h*h + d*d)}" ixy="0.0" ixz="0.0" iyy="${(m/12) * (w*w + d*d)}" iyz="0.0" izz="${(m/12) * (w*w + h*h)}"/>
</inertial>
</xacro:macro>
<link name="base_link">
<visual>
<geometry>
<box size="${base_length} ${base_width} ${base_height}"/>
</geometry>
<material name="Cyan">
<color rgba="0 1.0 1.0 1.0"/>
</material>
</visual>
<collision>
<geometry>
<box size="${base_length} ${base_width} ${base_height}"/>
</geometry>
</collision>
<xacro:box_inertia m="15" w="${base_width}" d="${base_length}" h="${base_height}"/>
</link>
この場合、xacro、xml macroなどの簡単なタグを通します.4.d 435 i Pluginを放棄する。
理由を捨てる。
デフォルトpluginの使用
の最終画面です.使い方は本当に簡単です.カメラの種類を変更します.以下のとおりです.
camera.sdf
<sensor name="camera" type="camera">
<always_on>true</always_on>
<visualize>true</visualize>
<update_rate>30</update_rate>
<camera name="intel_realsense_r200">
<horizontal_fov>1.02974</horizontal_fov>
<image>
<width>1920</width>
<height>1080</height>
<format>R8G8B8</format>
</image>
<clip>
<near>0.02</near>
<far>300</far>
</clip>
<noise>
<type>gaussian</type>
<!-- Noise is sampled independently per pixel on each frame.
That pixel's noise value is added to each of its color
channels, which at that point lie in the range [0,1]. -->
<mean>0.0</mean>
<stddev>0.007</stddev>
</noise>
</camera>
<plugin name="camera_driver" filename="libgazebo_ros_camera.so">
<ros>
<!-- <namespace>test_cam</namespace> -->
<!-- <remapping>image_raw:=image_demo</remapping> -->
<!-- <remapping>camera_info:=camera_info_demo</remapping> -->
</ros>
<!-- camera_name>omit so it defaults to sensor name</camera_name-->
<!-- frame_name>omit so it defaults to link name</frameName-->
<!-- <hack_baseline>0.07</hack_baseline> -->
</plugin>
</sensor>
camera.urdf
<gazebo reference="camera_link">
<sensor name="depth_camera" type="depth">
<visualize>true</visualize>
<update_rate>30.0</update_rate>
<camera name="camera">
<horizontal_fov>1.047198</horizontal_fov>
<image>
<width>640</width>
<height>480</height>
<format>R8G8B8</format>
</image>
<clip>
<near>0.05</near>
<far>3</far>
</clip>
</camera>
<plugin name="depth_camera_controller" filename="libgazebo_ros_camera.so">
<baseline>0.2</baseline>
<alwaysOn>true</alwaysOn>
<updateRate>0.0</updateRate>
<frame_name>camera_depth_frame</frame_name>
<pointCloudCutoff>0.5</pointCloudCutoff>
<pointCloudCutoffMax>3.0</pointCloudCutoffMax>
<distortionK1>0</distortionK1>
<distortionK2>0</distortionK2>
<distortionK3>0</distortionK3>
<distortionT1>0</distortionT1>
<distortionT2>0</distortionT2>
<CxPrime>0</CxPrime>
<Cx>0</Cx>
<Cy>0</Cy>
<focalLength>0</focalLength>
<hackBaseline>0</hackBaseline>
</plugin>
</sensor>
</gazebo>
変更された部分は以下の通りです.5. Google Cartographer
今重要な問題があります.地図とodomの間に変換が生成されないため、ロボットやscan msgは地図には見えません.おかしいことに、地図描画者ノードのテーマはすべてできます.しかし、まだTFエラーがあります.どこが間違っているかを知る必要があります.
6. RTAB-Map
まずrtabmapをlidarの形式に変えます.昨日作ったurdfはずっとトラブルを起こしています.正確にはurdfではなく、sdfファイルには非常に厄介な部分があるようです.特に上にmapとodomの切り替えがないので、何も見えないと、この部分はプレッシャーがかかります.本当にtf treeをチェックすれば問題ありません...まだ長い道のりがあるようです.を調べたところ、tfツリーの問題はありませんでした.単純にGazeboがエラーを起こした.いずれにしても,上記pclを用いてマッピングを行い,以下のようなマッピングを得た.本人のカメラのfovや焦点距離を考慮して、もう一度します.
7. Navigation
調音の終わりが純情だと信じて、基本教程を始めましょう.
次は製図員が作った地図です.この地図を基準にナビゲーションを行った.までよくできていました.
Feed back
Reference
この問題について(ROS2 Gazebo), 我々は、より多くの情報をここで見つけました https://velog.io/@cjh1995-ros/ROS2-Gazeboテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol