ROS에 여러 로봇 모델 추가
xacro 모형
각 link, joint에 네임스페이스 접두어를 붙입니다.
, 그중 $(arg ns)
는launch 파일로 전송됩니다. 다음에 어떻게 전송하는지 설명합니다.
launch 파일
이름이 붙은 모든 로봇 모델에 대해 launch 파일에 다음과 같은 코드를 추가합니다.
" ">
"robot_description"
command="$(find xacro)/xacro.py
$(find battlebot)/urdf/$(arg model) ns:="
/>
"joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"/>
"robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
"urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
args="-urdf -model -param robot_description -z 0.30"/>
각 부분 코드 해석
" ">
...
그룹에 둘러싸인 노드, 발표된parameters,topics,서비스s는 모두 [/] 접두사를 붙인다.
"robot_description"
command="$(find xacro)/xacro.py
$(find battlebot)/urdf/$(arg model) ns:="
/>
xacro를 호출합니다.py는 xacro 파일을 분석하고 ns 파라미터를 전송합니다. xacro 파일에서
$(arg ns)
를 통해 전송된 파라미터를 얻을 수 있으며 해석된 urdf모델을 [/robot description] 파라미터에 설정합니다."joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"/>
"robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
[/joint state publisher] [/robot description] 매개 변수(urdf 모형)를 분석하여 모든 비고정 관절을 획득한 다음 관절의 상태를 [/joint states] 화제를 통해 발표합니다.
[/robot state publisher]는 [/robot description] 매개 변수(urdf모델)를 분석하고 [/joint states]를 구독하여 현재 로봇의 각 좌표계의 현재 좌표를 계산하여 tf에 발표한다.
"urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
args="-urdf -model -param robot_description -z 0.30"/>
python 명령을 호출하여 [/robot description] 매개 변수(urdf모델)를 분석하고gazebo에 []라는 로봇 모델을 추가합니다.가즈보를 사용할 필요가 없으면 삭제할 수 있습니다.
예.
<launch>
<arg name="paused" default="false"/>
<arg name="use_sim_time" default="true"/>
<arg name="gui" default="true"/>
<arg name="headless" default="false"/>
<arg name="debug" default="false"/>
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find battlebot)/worlds/robot.world"/>
<arg name="debug" value="$(arg debug)" />
<arg name="gui" value="$(arg gui)" />
<arg name="paused" value="$(arg paused)"/>
<arg name="use_sim_time" value="$(arg use_sim_time)"/>
<arg name="headless" value="$(arg headless)"/>
include>
<group ns="robot1">
<param name="robot_description"
command="$(find xacro)/xacro.py
$(find battlebot)/urdf/battlebot.xacro ns:=robot1"/>
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"/>
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
args="-urdf -model robot1 -param robot_description -z 1"/>
group>
<group ns="robot2">
<param name="robot_description"
command="$(find xacro)/xacro.py
$(find battlebot)/urdf/battlebot.xacro ns:=robot2"/>
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"/>
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
args="-urdf -model robot2 -param robot_description -z 0.30"/>
group>
launch>
왜 사용하지 않는 방식입니까?
두 가지 방법으로 좌표계 이름에 [/] 접두사를 붙인다. 1.위에서 설명한 바와 같이xacro에 매개 변수를 전달하는 방식입니다.2.
사이에
를 더하는 방식.방식2를 사용하지 않는 이유는 rviz가 로보트 모델 유형을 도형화할 때 urdf모델의 명칭에 따라 tf에서 대응하는 좌표계를 찾을 수 있기 때문에 찾을 때 자동으로 명칭 공간을 추가하지 않기 때문에 로보트 모델 표시가 실패할 수 있다.
방식1은urdf모델의 이름을 직접 바꾸었기 때문에rviz는 정확한 좌표계를 찾을 수 있습니다.
참고 자료
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Gazebo 시뮬레이터로 AR drone 2.0을 웹에서 조작농업이나 경비라든지 화상 인식할 수 있는 정보 수집 드론에 개인의 지속은 외로운 것입니다. 다음에 시뮬레이터 내의 드론을 웹과 GUI의 인터페이스에서 조작할 수 있도록 했습니다. 참고로 한 것은 이쪽 ※ROS의 ca...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.