ros2 visualize
ros2 run robot_state_publisher robot_state_publisher --ros-args -p robot_description:="$(xacro /home/user/ros2/arduinobot_ws/src/arduinobot_description/urdf/arduinobot_urdf.xacro)"
# all the movable joints of our robots
ros2 run joint_state_publisher_gui joint_state_publisher_gui
# open rviz2 visulize
ros2 run rviz2 rviz2
use launch file
display.launch.py
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import DeclareLaunchArgument
import os
from ament_index_python.packages import get_package_share_directory
from launch_ros.parameter_descriptions import ParameterValue
from launch.substitutions import Command, LaunchConfiguration
def generate_launch_description():
model_arg=DeclareLaunchArgument(
name="model",
default_value=os.path.join(get_package_share_directory("arduinobot_description"),"urdf","arduinobot_urdf.xacro"),
description="Absolute path to the robot URDF file"
)
"""
convert xacro to plain urdf
LaunchConfiguration read the content of model argument which full path of axcro model
robot_description will be full plain urdf model
"""
robot_description = ParameterValue(Command(["xacro ", LaunchConfiguration("model")]))
# all the nodes want to start
robot_state_publisher = Node(
package="robot_state_publisher",
executable="robot_state_publisher",
parameters=[{"robot_description":robot_description}]
)
joint_state_publisher_gui = Node(
package="joint_state_publisher_gui",
executable="joint_state_publisher_gui"
)
rviz_node = Node(
package="rviz2",
executable="rviz2",
name="rviz2",
output="screen",
arguments=["-d",os.path.join(get_package_share_directory("arduinobot_description"),"rviz","display.rviz")]
)
return LaunchDescription([
model_arg,
robot_state_publisher,
joint_state_publisher_gui,
rviz_node
])
cmd
ros2 launch arduinobot_description display.launch.py
gazebo launch
需要先在axcro中添加质点惯性张量和collision,collision复制stl文件即可
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import DeclareLaunchArgument, SetEnvironmentVariable, IncludeLaunchDescription
import os
from ament_index_python.packages import get_package_share_directory, get_package_prefix
from launch_ros.parameter_descriptions import ParameterValue
from launch.substitutions import Command, LaunchConfiguration
from launch.launch_description_sources import PythonLaunchDescriptionSource
def generate_launch_description():
model_arg=DeclareLaunchArgument(
name="model",
default_value=os.path.join(get_package_share_directory("arduinobot_description"),"urdf","arduinobot_urdf.xacro"),
description="Absolute path to the robot URDF file"
)
"""
set enviromental variable so that it can properly load
and visualize robot's urdf model
"""
env_var = SetEnvironmentVariable("GAZEBO_MODEL_PATH",os.path.join(get_package_prefix("arduinobot_description"),"share"))
"""
convert xacro to plain urdf
LaunchConfiguration read the content of model argument which full path of axcro model
robot_description will be full plain urdf model
"""
robot_description = ParameterValue(Command(["xacro ", LaunchConfiguration("model")]))
# all the nodes want to start
robot_state_publisher = Node(
package="robot_state_publisher",
executable="robot_state_publisher",
parameters=[{"robot_description":robot_description}]
)
"""
gazebo has 2 modules server and client, need launch
"""
start_gazebo_server = IncludeLaunchDescription(
PythonLaunchDescriptionSource(os.path.join(get_package_share_directory("gazebo_ros"),"launch","gzserver.launch.py"))
)
start_gazebo_client = IncludeLaunchDescription(
PythonLaunchDescriptionSource(os.path.join(get_package_share_directory("gazebo_ros"),"launch","gzclient.launch.py"))
)
# appear our bot
spawn_robot = Node(
package="gazebo_ros",
executable="spawn_entity.py",
arguments=["-entity","arduinobot","-topic", "robot_description"]
)
return LaunchDescription([
env_var,
model_arg,
robot_state_publisher,
start_gazebo_server,
start_gazebo_client,
spawn_robot
])
gazebo
transmission this tag indicates the presense of machanical transmission connects each motor of robot to each link of arm.
all movable links will be actuated by the same motor with same mechanical.
<!-- the number of the joint to which transmission refers to -->
<xacro:macro name="default_transmission" params="number">
<transmission name="transmission_${number}">
<!-- simulation of transmission logic -->
<plugin>transmission_interface/SimpleTransmission</plugin>
<joint name="joint_${number}" role="joint1">
<!-- one degree of the motor corresponds to one degree of the robot arm -->
<mechanicalReduction>1.0</mechanicalReduction>
</joint>
<actuator name="motor_${number}" role="actuator1">
</actuator>
</transmission>
</xacro:macro>
<xacro:default_transmission number="1"/>
<xacro:default_transmission number="2"/>
<xacro:default_transmission number="3"/>
<xacro:default_transmission number="4"/>
浙公网安备 33010602011771号