博客地址:https://www.cnblogs.com/zylyehuo/

Switching Sampling Space of Model Predictive Path-Integral Controller to Balance Efficiency and Safety in 4WIDS Vehicle Navigation

GitHub项目链接

部署环境

  • Ubuntu 20.04
  • ROS Noetic
  • numpy 1.20.3

第一步:安装 osqp,osqp-eigen

ubuntu20.04 osqp,osqp-eigen和测试记录

安装 osqp

git clone https://gitee.com/juanmv/osqp.git

cd osqp

mkdir build

cd build

cmake ..

sudo make install

安装 osqp-eigen

git clone https://gitee.com/juanmv/osqp-eigen.git

cd osqp-eigen

mkdir build

cd build

cmake ..

sudo make install

测试代码

git clone https://gitee.com/juanmv/osqp_test.git

cd osqp_test

mkdir build

cd build

cmake ..

make

./osqp_test

第二步:下载项目源码

git clone https://github.com/MizuhoAOKI/nullspace_mpc

第三步:自动下载依赖项

cd nullspace_mpc

sudo make install_deps

第四步:初始化并更新 rosdep,下载 ROS 依赖项

ROS依赖包安装问题/XXXXX:Cannot locate rosdep definition for [XXX]

cd nullspace_mpc

sudo rosdep init # 如果已经显示初始化,则跳过这条指令,直接执行下一条

rosdep update

rosdep install -y --from-paths src --ignore-src --rosdistro noetic

第五步:Python 安装 jsk_data ROS 包

sudo apt-get update

sudo apt-get install ros-noetic-jsk-data

第六步:几个主要文件的修改

/home/yehuo/nullspace_mpc_ws/Makefile

注意 C++ 编译器的版本是否和自己电脑的一致

