Search
Enter Singularity shell:
singularity shell deploy/images/robolab_noetic.simg
or
deploy/scripts/start_singularity_aro
Configure workspace with the provided hw_03_pkgs. Add the folders to your workspace (overriding the aro_sim package). Then catkin build and source devel/setup.bash as usual. If catkin build results in an error, try catkin clean and then catkin build again. This may fix your problem.
catkin build
source devel/setup.bash
catkin clean
Get familiar with the package. The structure of the package is as follows:
config/
launch/
aro_loc.launch
sim.launch
scripts/
aro_localization
src/aro_localization/
factor_graph.py
CMakeLists.txt
dependencies.rosinstall
package.xml
Don't forget to source your workspace:
source "${ws}/devel/setup.bash"
To test the aro_localization node in simulator:
roslaunch --sigint-timeout 1 --sigterm-timeout 1 aro_localization sim.launch fuse_icp_slam:=false
On the real robot, run
roslaunch aro_localization aro_loc.launch
There are a few differences between the simulator and the real robot:
This is definition of the API of the aro_localization node you will be working on.
Only the important parameters are listed here. For the full view, refer to scripts/aro_localization source code.
scripts/aro_localization
map_frame
fused_odom
odom_frame
odom
body_frame
publish_tf
invert_tf
max_iters
c_
apriltag
icp_odom
ground_truth_odom
mobile_base/sensors/core
bumper
fused_odom_viz
fused_odom_path
fused_map_fast_publisher
Find places in src/aro_localization/factor_graph.py with comment TODO: ARO homework 3 and fill in the missing pieces so that the fused localization works.
src/aro_localization/factor_graph.py
TODO: ARO homework 3
You will need to fill in the residuals for each factor in the graph, and compute the relevant Jacobian entries:
res
compute_pose_residual()
res_odom
res_mr
res_ma
J
J1
Jm
compute_residuals_jacobian
solver_options
self.compute_residuals_jacobian_opt
optimize()
"3-point"
Upload the package aro_localization to Brute. Your factor_graph.py file will be used on a set of static datasets to find out it works correctly.
compute_residuals()
compute_residuals_jacobian()
if __name__ == '__main__'