I'm trying to do an AMCL localization for a pre-created map. AMCL should take laserScan played back from .bag file (containing 2 lasers that are combined into /scan_multi). Issue is that AMCL doesn't seem to do anything, even though odometry works and TF tree should be linked correctly.
Tried also for different initial positions specified from launch file, all of which are correctly represented on map in rviz.
Parts of my launch file that might be relevant:
<arg name="map_file" default="$(find project2)/map/map.yaml"/>
<node name="map_server" pkg="map_server" type="map_server" args="$(arg map_file)" />
<node pkg="tf" type="static_transform_publisher" name="map_to_odom" args="0.0 0.0 0.0 0.0 0.0 0.0 /map /odom 40" />
<node pkg="tf" type="static_transform_publisher" name="odom_to_base_footprint" args="0.0 0.0 0.0 0.0 0.0 0.0 /odom /base_footprint 40" />
<node pkg="tf" type="static_transform_publisher" name="base_footprint_base_link" args="0.0 0.0 0.0 0.0 0.0 0.0 /base_footprint /base_link 40" />
<arg name="scan_topic" default="scan"/>
<arg name="initial_pose_x" default="0.0"/>
<arg name="initial_pose_y" default="0.0"/>
<arg name="initial_pose_a" default="0.0"/>
<node pkg="amcl" type="amcl" name="amcl">
<param name="initial_pose_x" value="$(arg initial_pose_x)"/>
<param name="initial_pose_y" value="$(arg initial_pose_y)"/>
<param name="initial_pose_a" value="$(arg initial_pose_a)"/>
<param name="odom_frame_id" value="odom"/>
<param name="base_frame_id" value="base_footprint"/>
<param name="frame_id" value="base_link"/>
<param name="map_frame_id" value="map"/>
<param name="use_map_topic" value="true"/>
<remap from="map" to="/map"/>
<remap from="scan" to="scan_multi"/>
</node>
Structure of TF tree: /map -> /odom -> /base_footprint -> /base_link -> /laser front
I tried using roswtf, got only 1 warning:
The following node subscriptions are unconnected: * /rviz: * /map_updates
Follow here for the whole project: https://drive.google.com/file/d/1AQz4...
Thanks for any help!
Deleting all static transforms from the .launch file and replacing them with a dynamic one between /odom and /base_footprint solved the issue. You can directly use the node from the src folder:
<node pkg="project2" name="odom_tf" respawn="false" type="odom_tf" output="screen"/>
Related
I created a node to map the turtlebot3_world, since in turtlebot3_world.launch there is no map frame, i assigned map_msg.header.frame_id = "odom"inside my code. now i am going to use the created map for localization, I stuck all together in below launch file. the problem is with the origin of the map, although i set the origin of map at [-3,-3,0] it is located at [0,0,0] in rviz and never change, as well as there is another error in rviz ,"No transform from [map] to [odom]" (see the photo below). how can i handle these issues?
thanks in advance.
<launch>
<arg name="my_map" default="$(find robot_laser_grid_mapping)/maps/map.yaml"/>
<node pkg="just_for_learning" type="pointstamp.py" name="position_tracker">
<param name="map_file" value="$(find robot_laser_grid_mapping)/maps/map.yaml" />
</node>
<node pkg="map_server" type="map_server" name="map_server" args="$(arg my_map)"/>
<node pkg="teleoperat1" type="key_to_twist.py" name="keys_to_twist" ></node>
<node pkg="teleoperat1" type="keyboard_drive.py" name="keyboard_driver" ></node>
<include file="$(find turtlebot3_gazebo)/launch/turtlebot3_world.launch" ></include>
<include file="$(find turtlebot3_bringup)/launch/turtlebot3_model.launch"></include>
</launch>
rviz environment
We are running RTAB map with two web cameras with the following launch file.
<launch>
<!-- Choose visualization -->
<arg name="rviz" default="true" />
<!-- Run the ROS package stereo_image_proc for image rectification and disparity computation -->
<group ns="stereo">
<node pkg="stereo_image_proc" type="stereo_image_proc" name="stereo_image_proc">
<remap from="left/image_raw" to="left/image_raw"/>
<remap from="left/camera_info" to="left/camera_info"/>
<remap from="right/image_raw" to="right/image_raw"/>
<remap from="right/camera_info" to="right/camera_info"/>
<param name="disparity_range" value="128"/>
<param name="approximate_sync" type="bool" value="True"/>
<param name="queue_size" type="int" value="10"/>
</node>
<!-- Disparity to depth -->
<node pkg="nodelet" type="nodelet" name="disparity2depth" args="standalone rtabmap_ros/disparity_to_depth">
<param name="disparity_range" value="128"/>
<param name="approx_sync" type="bool" value="true"/>
<param name="queue_size" type="int" value="100"/>
</node>
</group>
<group ns="rtabmap">
<node pkg="rtabmap_ros" type="stereo_odometry" name="stereo_odometry" output="screen">
<remap from="left/image_rect" to="/stereo/left/image_rect_color"/>
<remap from="right/image_rect" to="/stereo/right/image_rect_color"/>
<remap from="left/camera_info" to="/stereo/left/camera_info"/>
<remap from="right/camera_info" to="/stereo/right/camera_info"/>
<param name="subscribe_rgbd" type="bool" value="false"/>
<!-- <remap from="rgbd_image" to="/stereo/rgbd_image"/> -->
<!-- Published topic odom is converted into stereo_odometry -->
<remap from="odom" to="/stereo_odometry"/>
<param name="approx_sync" type="bool" value="true"/>
<param name="frame_id" type="string" value="base_link"/>
<param name="odom_frame_id" type="string" value="odom"/>
<param name="publish_tf" type="bool" value="true"/>
<param name="wait_for_transform" type="string" value="true"/>
<param name="queue_size" type="int" value="100"/>
<param name="Odom/Strategy" type="string" value="0"/> <!-- 0=Frame-to-Map, 1=Frame=to=Frame -->
<param name="Vis/EstimationType" type="string" value="1"/> <!-- 0=3D->3D 1=3D->2D (PnP) -->
<param name="Vis/CorType" value="0"/> <!-- Correspondences: 0=Features Matching, 1=Optical Flow -->
<!-- maximum features map size, default 2000 -->
<param name="OdomF2M/MaxSize" type="string" value="1000"/>
<!-- maximum features extracted by image, default 1000 -->
<param name="Vis/MaxFeatures" type="string" value="600"/>
<param name="Vis/MinInliers" type="string" value="5"/>
<param name="Stereo/MaxDisparity" type="string" value="128"/>
<param name="Stereo/OpticalFlow" type="string" value="false"/>
</node>
<!-- Visual SLAM -->
<node name="rtabmap" pkg="rtabmap_ros" type="rtabmap" output="screen" args="--delete_db_on_start">
<param name="subscribe_depth" type="bool" value="true"/>
<param name="subscribe_rgbd" type="bool" value="false"/>
<param name="subscribe_scan" type="bool" value="false"/>
<remap from="rgb/image" to="/stereo/left/image_rect_color"/>
<remap from="rgb/camera_info" to="/stereo/left/camera_info"/>
<remap from="depth/image" to="/stereo/depth"/>
<remap from="odom" to="/stereo_odometry"/>
<param name="frame_id" type="string" value="/base_link"/>
<param name="queue_size" type="int" value="2000"/>
<param name="approx_sync" type="bool" value="true"/>
<param name="Vis/MinInliers" type="string" value="12"/>
</node>
</group>
<!-- Visualisation RVIZ -->
<node if="$(arg rviz)" pkg="rviz" type="rviz" name="rviz" args="-d $(find rtabmap_ros)/launch/config/demo_stereo_outdoor.rviz"/>
</launch>
Our TF transform tree has base_link -> stereo/left, base_link -> stereo/right, odom -> base_link
After running rostopic hz stereo/depth stereo/left/image_rect_color stereo/left/camera_info we get the following output as well.
We are new to using rtab map. If someone can offer a help it would be much appreciated.
We finally found the issue. For any of those who are having rtab map odometry or mapping issues with stereo or RGBD sensors like Kinect 360 build RTAB Map from the source.The same launch file worked after the build from source.
Reason for this could be older binaries in the servers.
Guide to manually build rtabmap - Click Here to Build RTAB Map yourself
BTW you can use two USB web cams (YOU DON'T EVEN NEED BRANDED ONES LIKE LOGITECH OURS WERE UNBRANDED CHINESE ONES) as a stereo sensor. You can either sync them using a small code or you can use approx_sync parameter to true. How ever keep in mind that you have to configure TF transformations from base_link to camera_link and camera_link to individual cameras (left and right) as well to make it work. AND BEWARE Sometimes stereo setup like this may not give you a highly accurate map or odometry.
You can also try with a kinect 360 which is really cheap these days.
Im using this robot_lokalization package for the linear velocity. As only sensor input in my case is IMU. I configure the parameters and set the frames as follow
map_frame: map
odom_frame: odom
base_link_frame: /thrbot/base_link
world_frame: odom
The launch file is the following one
<launch>
<node pkg="robot_localization" type="ekf_localization_node" name="ekf_se" clear_params="true">
<rosparam command="load" file="$(find robot_localization)/params/ekf_template.yaml" />
<param name="odom_used" value="false"/>
</node>
<node pkg="tf" type="static_transform_publisher" name="base_link_to_imu" args="0 0 0 0 0 0 /thrbot/base_link /thrbot/imu_link 100" />
</launch>
The robot base_link frame is thrbot/base_link the IMU is thrbot/imu_link
Here is the photo of the TF without using the package
. As can see TF is good. But when using the package my TF is broken as can see here . Any help how to fix it?
Thanks
I have been trying to make viso2_ros work with intel realsense r200. But there is a problem with the synchronisation(I think) and viso2_ros is not getting any image data. I get the following warning:
Following is my launch file:
<launch>
<arg name="camera" default="stereo_forward"/> <node ns="$(arg camera)" pkg="stereo_image_proc" type="stereo_image_proc" name="stereo_image_proc"/> --> <node pkg="viso2_ros" type="stereo_odometer" name="stereo_odometer" output="screen">
<remap from ="stereo" to="$(arg camera)"/>
<remap from="image" to="image_rect"/>
<remap from="/$(arg camera)/left/image_rect" to="/camera/ir/image_raw"/>
<remap from="/$(arg camera)/left/camera_info" to="/camera/ir/camera_info"/>
<remap from="/$(arg camera)/right/image_rect" to="/camera/ir2/image_raw"/>
<remap from="/$(arg camera)/right/camera_info" to="/camera/ir2/camera_info"/>
<remap from="odom" to="/stereo_odometer/odometry"/>
<param name="queue_size" type="int" value="100"/>
<param name="approximate_sync" type="bool" value="true"/>
<param name="base_link_frame_id" value="$(arg camera)"/>
<param name="odom_frame_id" value="/odom"/>
</node>
</launch>
The rqt_graph:
which does not show a connection for /stereo_forward/right/image_rect. I am using Ubuntu 16.04 with ROS Kinetic. If anyone has any idea or suggestion about a resolution, I would really appreciate that. Thanks in advance!
From a quick google search it looks like Intel R200 only has 1 RGB camera. So I think you'd have to use monocular VO.
I have a file that has lines like this.
(function($, _) {
.....
})(jQuery, jQuery.ZOF);
now I want to remove the first and last line of the file and then concat this file to another file , How could it be possible with ant?
loadfile can be used as follows:
<loadfile srcfile="test.xml" property="file.first.and.last.line.removed">
<filterchain>
<filterreader classname="org.apache.tools.ant.filters.HeadFilter">
<param name="lines" value="-1"/>
<param name="skip" value="1"/>
</filterreader>
<filterreader classname="org.apache.tools.ant.filters.TailFilter">
<param name="lines" value="-1"/>
<param name="skip" value="1"/>
</filterreader>
</filterchain>
</loadfile>
<echo message="${file.first.and.last.line.removed}" file="output.txt" append="true" />
First we use a HeadFilter to read everything but skipping the first line, then we "tail" the result with a TailFilter skipping the last line.
The last line appends the content to another file.