目标:
1.使用urdf在gazebo中构建双轮差动机器人,使其正确显示并通过ros node可以控制轮子速度
2.在gazebo中载入地图,在urdf中添加sensor,可以读取laser以及imu数据
// 3.添加tf,使rviz可以显示完整的sensor、map以及机器人数据
apt-get install ros-melodic-joint-state-publisher-gui ros-melodic-joint-state-controller ros-melodic-controller-manager ros-melodic-gazebo-ros-pkgs ros-melodic-gazebo-ros-control ros-melodic-velocity-controllers ros-melodic-map-server
apt-get install xterm
pip install pynput
本节推荐package以及细节文件结构请参考task/c2
src
├── course_agv_control
│ ├── CMakeLists.txt
│ ├── config
│ │ └── course_agv_control.yaml
│ ├── launch
│ │ └── course_agv_control.launch
│ ├── scripts
│ │ ├── keyboard_command.py # 键盘控制
│ │ └── kinematics.py # 运动学分解 TODO
│ └── package.xml
├── course_agv_description
│ ├── CMakeLists.txt
│ ├── launch
│ │ ├── course_agv.rviz
│ │ └── course_agv_rviz.launch
│ ├── package.xml
│ └── urdf
│ ├── course_agv.gazebo
│ ├── course_agv.xacro
│ └── materials.xacro
└── course_agv_gazebo
├── CMakeLists.txt
├── config
│ ├── map -> ../models/ground_plane_for_agv/map
│ └── map.yaml
├── launch
│ ├── course_agv_world.launch
│ ├── course_agv.rviz
│ └── course_agv_world_rviz.launch
├── models
│ └── ground_plane_for_agv
│ ├── map
│ └── ...
├── package.xml
├── scripts
│ └── robot_tf.py # tf file publish tf:(robot_base->map)
└── worlds
└── course_agv.world
- Universal Robotic Description Format (urdf)
- link : collision & visual
- joint : type & limits
- urdf & xacro
gazebo
tag in xacrotransmission
tag in xacro
- node robot_state_publisher :
tf
- node joint_state_publisher
运行以下命令查看效果
roslaunch course_agv_description course_agv_rviz.launch
- gazebo args
- node : gazebo_ros spawn_model
运行以下命令查看效果
roslaunch course_agv_gazebo course_agv_world.launch
local_velocity
towheel velocity
- 在urdf里添加相关link以及joint
- 在.gazebo文件中添加对应插件
运行以下命令
roslaunch course_agv_gazebo course_agv_world.launch
static_transform_publisher x y z qx qy qz qw frame_id child_frame_id period_in_ms
- 在rviz中添加需要显示的信息(laser,imu,map)
- 在launch文件中添加tf_publisher,tf tree参考:
map
└── robot_base
├── course_agv__hokuyo__link
├── course_agv__imu
├── course_agv__left_wheel
├── course_agv__right_wheel
└── robot_chassis
- 此时唯一没有解决的是
map->robot_base
- 通过topic:/gazebo/link_states or /gazebo/model_states可以获取agv的全局位置以及姿态
- 订阅并转换为我们需要的tf广播出去(robot_tf.py)
可以使用键盘控制查看tf以及其他信息显示是否正确
gazebo : gazebo + gzclient + gzserver
urdf工具:
- xmllint
- check_urdf
参考:
1.Using roslaunch to start Gazebo, world files and URDF models
4.Building a Visual Robot Model with URDF from Scratch
6.ROS TF