# Usage: make [command]
# --- Variables ---
SHELL:=/bin/bash
PROJ_NAME=nullspace_mpc
VERSION=0.1.1
USER_NAME=noetic # Docker image and container naming
DOCKER_IMAGE_BASE = $(PROJ_NAME):$(VERSION)
CONTAINER_NAME_BASE = $(PROJ_NAME)-container # Workspace and X11 forwarding settings
WORKSPACE = $(shell pwd)
XSOCK = /tmp/.X11-unix
XAUTH = /tmp/.docker.xauth # Phony targets to prevent conflicts with file names
.PHONY: build # Build CPU image
setup_docker_cpu:
docker build \
--build-arg BASE_IMAGE=ubuntu:20.04 \
--build-arg ROS_PACKAGE=ros-noetic-desktop \
-t $(DOCKER_IMAGE_BASE)-cpu \
-f docker/Dockerfile_cpu . # Build GPU image
setup_docker_gpu:
docker build \
-t $(DOCKER_IMAGE_BASE)-gpu \
-f docker/Dockerfile_gpu . # Launch or attach to the CPU container
run_docker_cpu:
@CONTAINER="$(CONTAINER_NAME_BASE)-cpu"; \
if [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "running" ]; then \
echo "Attaching to running container: $$CONTAINER"; \
$(MAKE) exec_docker_cpu; \
elif [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "exited" ]; then \
echo "Restarting and attaching to container: $$CONTAINER"; \
docker start $$CONTAINER && $(MAKE) exec_docker_cpu; \
elif [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "created" ]; then \
echo "Starting and attaching to container: $$CONTAINER"; \
docker start $$CONTAINER && $(MAKE) exec_docker_cpu; \
elif [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "paused" ]; then \
echo "Unpausing and attaching to container: $$CONTAINER"; \
docker unpause $$CONTAINER && $(MAKE) exec_docker_cpu; \
else \
echo "Creating and running new container: $$CONTAINER"; \
docker run -it --name $$CONTAINER \
--network host \
--privileged \
--ipc host \
--volume=$(WORKSPACE):/home/$(USER_NAME)/$(PROJ_NAME):rw \
--volume=$(XSOCK):$(XSOCK):rw \
--env="DISPLAY=$(DISPLAY)" \
--env="QT_X11_NO_MITSHM=1" \
$(DOCKER_IMAGE_BASE)-cpu \
bash; \
fi # Launch or attach to the GPU container
run_docker_gpu:
@CONTAINER="$(CONTAINER_NAME_BASE)-gpu"; \
if [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "running" ]; then \
echo "Attaching to running container: $$CONTAINER"; \
$(MAKE) exec_docker_gpu; \
elif [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "exited" ]; then \
echo "Restarting and attaching to container: $$CONTAINER"; \
docker start $$CONTAINER && $(MAKE) exec_docker_gpu; \
elif [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "created" ]; then \
echo "Starting and attaching to container: $$CONTAINER"; \
docker start $$CONTAINER && $(MAKE) exec_docker_gpu; \
elif [ "$$(docker inspect -f '{{.State.Status}}' $$CONTAINER 2>/dev/null)" = "paused" ]; then \
echo "Unpausing and attaching to container: $$CONTAINER"; \
docker unpause $$CONTAINER && $(MAKE) exec_docker_gpu; \
else \
echo "Creating and running new container: $$CONTAINER"; \
[ -e "$(XAUTH)" ] || install -m 600 /dev/null "$(XAUTH)"; \
chmod 644 "$(XAUTH)" || true; \
xauth nlist "$(DISPLAY)" | sed -e 's/^..../ffff/' | xauth -f "$(XAUTH)" nmerge - || true; \
sudo chmod 777 $(XAUTH) && \
docker run -it --name $$CONTAINER \
--cap-add=SYS_NICE \
--gpus all \
--network host \
--privileged \
--ipc host \
--shm-size=1gb \
--volume=$(WORKSPACE):/home/$(USER_NAME)/$(PROJ_NAME):rw \
--volume=$(XSOCK):$(XSOCK):rw \
--volume=$(XAUTH):$(XAUTH):rw \
--env=TERM=xterm-256color \
--env="DISPLAY=$(DISPLAY)" \
--env="XAUTHORITY=$(XAUTH)" \
--env="QT_X11_NO_MITSHM=1" \
--env="NVIDIA_VISIBLE_DEVICES=all" \
--env="NVIDIA_DRIVER_CAPABILITIES=all" \
--env="MESA_D3D12_DEFAULT_ADAPTER_NAME=NVIDIA" \
$(DOCKER_IMAGE_BASE)-gpu \
bash; \
fi # Attach to the running CPU container
exec_docker_cpu:
docker exec -it $(CONTAINER_NAME_BASE)-cpu bash # Attach to the running GPU container
exec_docker_gpu:
docker exec -it $(CONTAINER_NAME_BASE)-gpu bash # build ros packages
build:
@set -e; \
source /opt/ros/noetic/setup.bash; \
export CC=gcc-11 CXX=g++-11; \
ARCH=$$(dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null || echo x86_64-linux-gnu); \
catkin build --cmake-args \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_POLICY_VERSION_MINIMUM=3.5 \
-DCMAKE_SYSTEM_LIBRARY_PATH="/usr/lib/$$ARCH;/lib/$$ARCH;/usr/lib;/lib" \
-DCMAKE_CXX_FLAGS="-O2" \
-DENABLE_OSQP=ON # clean build caches
clean:
rm -r build devel logs .catkin_tools # install packages which are not supported by rosdep
install_deps:
sudo apt-get update && apt-get install -y \
git \
cmake \
build-essential \
pkg-config \
psmisc \
gcc-11
bash shell/ensure_cmake.sh 3.18.0
bash shell/install_osqp.sh
bash shell/install_osqp_eigen.sh killall:
./shell/killall.sh # record rosbag (all topics)
record:
cd ${WORKSPACE}/rosbag; rosbag record -a # play and check rosbag
## [shell 1] make view_rosbag
## [shell 2] rosbag play rosbag/xxx.bag
view_rosbag:
source /opt/ros/noetic/setup.bash && source ./devel/setup.bash &&\
roslaunch launch/rosbag_play.launch workspace:=${WORKSPACE} # gazebo_world.launch
gazebo_world:
source /opt/ros/noetic/setup.bash && source ./devel/setup.bash &&\
roslaunch launch/gazebo_world.launch # gmapping.launch
gmapping:
source /opt/ros/noetic/setup.bash && source ./devel/setup.bash &&\
roslaunch launch/gmapping.launch workspace:=${WORKSPACE} # navigation.launch
navigation:
source /opt/ros/noetic/setup.bash && source ./devel/setup.bash &&\
roslaunch launch/navigation.launch workspace:=${WORKSPACE} # navigation with nullspace_mpc
navigation_nullspace_mpc:
source /opt/ros/noetic/setup.bash && source ./devel/setup.bash &&\
roslaunch launch/navigation.launch workspace:=${WORKSPACE} local_planner:=nullspace_mpc # navigation with nullspace_mpc (lite)
navigation_nullspace_mpc_lite:
source /opt/ros/noetic/setup.bash && source ./devel/setup.bash &&\
export OMT_WAIT_POLICY=PASSIVE &&\
roslaunch launch/navigation.launch workspace:=${WORKSPACE} controller_mode:=lite show_gazebo_gui:=false gazebo_headless:=true # navigation with mppi
navigation_mppi:
source /opt/ros/noetic/setup.bash && source ./devel/setup.bash &&\
roslaunch launch/navigation.launch workspace:=${WORKSPACE} local_planner:=mppi_h # evaluation demo with nullspace_mpc
eval_demo_nullspace_mpc:
source $(WORKSPACE)/devel/setup.bash &&\
mkdir -p result &&\
python3 $(WORKSPACE)/src/evaluation/mpc_nav_evaluator/scripts/run_evaluation.py \
--agenda_yaml_path $(WORKSPACE)/data/eval_demo/agenda.yaml \
--controller nullspace_mpc # evaluation demo with mppi
eval_demo_mppi:
source $(WORKSPACE)/devel/setup.bash &&\
mkdir -p result &&\
python3 $(WORKSPACE)/src/evaluation/mpc_nav_evaluator/scripts/run_evaluation.py \
--agenda_yaml_path $(WORKSPACE)/data/eval_demo/agenda.yaml \
--controller mppi_h # eval_demo_mppi_3d_a:
# source $(WORKSPACE)/devel/setup.bash &&\
# mkdir -p result &&\
# python3 $(WORKSPACE)/src/evaluation/mpc_nav_evaluator/scripts/run_evaluation.py \
# --agenda_yaml_path $(WORKSPACE)/data/eval_demo/agenda.yaml \
# --controller mppi_3d_a # eval_demo_mppi_3d_b:
# source $(WORKSPACE)/devel/setup.bash &&\
# mkdir -p result &&\
# python3 $(WORKSPACE)/src/evaluation/mpc_nav_evaluator/scripts/run_evaluation.py \
# --agenda_yaml_path $(WORKSPACE)/data/eval_demo/agenda.yaml \
# --controller mppi_3d_b eval_ten_small:
source $(WORKSPACE)/devel/setup.bash &&\
mkdir -p result &&\
python3 $(WORKSPACE)/src/evaluation/mpc_nav_evaluator/scripts/run_evaluation.py \
--agenda_yaml_path $(WORKSPACE)/data/eval_ten/small/agenda_small.yaml \ eval_ten_large:
source $(WORKSPACE)/devel/setup.bash &&\
mkdir -p result &&\
python3 $(WORKSPACE)/src/evaluation/mpc_nav_evaluator/scripts/run_evaluation.py \
--agenda_yaml_path $(WORKSPACE)/data/eval_ten/large/agenda_large.yaml \

/home/yehuo/nullspace_mpc_ws/src/control/nullspace_mpc/CMakeLists.txt

cmake_minimum_required(VERSION 3.0.2)
project(nullspace_mpc) # parameters
option(USE_OPENMP "USE_OPENMP" ON) # ON / OFF ## Find catkin macros and libraries
## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
## is used, also find other catkin packages
find_package(catkin REQUIRED COMPONENTS
geometry_msgs
visualization_msgs
jsk_rviz_plugins
nav_msgs
roscpp
tf2
tf2_geometry_msgs
tf2_ros
grid_map_core
grid_map_ros
grid_map_filters
grid_map_loader
grid_map_msgs
grid_map_rviz_plugin
grid_map_visualization
qp_solver_collection
mpc_eval_msgs
) # use eigen3 (matrix computation library)
find_package(Eigen3 REQUIRED) # load openmp
if(USE_OPENMP)
find_package(OpenMP REQUIRED)
if(OpenMP_FOUND)
message(WARNING "OpenMP found. Activate CPU acceleration.")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()
if(NOT OPENMP_FOUND)
message(FATAL ERROR "Unable to find OpenMP library.")
endif()
endif() catkin_package(
) ###########
## Build ##
########### ## Specify additional locations of header files
## Your package locations should be listed before other locations
include_directories(
include
${catkin_INCLUDE_DIRS}
${EIGEN3_INCLUDE_DIR}
# ${OPENMP_INCLUDE_DIR}
/usr/local/include
) ## Declare a C++ library
add_library(nullspace_mpc_core SHARED src/nullspace_mpc_core.cpp)
add_library(hqp SHARED src/hqp.cpp /home/yehuo/nullspace_mpc_ws/src/QpSolverCollection/src/QpSolverCollection.cpp /home/yehuo/nullspace_mpc_ws/src/QpSolverCollection/src/QpSolverOsqp.cpp) # hqp include directories
target_include_directories(hqp PUBLIC
/usr/local/include/osqp # OSQP include
/usr/local/include
/usr/local/share
/home/yehuo/nullspace_mpc_ws/src/QpSolverCollection/src
) ## link openmp
if(USE_OPENMP)
if (OPENMP_FOUND)
if (TARGET OpenMP::OpenMP_CXX)
target_link_libraries(nullspace_mpc_core OpenMP::OpenMP_CXX)
endif()
endif()
endif() # Link OSQP to hqp
target_link_libraries(hqp
/usr/local/lib/libosqp.so
/usr/local/lib/libOsqpEigen.so
) find_library(OSQP_LIB osqp HINTS /usr/local/lib)
find_library(OSQPEIGEN_LIB OsqpEigen HINTS /usr/local/lib) target_link_libraries(hqp
${OSQP_LIB}
${OSQPEIGEN_LIB}
) ## Declare a C++ executable
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
add_executable(${PROJECT_NAME}_node src/nullspace_mpc_node.cpp src/nullspace_mpc.cpp) ## Add cmake target dependencies of the executable
## same as for the library above
add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) ## Specify libraries to link a library or executable target against
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
nullspace_mpc_core
hqp
) #############
## Install ##
############# ## Mark other files for installation (e.g. launch and bag files, etc.)
install(
DIRECTORY
launch
config
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)

“throw”报错

"/home/yehuo/nullspace_mpc/src/openni2_camera/include/openni2_camera/openni2_device.h:67:48: error: ISO C++17 does not allow dynamic exception specifications 67 | OpenNI2Device(const std::string& device_URI) throw (OpenNI2Exception); "

直接删除或注释即可

右值"rvalue"错误

error: taking address of rvalue [-fpermissive]
pos.object_id = static_cast<std::ostringstream*>(&(std::ostringstream() << max_id_))->str();

第七步:编译项目

cd nullspace_mpc

sudo rosdep init # 如果已经显示初始化,则跳过这条指令,直接执行下一条

rosdep update

rosdep install -y --from-paths src --ignore-src --rosdistro noetic

论文复现【Switching Sampling Space of Model Predictive Path-Integral Controller to Balance Efficiency and Safety in 4WIDS Vehicle Navigation】的更多相关文章

  1. Visualizing and Understanding Convolutional Networks论文复现笔记

    目录 Visualizing and Understanding Convolutional Networks 论文复现笔记 Abstract Introduction Approach Visual ...

  2. FCOS论文复现:通用物体检测算法

    摘要:本案例代码是FCOS论文复现的体验案例,此模型为FCOS论文中所提出算法在ModelArts + PyTorch框架下的实现.本代码支持FCOS + ResNet-101在MS-COCO数据集上 ...

  3. Split to Be Slim: 论文复现

    摘要:在本论文中揭示了这样一种现象:一层内的许多特征图共享相似但不相同的模式. 本文分享自华为云社区<Split to Be Slim: 论文复现>,作者: 李长安 . Split to ...

  4. 一文详解ATK Loss论文复现与代码实战

    摘要:该方法的主要思想是使用数值较大的排在前面的梯度进行反向传播,可以认为是一种在线难例挖掘方法,该方法使模型讲注意力放在较难学习的样本上,以此让模型产生更好的效果. 本文分享自华为云社区<AT ...

  5. MVC(Model(模型) View(视图) Controller(控制器))

    复习 1.      商品表 增删改查 index.php  add.php   view.php   edit.php   action.php 2.      MVC(Model(模型)  Vie ...

  6. ASP.NET MVC轻教程 Step By Step 4——Model、View和Controller

    ASP.NET MVC中的Model(数据模型)主要包括定义数据结构.数据库读写.数据验证等等和对象处理相关的工作. 在解决方案资源管理器中找到Model文件夹,点击右键,添加一个新类,名为“Mess ...

  7. Asp.Net Core 入门(四)—— Model、View、Controller

    和我们学习Asp.Net MVC一样,Asp.Net Core MVC的Model.View.Controller也和我们熟悉的Asp.Net MVC中的相似.不同的是我们在使用Asp.Net Cor ...

  8. Facebook 发布深度学习工具包 PyTorch Hub,让论文复现变得更容易

    近日,PyTorch 社区发布了一个深度学习工具包 PyTorchHub, 帮助机器学习工作者更快实现重要论文的复现工作.PyTorchHub 由一个预训练模型仓库组成,专门用于提高研究工作的复现性以 ...

  9. 小白经典CNN论文复现系列(一):LeNet1989

    小白的经典CNN复现系列(一):LeNet-1989 之前的浙大AI作业的那个系列,因为后面的NLP的东西我最近大概是不会接触到,所以我们先换一个系列开始更新博客,就是现在这个经典的CNN复现啦(。・ ...

  10. 论文阅读 A Data-Driven Graph Generative Model for Temporal Interaction Networks

    13 A Data-Driven Graph Generative Model for Temporal Interaction Networks link:https://scholar.googl ...

随机推荐

  1. d.ts文件无法识别

    比如我给window全局扩展了一个属性 demo/global.d.ts declare global { interface Window { $electron: any; } } export ...

  2. Codeforces Round #619 (Div. 2) ABC 题解

    A. Three Strings 题意:每次可以把c[i]拿去和a[i]或b[i]交换. 问你能否把ab变成相等. 思路:在ab不相等的时候看看c能不能与一方相等来中和.不能的话就不行. view c ...

  3. SciTech-AV-Audio-Coding-Sampling-PCM:Multiplex(FD频分/TD时分多工)+DPCM(Delta增量)+ADPCM(Adaptive Delta自适应增量) + Oversampling超采样

    pdf: https://web.stanford.edu/class/ee179/lectures/notes13.pdf EE 179: Communication Systems Textboo ...

  4. MySQL 19 为什么我只查一行的语句,也执行这么慢?

    有些情况下,"查一行"也会执行特别慢,今天就看看什么情况会出现这个现象. 如果MySQL本身有很大压力,导致数据库服务器CPU占有率很高或IO利用率很高,这种情况所有语句的执行都可 ...

  5. Nginx通过反向代理将https访问地址代理至内网-九五小庞

    server { listen 7090 default_server; listen [::]:7090 default_server; #server_name _; root /usr/shar ...

  6. 深入浅出--从零开始建设k8s监控之thanos(六)

    前言 书接上文,目前环境已经做好了水平拆分,是这个样子的 本文使用thanos对这些prometheus进行数据汇聚,并且详细讨论一下thanos 环境准备 组件 版本 操作系统 Ubuntu 22. ...

  7. ClickHouse 运维相关部分命令记录

    利用clickhouse-client和linux管道命令结合,迁移数据.这个办法速度不是特别快,一下午大概迁移40亿数据的样子 clickhouse-client --host 127.0.0.1 ...

  8. 一名ICer的博客开帖记录

    前言 看园子内容已有3-4年之久,虽然对于一名ICer来说,园子内容偏少.但是仍然"咸鱼IC"等一众大佬的优质好文,让我知道这是我未来学习技术的一个好地方.也在我心中埋下了一个未来 ...

  9. 2.3 rt-thread 控制台串口

    1.menuconfig 2.烧录程序后,发现不好使,msh无输出,输入也不行,排查发现是,官方bsp和我板载的uart1引脚不一致引起,修改后测试正常. 编译后报错,原因是使能串口1后,串口1的发送 ...

  10. Origin2022中文版绘制套娃式柱形图,大柱套小柱!

    柱形图是科研中常用的图表之一,为了同时展示分数据与总数据之间的趋势分布,我们可以采用大柱形图(总数据)嵌套小柱形图(分数据)的展示方式,使图表更清晰直观,下面给大家分享如何制作套娃式柱形图: 操作步骤 ...